Latest 25 from a total of 3,441 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Remove Liquidity | 27661213 | 60 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27428056 | 65 days ago | IN | 0 ETH | 0.00000001 | ||||
| Remove Liquidity | 27426616 | 65 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27409528 | 66 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27367006 | 67 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27296114 | 68 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27295675 | 68 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27294732 | 68 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27293875 | 68 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 27292429 | 68 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 26750211 | 81 days ago | IN | 0 ETH | 0 | ||||
| Add Liquidity | 26733326 | 81 days ago | IN | 0 ETH | 0.00000003 | ||||
| Swap Exact Token... | 26704290 | 82 days ago | IN | 0 ETH | 0.00000034 | ||||
| Add Liquidity | 26524506 | 86 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 25293407 | 115 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 24948281 | 123 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 24802098 | 126 days ago | IN | 0 ETH | 0.00000014 | ||||
| Remove Liquidity | 24794882 | 126 days ago | IN | 0 ETH | 0 | ||||
| Remove Liquidity | 24268228 | 138 days ago | IN | 0 ETH | 0.00000033 | ||||
| Remove Liquidity | 23956349 | 146 days ago | IN | 0 ETH | 0.00000031 | ||||
| Swap Exact Token... | 23457771 | 157 days ago | IN | 0 ETH | 0.00000036 | ||||
| Swap Exact Token... | 23112450 | 165 days ago | IN | 0 ETH | 0.00000038 | ||||
| Swap Exact Token... | 22739223 | 174 days ago | IN | 0 ETH | 0.00000035 | ||||
| Remove Liquidity | 22712845 | 174 days ago | IN | 0 ETH | 0 | ||||
| Swap Exact Token... | 22575802 | 178 days ago | IN | 0 ETH | 0.00000036 |
Latest 25 internal transactions (View All)
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 26704290 | 82 days ago | 0.03553172 ETH | ||||
| 26704290 | 82 days ago | 0.03553172 ETH | ||||
| 23457771 | 157 days ago | 0.00136287 ETH | ||||
| 23457771 | 157 days ago | 0.00136287 ETH | ||||
| 23112450 | 165 days ago | 0.00010373 ETH | ||||
| 23112450 | 165 days ago | 0.00010373 ETH | ||||
| 22739223 | 174 days ago | 0.06751434 ETH | ||||
| 22739223 | 174 days ago | 0.06751434 ETH | ||||
| 22575802 | 178 days ago | 0.00126835 ETH | ||||
| 22575802 | 178 days ago | 0.00126835 ETH | ||||
| 22223390 | 186 days ago | 0.01208649 ETH | ||||
| 22223390 | 186 days ago | 0.01208649 ETH | ||||
| 22085441 | 189 days ago | 0.01490344 ETH | ||||
| 22085441 | 189 days ago | 0.01490344 ETH | ||||
| 21593692 | 200 days ago | 0.03804491 ETH | ||||
| 21593692 | 200 days ago | 0.03804491 ETH | ||||
| 21372223 | 205 days ago | 0.00057384 ETH | ||||
| 21372223 | 205 days ago | 0.00057384 ETH | ||||
| 19145543 | 257 days ago | 0.00151023 ETH | ||||
| 19145543 | 257 days ago | 0.00151023 ETH | ||||
| 19056240 | 259 days ago | 0.01130487 ETH | ||||
| 19056240 | 259 days ago | 0.01130487 ETH | ||||
| 17883964 | 286 days ago | 0.00760226 ETH | ||||
| 17167083 | 303 days ago | 0.00117049 ETH | ||||
| 17167083 | 303 days ago | 0.00117049 ETH |
Cross-Chain Transactions
Contract Source Code (Solidity Standard Json-Input format)
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {IPairFactory} from "./interfaces/IPairFactory.sol";
/**
*Submitted for verification at FtmScan.com on 2022-02-20
*/
// SPDX-License-Identifier: MIT
// ftm.guru's extension of Solidly's periphery (Router)
// https://github.com/andrecronje/solidly/blob/master/contracts/BaseV1-periphery.sol
// BaseV1Router02.sol : Supporting Fee-on-transfer Tokens
// https://github.com/ftm1337/solidly-with-FoT/blob/master/contracts/BaseV1-periphery.sol
pragma solidity =0.8.19;
interface IBaseV1Pair {
function transferFrom(address src, address dst, uint amount) external returns (bool);
function permit(address owner, address spender, uint value, uint deadline, uint8 v, bytes32 r, bytes32 s) external;
function swap(uint amount0Out, uint amount1Out, address to, bytes calldata data) external;
function burn(address to) external returns (uint amount0, uint amount1);
function mint(address to) external returns (uint liquidity);
function getReserves() external view returns (uint112 _reserve0, uint112 _reserve1, uint32 _blockTimestampLast);
function getAmountOut(uint, address) external view returns (uint);
}
interface erc20 {
function totalSupply() external view returns (uint256);
function transfer(address recipient, uint amount) external returns (bool);
function decimals() external view returns (uint8);
function symbol() external view returns (string memory);
function balanceOf(address) external view returns (uint);
function allowance(address, address) external view returns (uint);
function transferFrom(address sender, address recipient, uint amount) external returns (bool);
function approve(address spender, uint value) external returns (bool);
}
library Math {
function min(uint a, uint b) internal pure returns (uint) {
return a < b ? a : b;
}
function sqrt(uint y) internal pure returns (uint z) {
if (y > 3) {
z = y;
uint x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
function sub(uint x, uint y) internal pure returns (uint z) {
require((z = x - y) <= x, "Math: Sub-underflow");
}
}
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}
interface IBlast {
function configureGovernor(address _governor) external;
}
// Experimental Extension [ftm.guru/solidly/BaseV1Router02]
// contract BaseV1Router02 is BaseV1Router01
// with Support for Fee-on-Transfer Tokens
contract RouterV2 {
using Math for uint;
struct route {
address from;
address to;
bool stable;
}
address public immutable factory;
IWETH public immutable wETH;
uint internal constant MINIMUM_LIQUIDITY = 10 ** 3;
// swap event for the referral system
event Swap(address indexed sender, uint amount0In, address _tokenIn, address indexed to, bool stable);
modifier ensure(uint deadline) {
require(deadline >= block.timestamp, "BaseV1Router: EXPIRED");
_;
}
constructor(address _blastGovernor, address _factory, address _wETH) {
IBlast(0x4300000000000000000000000000000000000002).configureGovernor(_blastGovernor);
factory = _factory;
wETH = IWETH(_wETH);
}
receive() external payable {
assert(msg.sender == address(wETH)); // only accept ETH via fallback from the WETH contract
}
function sortTokens(address tokenA, address tokenB) public pure returns (address token0, address token1) {
require(tokenA != tokenB, "BaseV1Router: IDENTICAL_ADDRESSES");
(token0, token1) = tokenA < tokenB ? (tokenA, tokenB) : (tokenB, tokenA);
require(token0 != address(0), "BaseV1Router: ZERO_ADDRESS");
}
function pairFor(address tokenA, address tokenB, bool stable) public view returns (address pair) {
pair = IPairFactory(factory).getPair(tokenA, tokenB, stable);
}
// given some amount of an asset and pair reserves, returns an equivalent amount of the other asset
function quoteLiquidity(uint amountA, uint reserveA, uint reserveB) internal pure returns (uint amountB) {
require(amountA > 0, "BaseV1Router: INSUFFICIENT_AMOUNT");
require(reserveA > 0 && reserveB > 0, "BaseV1Router: INSUFFICIENT_LIQUIDITY");
amountB = (amountA * reserveB) / reserveA;
}
// fetches and sorts the reserves for a pair
function getReserves(address tokenA, address tokenB, bool stable) public view returns (uint reserveA, uint reserveB) {
(address token0, ) = sortTokens(tokenA, tokenB);
(uint reserve0, uint reserve1, ) = IBaseV1Pair(pairFor(tokenA, tokenB, stable)).getReserves();
(reserveA, reserveB) = tokenA == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
}
// performs chained getAmountOut calculations on any number of pairs
function getAmountOut(uint amountIn, address tokenIn, address tokenOut) public view returns (uint amount, bool stable) {
address pair = pairFor(tokenIn, tokenOut, true);
uint amountStable;
uint amountVolatile;
if (IPairFactory(factory).isPair(pair)) {
amountStable = IBaseV1Pair(pair).getAmountOut(amountIn, tokenIn);
}
pair = pairFor(tokenIn, tokenOut, false);
if (IPairFactory(factory).isPair(pair)) {
amountVolatile = IBaseV1Pair(pair).getAmountOut(amountIn, tokenIn);
}
return amountStable > amountVolatile ? (amountStable, true) : (amountVolatile, false);
}
// performs chained getAmountOut calculations on any number of pairs
function getAmountsOut(uint amountIn, route[] memory routes) public view returns (uint[] memory amounts) {
require(routes.length >= 1, "BaseV1Router: INVALID_PATH");
amounts = new uint[](routes.length + 1);
amounts[0] = amountIn;
for (uint i = 0; i < routes.length; i++) {
address pair = pairFor(routes[i].from, routes[i].to, routes[i].stable);
if (IPairFactory(factory).isPair(pair)) {
amounts[i + 1] = IBaseV1Pair(pair).getAmountOut(amounts[i], routes[i].from);
}
}
}
function isPair(address pair) public view returns (bool) {
return IPairFactory(factory).isPair(pair);
}
function quoteAddLiquidity(
address tokenA,
address tokenB,
bool stable,
uint amountADesired,
uint amountBDesired
) public view returns (uint amountA, uint amountB, uint liquidity) {
// create the pair if it doesn't exist yet
address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable);
(uint reserveA, uint reserveB) = (0, 0);
uint _totalSupply = 0;
if (_pair != address(0)) {
_totalSupply = erc20(_pair).totalSupply();
(reserveA, reserveB) = getReserves(tokenA, tokenB, stable);
}
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
liquidity = Math.sqrt(amountA * amountB) - MINIMUM_LIQUIDITY;
} else {
uint amountBOptimal = quoteLiquidity(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
(amountA, amountB) = (amountADesired, amountBOptimal);
liquidity = Math.min((amountA * _totalSupply) / reserveA, (amountB * _totalSupply) / reserveB);
} else {
uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA);
(amountA, amountB) = (amountAOptimal, amountBDesired);
liquidity = Math.min((amountA * _totalSupply) / reserveA, (amountB * _totalSupply) / reserveB);
}
}
}
function quoteRemoveLiquidity(
address tokenA,
address tokenB,
bool stable,
uint liquidity
) public view returns (uint amountA, uint amountB) {
// create the pair if it doesn't exist yet
address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable);
if (_pair == address(0)) {
return (0, 0);
}
(uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable);
uint _totalSupply = erc20(_pair).totalSupply();
amountA = (liquidity * reserveA) / _totalSupply; // using balances ensures pro-rata distribution
amountB = (liquidity * reserveB) / _totalSupply; // using balances ensures pro-rata distribution
}
function _addLiquidity(
address tokenA,
address tokenB,
bool stable,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin
) internal returns (uint amountA, uint amountB) {
require(amountADesired >= amountAMin);
require(amountBDesired >= amountBMin);
// create the pair if it doesn't exist yet
address _pair = IPairFactory(factory).getPair(tokenA, tokenB, stable);
if (_pair == address(0)) {
_pair = IPairFactory(factory).createPair(tokenA, tokenB, stable);
}
(uint reserveA, uint reserveB) = getReserves(tokenA, tokenB, stable);
if (reserveA == 0 && reserveB == 0) {
(amountA, amountB) = (amountADesired, amountBDesired);
} else {
uint amountBOptimal = quoteLiquidity(amountADesired, reserveA, reserveB);
if (amountBOptimal <= amountBDesired) {
require(amountBOptimal >= amountBMin, "BaseV1Router: INSUFFICIENT_B_AMOUNT");
(amountA, amountB) = (amountADesired, amountBOptimal);
} else {
uint amountAOptimal = quoteLiquidity(amountBDesired, reserveB, reserveA);
assert(amountAOptimal <= amountADesired);
require(amountAOptimal >= amountAMin, "BaseV1Router: INSUFFICIENT_A_AMOUNT");
(amountA, amountB) = (amountAOptimal, amountBDesired);
}
}
}
function addLiquidity(
address tokenA,
address tokenB,
bool stable,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) public ensure(deadline) returns (uint amountA, uint amountB, uint liquidity) {
(amountA, amountB) = _addLiquidity(tokenA, tokenB, stable, amountADesired, amountBDesired, amountAMin, amountBMin);
address pair = pairFor(tokenA, tokenB, stable);
_safeTransferFrom(tokenA, msg.sender, pair, amountA);
_safeTransferFrom(tokenB, msg.sender, pair, amountB);
liquidity = IBaseV1Pair(pair).mint(to);
}
function addLiquidityETH(
address token,
bool stable,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) public payable ensure(deadline) returns (uint amountToken, uint amountETH, uint liquidity) {
(amountToken, amountETH) = _addLiquidity(token, address(wETH), stable, amountTokenDesired, msg.value, amountTokenMin, amountETHMin);
address pair = pairFor(token, address(wETH), stable);
_safeTransferFrom(token, msg.sender, pair, amountToken);
wETH.deposit{value: amountETH}();
assert(wETH.transfer(pair, amountETH));
liquidity = IBaseV1Pair(pair).mint(to);
// refund dust ETH, if any
if (msg.value > amountETH) _safeTransferETH(msg.sender, msg.value - amountETH);
}
// **** REMOVE LIQUIDITY ****
function removeLiquidity(
address tokenA,
address tokenB,
bool stable,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) public ensure(deadline) returns (uint amountA, uint amountB) {
address pair = pairFor(tokenA, tokenB, stable);
require(IBaseV1Pair(pair).transferFrom(msg.sender, pair, liquidity)); // send liquidity to pair
(uint amount0, uint amount1) = IBaseV1Pair(pair).burn(to);
(address token0, ) = sortTokens(tokenA, tokenB);
(amountA, amountB) = tokenA == token0 ? (amount0, amount1) : (amount1, amount0);
require(amountA >= amountAMin, "BaseV1Router: INSUFFICIENT_A_AMOUNT");
require(amountB >= amountBMin, "BaseV1Router: INSUFFICIENT_B_AMOUNT");
}
function removeLiquidityETH(
address token,
bool stable,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) public ensure(deadline) returns (uint amountToken, uint amountETH) {
(amountToken, amountETH) = removeLiquidity(
token,
address(wETH),
stable,
liquidity,
amountTokenMin,
amountETHMin,
address(this),
deadline
);
_safeTransfer(token, to, amountToken);
wETH.withdraw(amountETH);
_safeTransferETH(to, amountETH);
}
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
bool stable,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) public returns (uint amountA, uint amountB) {
address pair = pairFor(tokenA, tokenB, stable);
{
uint value = approveMax ? type(uint).max : liquidity;
_trustlessPermit(pair, msg.sender, address(this), value, deadline, v, r, s);
}
(amountA, amountB) = removeLiquidity(tokenA, tokenB, stable, liquidity, amountAMin, amountBMin, to, deadline);
}
function removeLiquidityETHWithPermit(
address token,
bool stable,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) public returns (uint amountToken, uint amountETH) {
address pair = pairFor(token, address(wETH), stable);
uint value = approveMax ? type(uint).max : liquidity;
_trustlessPermit(pair, msg.sender, address(this), value, deadline, v, r, s);
(amountToken, amountETH) = removeLiquidityETH(token, stable, liquidity, amountTokenMin, amountETHMin, to, deadline);
}
// **** SWAP ****
// requires the initial amount to have already been sent to the first pair
function _swap(uint[] memory amounts, route[] memory routes, address _to) internal virtual {
for (uint i = 0; i < routes.length; i++) {
(address token0, ) = sortTokens(routes[i].from, routes[i].to);
uint amountOut = amounts[i + 1];
(uint amount0Out, uint amount1Out) = routes[i].from == token0 ? (uint(0), amountOut) : (amountOut, uint(0));
address to = i < routes.length - 1 ? pairFor(routes[i + 1].from, routes[i + 1].to, routes[i + 1].stable) : _to;
IBaseV1Pair(pairFor(routes[i].from, routes[i].to, routes[i].stable)).swap(amount0Out, amount1Out, to, new bytes(0));
emit Swap(msg.sender, amounts[i], routes[i].from, _to, routes[i].stable);
}
}
function swapExactTokensForTokensSimple(
uint amountIn,
uint amountOutMin,
address tokenFrom,
address tokenTo,
bool stable,
address to,
uint deadline
) public ensure(deadline) returns (uint[] memory amounts) {
route[] memory routes = new route[](1);
routes[0].from = tokenFrom;
routes[0].to = tokenTo;
routes[0].stable = stable;
amounts = getAmountsOut(amountIn, routes);
require(amounts[amounts.length - 1] >= amountOutMin, "BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT");
_safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]);
_swap(amounts, routes, to);
}
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
route[] memory routes,
address to,
uint deadline
) public ensure(deadline) returns (uint[] memory amounts) {
amounts = getAmountsOut(amountIn, routes);
require(amounts[amounts.length - 1] >= amountOutMin, "BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT");
_safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]);
_swap(amounts, routes, to);
}
function swapExactETHForTokens(
uint amountOutMin,
route[] memory routes,
address to,
uint deadline
) public payable ensure(deadline) returns (uint[] memory amounts) {
require(routes[0].from == address(wETH), "BaseV1Router: INVALID_PATH");
amounts = getAmountsOut(msg.value, routes);
require(amounts[amounts.length - 1] >= amountOutMin, "BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT");
wETH.deposit{value: amounts[0]}();
assert(wETH.transfer(pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]));
_swap(amounts, routes, to);
}
function swapExactTokensForETH(
uint amountIn,
uint amountOutMin,
route[] memory routes,
address to,
uint deadline
) public ensure(deadline) returns (uint[] memory amounts) {
require(routes[routes.length - 1].to == address(wETH), "BaseV1Router: INVALID_PATH");
amounts = getAmountsOut(amountIn, routes);
require(amounts[amounts.length - 1] >= amountOutMin, "BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT");
_safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]);
_swap(amounts, routes, address(this));
wETH.withdraw(amounts[amounts.length - 1]);
_safeTransferETH(to, amounts[amounts.length - 1]);
}
function UNSAFE_swapExactTokensForTokens(
uint[] memory amounts,
route[] memory routes,
address to,
uint deadline
) public ensure(deadline) returns (uint[] memory) {
_safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amounts[0]);
_swap(amounts, routes, to);
return amounts;
}
function _safeTransferETH(address to, uint value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, "TransferHelper: ETH_TRANSFER_FAILED");
}
function _safeTransfer(address token, address to, uint256 value) internal {
require(token.code.length > 0);
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(erc20.transfer.selector, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))));
}
function _safeTransferFrom(address token, address from, address to, uint256 value) internal {
require(token.code.length > 0);
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(erc20.transferFrom.selector, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))));
}
// Experimental Extension [ETH.guru/solidly/BaseV1Router02]
// **** REMOVE LIQUIDITY (supporting fee-on-transfer tokens)****
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
bool stable,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) public ensure(deadline) returns (uint amountToken, uint amountETH) {
(amountToken, amountETH) = removeLiquidity(
token,
address(wETH),
stable,
liquidity,
amountTokenMin,
amountETHMin,
address(this),
deadline
);
_safeTransfer(token, to, erc20(token).balanceOf(address(this)));
wETH.withdraw(amountETH);
_safeTransferETH(to, amountETH);
}
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
bool stable,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax,
uint8 v,
bytes32 r,
bytes32 s
) public returns (uint amountToken, uint amountETH) {
address pair = pairFor(token, address(wETH), stable);
uint value = approveMax ? type(uint).max : liquidity;
_trustlessPermit(pair, msg.sender, address(this), value, deadline, v, r, s);
(amountToken, amountETH) = removeLiquidityETHSupportingFeeOnTransferTokens(
token,
stable,
liquidity,
amountTokenMin,
amountETHMin,
to,
deadline
);
}
// **** SWAP (supporting fee-on-transfer tokens) ****
// requires the initial amount to have already been sent to the first pair
function _swapSupportingFeeOnTransferTokens(route[] memory routes, address _to) internal virtual {
for (uint i; i < routes.length; i++) {
(address input, address output) = (routes[i].from, routes[i].to);
(address token0, ) = sortTokens(input, output);
IBaseV1Pair pair = IBaseV1Pair(pairFor(routes[i].from, routes[i].to, routes[i].stable));
uint amountInput;
uint amountOutput;
{
// scope to avoid stack too deep errors
(uint reserve0, uint reserve1, ) = pair.getReserves();
(uint reserveInput, ) = input == token0 ? (reserve0, reserve1) : (reserve1, reserve0);
amountInput = erc20(input).balanceOf(address(pair)).sub(reserveInput);
(amountOutput, ) = getAmountOut(amountInput, input, output);
}
(uint amount0Out, uint amount1Out) = input == token0 ? (uint(0), amountOutput) : (amountOutput, uint(0));
address to = i < routes.length - 1 ? pairFor(routes[i + 1].from, routes[i + 1].to, routes[i + 1].stable) : _to;
pair.swap(amount0Out, amount1Out, to, new bytes(0));
bool _stable = routes[i].stable;
emit Swap(msg.sender, amountInput, input, _to, _stable);
}
}
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
route[] memory routes,
address to,
uint deadline
) public ensure(deadline) {
_safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amountIn);
uint balanceBefore = erc20(routes[routes.length - 1].to).balanceOf(to);
_swapSupportingFeeOnTransferTokens(routes, to);
require(
erc20(routes[routes.length - 1].to).balanceOf(to).sub(balanceBefore) >= amountOutMin,
"BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
route[] memory routes,
address to,
uint deadline
) public payable ensure(deadline) {
require(routes[0].from == address(wETH), "BaseV1Router: INVALID_PATH");
uint amountIn = msg.value;
wETH.deposit{value: amountIn}();
assert(wETH.transfer(pairFor(routes[0].from, routes[0].to, routes[0].stable), amountIn));
uint balanceBefore = erc20(routes[routes.length - 1].to).balanceOf(to);
_swapSupportingFeeOnTransferTokens(routes, to);
require(
erc20(routes[routes.length - 1].to).balanceOf(to).sub(balanceBefore) >= amountOutMin,
"BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT"
);
}
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
route[] memory routes,
address to,
uint deadline
) public ensure(deadline) {
require(routes[routes.length - 1].to == address(wETH), "BaseV1Router: INVALID_PATH");
_safeTransferFrom(routes[0].from, msg.sender, pairFor(routes[0].from, routes[0].to, routes[0].stable), amountIn);
_swapSupportingFeeOnTransferTokens(routes, address(this));
uint amountOut = erc20(address(wETH)).balanceOf(address(this));
require(amountOut >= amountOutMin, "BaseV1Router: INSUFFICIENT_OUTPUT_AMOUNT");
wETH.withdraw(amountOut);
_safeTransferETH(to, amountOut);
}
function _trustlessPermit(
address token,
address owner,
address spender,
uint256 value,
uint256 deadline,
uint8 v,
bytes32 r,
bytes32 s
) internal {
// Try permit() before allowance check to advance nonce if possible
try IBaseV1Pair(token).permit(owner, spender, value, deadline, v, r, s) {
return;
} catch {
// Permit potentially got frontran. Continue anyways if allowance is sufficient.
if (erc20(token).allowance(owner, spender) >= value) {
return;
}
}
revert("Permit failure");
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.0) (proxy/Clones.sol)
pragma solidity ^0.8.0;
/**
* @dev https://eips.ethereum.org/EIPS/eip-1167[EIP 1167] is a standard for
* deploying minimal proxy contracts, also known as "clones".
*
* > To simply and cheaply clone contract functionality in an immutable way, this standard specifies
* > a minimal bytecode implementation that delegates all calls to a known, fixed address.
*
* The library includes functions to deploy a proxy using either `create` (traditional deployment) or `create2`
* (salted deterministic deployment). It also includes functions to predict the addresses of clones deployed using the
* deterministic method.
*
* _Available since v3.4._
*/
library Clones {
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
*
* This function uses the create opcode, which should never revert.
*/
function clone(address implementation) internal returns (address instance) {
/// @solidity memory-safe-assembly
assembly {
// Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
// of the `implementation` address with the bytecode before the address.
mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
// Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
instance := create(0, 0x09, 0x37)
}
require(instance != address(0), "ERC1167: create failed");
}
/**
* @dev Deploys and returns the address of a clone that mimics the behaviour of `implementation`.
*
* This function uses the create2 opcode and a `salt` to deterministically deploy
* the clone. Using the same `implementation` and `salt` multiple time will revert, since
* the clones cannot be deployed twice at the same address.
*/
function cloneDeterministic(address implementation, bytes32 salt) internal returns (address instance) {
/// @solidity memory-safe-assembly
assembly {
// Cleans the upper 96 bits of the `implementation` word, then packs the first 3 bytes
// of the `implementation` address with the bytecode before the address.
mstore(0x00, or(shr(0xe8, shl(0x60, implementation)), 0x3d602d80600a3d3981f3363d3d373d3d3d363d73000000))
// Packs the remaining 17 bytes of `implementation` with the bytecode after the address.
mstore(0x20, or(shl(0x78, implementation), 0x5af43d82803e903d91602b57fd5bf3))
instance := create2(0, 0x09, 0x37, salt)
}
require(instance != address(0), "ERC1167: create2 failed");
}
/**
* @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
*/
function predictDeterministicAddress(
address implementation,
bytes32 salt,
address deployer
) internal pure returns (address predicted) {
/// @solidity memory-safe-assembly
assembly {
let ptr := mload(0x40)
mstore(add(ptr, 0x38), deployer)
mstore(add(ptr, 0x24), 0x5af43d82803e903d91602b57fd5bf3ff)
mstore(add(ptr, 0x14), implementation)
mstore(ptr, 0x3d602d80600a3d3981f3363d3d373d3d3d363d73)
mstore(add(ptr, 0x58), salt)
mstore(add(ptr, 0x78), keccak256(add(ptr, 0x0c), 0x37))
predicted := keccak256(add(ptr, 0x43), 0x55)
}
}
/**
* @dev Computes the address of a clone deployed using {Clones-cloneDeterministic}.
*/
function predictDeterministicAddress(
address implementation,
bytes32 salt
) internal view returns (address predicted) {
return predictDeterministicAddress(implementation, salt, address(this));
}
}// SPDX-License-Identifier: MIT
pragma solidity >=0.8.0;
interface IPairFactory {
event PairCreated(address indexed token0, address indexed token1, bool stable, address pair, uint);
event SetPaused(bool state);
event SetCommunityVaultFactory(address indexed communityVaultFactory);
event SetIsPublicPoolCreationMode(bool mode);
event SetProtocolFee(uint256 fee);
event SetCustomProtocolFee(address indexed pair, uint256 fee);
event SetCustomFee(address indexed pair, uint256 fee);
event SetFee(bool stable, uint256 fee);
/**
* @dev Emitted when the rebasing tokens governor address is set.
*
* @param oldRebasingTokensGovernor The previous address of the rebasing tokens governor.
* @param newRebasingTokensGovernor The new address of the rebasing tokens governor.
*/
event SetRebasingTokensGovernor(address indexed oldRebasingTokensGovernor, address indexed newRebasingTokensGovernor);
error IncorrcectFee();
error IncorrectPair();
error IdenticalAddress();
error PairExist();
function implementation() external view returns (address);
function PAIRS_ADMINISTRATOR_ROLE() external view returns (bytes32);
function FEES_MANAGER_ROLE() external view returns (bytes32);
function PAIRS_CREATOR_ROLE() external view returns (bytes32);
function hasRole(bytes32 role, address user) external view returns (bool);
function allPairsLength() external view returns (uint);
function isPair(address pair) external view returns (bool);
function allPairs(uint index) external view returns (address);
function getPair(address tokenA, address token, bool stable) external view returns (address);
function createPair(address tokenA, address tokenB, bool stable) external returns (address pair);
function pairs() external view returns (address[] memory);
function getFee(address pair_, bool stable_) external view returns (uint256);
function getHookTarget(address pair_) external view returns (address);
function getProtocolFee(address pair_) external view returns (uint256);
function isPaused() external view returns (bool);
function isPublicPoolCreationMode() external view returns (bool);
}{
"evmVersion": "paris",
"viaIR": true,
"optimizer": {
"enabled": true,
"runs": 2000
},
"metadata": {
"bytecodeHash": "none"
},
"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":"_blastGovernor","type":"address"},{"internalType":"address","name":"_factory","type":"address"},{"internalType":"address","name":"_wETH","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount0In","type":"uint256"},{"indexed":false,"internalType":"address","name":"_tokenIn","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"bool","name":"stable","type":"bool"}],"name":"Swap","type":"event"},{"inputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"UNSAFE_swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountTokenDesired","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"addLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"address","name":"tokenIn","type":"address"},{"internalType":"address","name":"tokenOut","type":"address"}],"name":"getAmountOut","outputs":[{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bool","name":"stable","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"}],"name":"getAmountsOut","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"getReserves","outputs":[{"internalType":"uint256","name":"reserveA","type":"uint256"},{"internalType":"uint256","name":"reserveB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"pair","type":"address"}],"name":"isPair","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"name":"pairFor","outputs":[{"internalType":"address","name":"pair","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"amountADesired","type":"uint256"},{"internalType":"uint256","name":"amountBDesired","type":"uint256"}],"name":"quoteAddLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"}],"name":"quoteRemoveLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidity","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETH","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"removeLiquidityETHSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermit","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"token","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountTokenMin","type":"uint256"},{"internalType":"uint256","name":"amountETHMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityETHWithPermitSupportingFeeOnTransferTokens","outputs":[{"internalType":"uint256","name":"amountToken","type":"uint256"},{"internalType":"uint256","name":"amountETH","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"uint256","name":"liquidity","type":"uint256"},{"internalType":"uint256","name":"amountAMin","type":"uint256"},{"internalType":"uint256","name":"amountBMin","type":"uint256"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"},{"internalType":"bool","name":"approveMax","type":"bool"},{"internalType":"uint8","name":"v","type":"uint8"},{"internalType":"bytes32","name":"r","type":"bytes32"},{"internalType":"bytes32","name":"s","type":"bytes32"}],"name":"removeLiquidityWithPermit","outputs":[{"internalType":"uint256","name":"amountA","type":"uint256"},{"internalType":"uint256","name":"amountB","type":"uint256"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenA","type":"address"},{"internalType":"address","name":"tokenB","type":"address"}],"name":"sortTokens","outputs":[{"internalType":"address","name":"token0","type":"address"},{"internalType":"address","name":"token1","type":"address"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactETHForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETH","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForETHSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokens","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"internalType":"address","name":"tokenFrom","type":"address"},{"internalType":"address","name":"tokenTo","type":"address"},{"internalType":"bool","name":"stable","type":"bool"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSimple","outputs":[{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amountIn","type":"uint256"},{"internalType":"uint256","name":"amountOutMin","type":"uint256"},{"components":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"bool","name":"stable","type":"bool"}],"internalType":"struct RouterV2.route[]","name":"routes","type":"tuple[]"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"deadline","type":"uint256"}],"name":"swapExactTokensForTokensSupportingFeeOnTransferTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"wETH","outputs":[{"internalType":"contract IWETH","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
60c0346200019657601f62003a2a38819003918201601f1916830192916001600160401b03918285118486101762000175578160609285926040978852833981010312620001965762000052826200019b565b916200006e8462000066602084016200019b565b92016200019b565b9173430000000000000000000000000000000000000290813b1562000196578551631d70c8d360e31b81526001600160a01b039586166004820152916000908390602490829084905af180156200018b5762000164575b50506080521660a052516138799081620001b1823960805181818161057d015281816108ad01528181610d2901528181612246015281816123d8015281816127b101528181612af40152612d64015260a051818181602a015281816101b4015281816105180152818161060e015281816106b3015281816109070152818161106e015281816111fd015281816115e8015281816119a20152611a920152f35b8111620001755784523880620000c5565b634e487b7160e01b600052604160045260246000fd5b86513d6000823e3d90fd5b600080fd5b51906001600160a01b0382168203620001965756fe604060808152600480361015610053575b5050361561001d57600080fd5b6100516001600160a01b037f00000000000000000000000000000000000000000000000000000000000000001633146120ed565b005b6000803560e01c80630dede6c414611d0f57806313dcfc5914611bd257806318a1308614611a375780634386e63c146119fe578063448725b4146119755780634c1ee03e1461192e578063544caa56146118df5780635a47ddc3146117a85780635e1e63251461176c5780635e60dab51461173757806367ffb66a146115ae5780636cc1ae131461154c5780637301e3c81461145657806376c72751146111c35780637af728c81461100f5780639881fcb414610fc257806398a0fb3c14610ca3578063a32b1fcd14610acf578063b7e0d4c0146108d1578063c45a01551461088d578063d7b0e0a514610673578063e2d9d4dc146105e1578063e5e31b131461053c578063f2428621146104f8578063f41766d8146104135763fe411f141461017d5750610010565b3461032d5761018b3661209f565b97929795919395949094421115936101a285612bf2565b6101e16001600160a01b03926101da847f00000000000000000000000000000000000000000000000000000000000000001697612bf2565b8685612206565b8a516323b872dd60e01b8152338682019081526001600160a01b038316602082810191909152604082019a909a529184169189908290819060600103818d865af1908115610409578a916103dc575b50156103d857908a89969594939260248251809c819363226bf2d160e21b8352308a8401525af19889156103ce578690879a610395575b50610272868561210a565b5084841693168303610380579161029d8992610295602496959d8e5b1015612c3d565b8b1015612cae565b8b51938480926370a0823160e01b825230888301525afa908115610376578690869261033e575b6102ce935061328b565b813b1561033a578560248492838b519586948593632e1a7d4d60e01b85528401525af180156103305790859291610315575b505061030b916131fa565b8351928352820152f35b81925061032190611e7f565b61032d57808491610300565b80fd5b87513d84823e3d90fd5b8280fd5b9150508682813d831161036f575b6103568183611eaf565b8101031261036a57856102ce9251916102c4565b600080fd5b503d61034c565b8a513d87823e3d90fd5b989161029d8992610295602496959d8e61028e565b809a508c8092503d83116103c7575b6103ae8183611eaf565b810103126103c3578789519901519838610267565b8580fd5b503d6103a4565b8b513d88823e3d90fd5b8880fd5b6103fc9150893d8b11610402575b6103f48183611eaf565b8101906123b2565b38610230565b503d6103ea565b8c513d8c823e3d90fd5b5082346104f45761043861043d61042936611f91565b95829593949196421115612bf2565b61274d565b9485519060001982019182116104e1576104dd87876104d3888861046d896104658a88612714565b511015612ec9565b6104cd6001600160a01b036104bb81610485856126f1565b5151169180610493866126f1565b5151169060206104a2876126f1565b51015116886104b0876126f1565b510151151591612206565b6104c4886126f1565b51913390613326565b84612f9f565b5191829182611e12565b0390f35b80601189634e487b7160e01b6024945252fd5b5080fd5b5082346104f457816003193601126104f457602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b50913461033a57602060031936011261033a576020610559611d97565b92602483518095819363e5e31b1360e01b83526001600160a01b03809216908301527f0000000000000000000000000000000000000000000000000000000000000000165afa9182156105d757602093926105b8575b50519015158152f35b6105d0919250833d8111610402576103f48183611eaf565b90386105af565b81513d85823e3d90fd5b5090346104f45781906105f336611fdf565b97809b9885928b9598979c999f946001600160a01b03998b8b7f0000000000000000000000000000000000000000000000000000000000000000169e8f61063992612206565b6101e1996101da985061065c9690921561066d5750600019905b309033906136ed565b42111561066881612bf2565b612bf2565b90610653565b5091903461033a5760206106d9936106e061071c936106913661209f565b9a929a999194979099421115976106a789612bf2565b6001600160a01b039d8e7f00000000000000000000000000000000000000000000000000000000000000001699612bf2565b8887612206565b8b516323b872dd60e01b8152338882019081526001600160a01b03831660208201526040810195909552908d1693909283918291606090910190565b03818a865af1908115610883578791610865575b50156103c357888691602482518094819363226bf2d160e21b8352308a8401525af1998a1561085b578691879b610821575b509261079a999a928892856107a79661077b8a8661210a565b50169084161460001461081257906107a2919b8c959b5b861015612c3d565b8a1015612cae565b61328b565b813b1561033a578460248492838a519586948593632e1a7d4d60e01b85528401525af1801561080857908492916107f0575b50506107e4916131fa565b82519182526020820152f35b8192506107fc90611e7f565b61032d578083916107d9565b86513d84823e3d90fd5b93906107a2919b8c959b610792565b8a80929c508193503d8311610854575b61083b8183611eaf565b810103126103c3578051602090910151996107a7610762565b503d610831565b89513d88823e3d90fd5b61087d915060203d8111610402576103f48183611eaf565b38610730565b8a513d89823e3d90fd5b5082346104f457816003193601126104f457602090516001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000168152f35b61093c6109458484876109326108fb6108e93661209f565b9b93949b979296909597421115612bf2565b6001600160a01b0395867f0000000000000000000000000000000000000000000000000000000000000000169434908d878b612d1f565b9a819a8488612206565b80963390613326565b803b156103c3578451630d0e30db60e41b8152868189818d865af18015610aaa57859288928a92610ab4575b506109ab908c895194858094819363a9059cbb60e01b835260209c8d988401602090939291936001600160a01b0360408201951681520152565b03925af1908115610aaa57846024936109d0889796948b948591610a8d575b506120ed565b88519a8b9687957f6a6278420000000000000000000000000000000000000000000000000000000087521690850152165af1928315610a825792610a50575b506104dd9250843411610a38575b51938493846040919493926060820195825260208201520152565b610a4b610a4586346129ad565b336131fa565b610a1d565b90915082813d8311610a7b575b610a678183611eaf565b8101031261036a576104dd91519085610a0f565b503d610a5d565b8251903d90823e3d90fd5b610aa49150893d8b11610402576103f48183611eaf565b8f6109ca565b86513d89823e3d90fd5b909350610ac19150611e7f565b6103c357858785928c610971565b5090346104f4576101806003193601126104f457610aeb611d97565b610af3611dad565b92610afc611e03565b9060643591610b09611dc3565b90610104359060e435821515830361036a57610124359060ff8216820361036a57610b5f610b6792610b6e95610b40868e8d612206565b9015610c9c57600019915b8461016435936101443593309033906136ed565b421115612bf2565b8786612206565b87516323b872dd60e01b8152338782019081526001600160a01b0392831660208281018290526040830197909752929590829081906060015b038187865af1908115610c92578491610c74575b501561033a57602488928486938551998a95869463226bf2d160e21b865216908401525af1948515610c685781948296610c2e575b5090610bfd83928561210a565b50905016911614600014610c2957905b610c1b608435831015612c3d565b6107e460a435821015612cae565b610c0d565b87809297508196503d8311610c61575b610c488183611eaf565b8101031261032d57835160209094015194610bfd610bf0565b503d610c3e565b508551903d90823e3d90fd5b610c8c915060203d8111610402576103f48183611eaf565b38610bbb565b89513d86823e3d90fd5b8991610b4b565b5082903461032d5760a060031936011261032d57610cbf611d97565b91610cc8611dad565b9184610cd2611e03565b60643594608435968551926306801cc360e41b845283610d18828585602099850191939260409160608401956001600160a01b0380921685521660208401521515910152565b039285856001600160a01b039581877f0000000000000000000000000000000000000000000000000000000000000000165afa948515610fb857908b92918896610f89575b508796889589971680610ef1575b505050505050821580610ee9575b15610e6757505050610d8b848461297a565b90806003831115610e58575081600181811c818101809111610e455791905b848310610e0e575050505b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc188201918211610dfb575090519182526020820192909252604081019190915260609150f35b80601187634e487b7160e01b6024945252fd5b9193509083610e1d818461298d565b908101809111610e3057811c9190610daa565b601189634e487b7160e01b6000525260246000fd5b60248460118b634e487b7160e01b835252fd5b9115610db55760019150610db5565b909592919650610e788188876129ba565b92808411610ec05750610ea790610e9c6104dd9697610ea1869a610e9c838c61297a565b61298d565b9561297a565b905080821015610eb957505b90610a1d565b9050610eb3565b92506104dd945080610e9c610ed989610ea794876129ba565b97610ea1869a610e9c838c61297a565b508015610d79565b91949750929550829194508851958680927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa908115610f7f578691610f4f575b50610f419350936122f2565b919091888881808080610d6b565b905083813d8311610f78575b610f658183611eaf565b8101031261036a57610f4192518a610f35565b503d610f5b565b87513d88823e3d90fd5b610faa919650873d8911610fb1575b610fa28183611eaf565b8101906121e7565b948c610d5d565b503d610f98565b88513d89823e3d90fd5b5082903461032d578160031936011261032d576024359067ffffffffffffffff821161032d57506104dd92610ffd6110049236908301611eea565b903561274d565b905191829182611e12565b5082346104f45761102f61102236611f91565b9593949095421115612bf2565b80519360001985019485116111b05761106394926110dc8895936110d58b946001600160a01b03809860209b8c9186612714565b5101511697611096817f000000000000000000000000000000000000000000000000000000000000000016809a146126a6565b6110cd816110a3866126f1565b51511691806110b1876126f1565b515116908d6110bf886126f1565b510151168a6104b0886126f1565b903390613326565b30906133d1565b82516370a0823160e01b815230838201528681602481885afa9687156111a6578697611170575b505061111190861015612ec9565b823b1561116c5784602485928385519687948593632e1a7d4d60e01b85528401525af1908115611163575061114f575b505061114c916131fa565b80f35b61115890611e7f565b61033a578284611141565b513d84823e3d90fd5b8380fd5b809297508196503d831161119f575b6111898183611eaf565b8101031261036a57611111879451959089611103565b503d61117f565b84513d88823e3d90fd5b60248760118a634e487b7160e01b835252fd5b50916111e0906111d236612054565b959294909195421115612bf2565b6001600160a01b0391826111f3876126f1565b51511691611225847f0000000000000000000000000000000000000000000000000000000000000000168094146126a6565b823b1561145257878551630d0e30db60e41b81528181858134895af180156103305761143e575b50611281936112b38661125e8b6126f1565b5151169160209687938c8b6104b08c88611277856126f1565b51015116926126f1565b895194858094819363a9059cbb60e01b835234908b8401602090939291936001600160a01b0360408201951681520152565b03925af190811561143457906112cf918a9161141757506120ed565b8651936000199485810190811161140457846112ec83928b612714565b51015116948651986370a0823160e01b93848b52868b6024818785169b8c8b8301525afa9a8b156113fa578c9b6113c9575b5061132990826133d1565b80519182019182116113b657918561134681969593602495612714565b510151168751968794859384528301525afa9283156113ad5750859261137d575b505061114c9261137691613378565b1015612ec9565b90809250813d83116113a6575b6113948183611eaf565b8101031261036a575182611376611367565b503d61138a565b513d87823e3d90fd5b60248b601187634e487b7160e01b835252fd5b909a508681813d83116113f3575b6113e18183611eaf565b8101031261036a57519961132961131e565b503d6113d7565b89513d8e823e3d90fd5b60248a601186634e487b7160e01b835252fd5b61142e9150853d8711610402576103f48183611eaf565b386109ca565b86513d8b823e3d90fd5b6114488291611e7f565b61032d573861124c565b8780fd5b50913461033a57608060031936011261033a5781359167ffffffffffffffff808411611548573660238501121561154857838201359461149586611ed2565b946114a285519687611eaf565b86865260209660248888019160051b8301019136831161116c57906024899201905b838210611539575050505060243591821161032d5750936114ee6104d3926104dd96369101611eea565b6104cd6114f9611dd9565b92611508426064351015612bf2565b6104bb6001600160a01b03918261151e866126f1565b515116928061152c876126f1565b515116916104a2876126f1565b813581529082019082016114c4565b8480fd5b50913461033a576115709061156036611f91565b9691969590939295421115612bf2565b6001600160a01b03926112cf84611586896126f1565b51511693856115948a6126f1565b515116946110cd6020968b8a6104b08b8b611277856126f1565b50916115cb6115bc36612054565b95919295939093421115612bf2565b6001600160a01b0390816115de846126f1565b51511691611610817f0000000000000000000000000000000000000000000000000000000000000000168094146126a6565b61161a843461274d565b96875160001981019081116114045790610465611637928a612714565b87611641886126f1565b51843b156104f457818491895192838092630d0e30db60e41b8252895af1801561172d57611715575b5050906116d99261169d83602094611681886126f1565b515116908561168f896126f1565b51015116896104b0896126f1565b896116a78a6126f1565b519389519687958694859363a9059cbb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03925af19081156111a6576104d39392916104cd916104dd98916116fd57506120ed565b61142e915060203d8111610402576103f48183611eaf565b61172190939293611e7f565b6114525790873861166a565b88513d84823e3d90fd5b83823461032d57606060031936011261032d57506107e4611756611d97565b61175e611dad565b611766611e03565b916122f2565b503461032d57606060031936011261032d575061179a9061178b611dad565b611793611dd9565b91356123ca565b825191825215156020820152f35b5082903461032d5761012060031936011261032d576117c5611d97565b906117ce611dad565b926117d7611e03565b9260e4356001600160a01b0380821680920361036a5761184197856024926118486118366020976118288c8e61181242610104351015612bf2565b60c4359160a43591608435916064359187612d1f565b9e8f93829f929e8385612206565b9d8e80943390613326565b3390613326565b865198899586947f6a627842000000000000000000000000000000000000000000000000000000008652850152165af19182156118d4579161189f575b519283526020830193909352506040810191909152606090f35b90506020823d82116118cc575b816118b960209383611eaf565b8101031261036a576104dd915190611885565b3d91506118ac565b9051903d90823e3d90fd5b5082346104f457806003193601126104f4576104dd9061190e611900611d97565b611908611dad565b9061210a565b91516001600160a01b039182168152911660208201529081906040820190565b5082346104f45760606003193601126104f4576020906001600160a01b0361196d611957611d97565b61195f611dad565b611967611e03565b91612206565b915191168152f35b5091903461033a5761198636611fdf565b9297939c988d6001600160a01b039c989c9b97969b9392939e8f7f0000000000000000000000000000000000000000000000000000000000000000169a6119ce848d8c612206565b90600014966020966106e0966106d99561065c9461071c9b6119f75760001990309033906136ed565b8c90610653565b83823461032d57608060031936011261032d57506107e4611a1d611d97565b611a25611dad565b611a2d611e03565b9060643592612ab7565b5082346104f457611a5b611a4a36611f91565b969296949094939193421115612bf2565b82519260001993848101908111610e4557611aba82611a879260206001600160a01b0394859284612714565b5101511694610438847f0000000000000000000000000000000000000000000000000000000000000000168097146126a6565b978851868101908111611bbf5791611add611b1e92610465611b2696958d612714565b611b1581611aea856126f1565b5151169180611af8866126f1565b515116906020611b07876126f1565b510151168b6104b0876126f1565b6104c48b6126f1565b309088612f9f565b8551838101908111611bac57611b3c9087612714565b51813b1561033a5782916024839288519485938492632e1a7d4d60e01b84528d8401525af18015611ba257611b93575b508451918201918211610dfb576104dd85856104d386611b8c8785612714565b51906131fa565b611b9c90611e7f565b86611b6c565b85513d84823e3d90fd5b60248360118a634e487b7160e01b835252fd5b60248660118d634e487b7160e01b835252fd5b50913461033a5760e060031936011261033a57611bed611dd9565b606435926001600160a01b03908185168095036103c35760843591821515809303611d0b5760a43590808216820361145257611c2d4260c4351015612bf2565b85519386850185811067ffffffffffffffff821117611cf857875260018552885b602080821015611c7f57885160209291611c6782611e4d565b8c82528c818301528c8b830152828901015201611c4e565b50509194979690929783611c92866126f1565b51911690526020611ca2856126f1565b51015284611caf846126f1565b510152611cbd82873561274d565b9485519060001982019182116104e1576104dd87876104d388886104cd89611ceb6024356104658c8a612714565b6104bb81610485856126f1565b60248a604187634e487b7160e01b835252fd5b8680fd5b5090346104f4576101006003193601126104f457611d2b611d97565b611d33611dad565b92611d3c611e03565b90611d57611d48611dc3565b926101da4260e4351015612bf2565b86516323b872dd60e01b8152338682019081526001600160a01b039283166020828101829052606435604084015293959390929182908190606001610ba7565b600435906001600160a01b038216820361036a57565b602435906001600160a01b038216820361036a57565b60c435906001600160a01b038216820361036a57565b604435906001600160a01b038216820361036a57565b35906001600160a01b038216820361036a57565b60443590811515820361036a57565b6020908160408183019282815285518094520193019160005b828110611e39575050505090565b835185529381019392810192600101611e2b565b6060810190811067ffffffffffffffff821117611e6957604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111611e6957604052565b6020810190811067ffffffffffffffff821117611e6957604052565b90601f601f19910116810190811067ffffffffffffffff821117611e6957604052565b67ffffffffffffffff8111611e695760051b60200190565b81601f8201121561036a57803590611f0182611ed2565b92604090611f1182519586611eaf565b838552602091828601918360608097028601019481861161036a578401925b858410611f41575050505050505090565b868483031261036a57825190611f5682611e4d565b611f5f85611def565b8252611f6c868601611def565b868301528385013590811515820361036a57828792868b950152815201930192611f30565b60a060031982011261036a5760043591602435916044359067ffffffffffffffff821161036a57611fc491600401611eea565b906064356001600160a01b038116810361036a579060843590565b60031961016091011261036a576001600160a01b0390600435828116810361036a5791602435801515810361036a579160443591606435916084359160a435908116810361036a579060c4359060e435801515810361036a57906101043560ff8116810361036a579061012435906101443590565b90608060031983011261036a57600435916024359067ffffffffffffffff821161036a5761208491600401611eea565b906044356001600160a01b038116810361036a579060643590565b60031960e091011261036a576001600160a01b0390600435828116810361036a5791602435801515810361036a579160443591606435916084359160a435908116810361036a579060c43590565b156120f457565b634e487b7160e01b600052600160045260246000fd5b90916001600160a01b039182841683821681811461217d57101561217857925b9183161561213457565b606460405162461bcd60e51b815260206004820152601a60248201527f426173655631526f757465723a205a45524f5f414444524553530000000000006044820152fd5b61212a565b608460405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a204944454e544943414c5f414444524553534560448201527f53000000000000000000000000000000000000000000000000000000000000006064820152fd5b9081602091031261036a57516001600160a01b038116810361036a5790565b6040516306801cc360e41b81526001600160a01b039182166004820152911660248201529015156044820152602081806064810103816001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000165afa9081156122955760009161227a575090565b612292915060203d8111610fb157610fa28183611eaf565b90565b6040513d6000823e3d90fd5b51906dffffffffffffffffffffffffffff8216820361036a57565b9081606091031261036a576122d0816122a1565b9160406122df602084016122a1565b92015163ffffffff8116810361036a5790565b600491926060612302858461210a565b50946123186001600160a01b0393849286612206565b16604051948580927f0902f1ac0000000000000000000000000000000000000000000000000000000082525afa928315612295576000908194612380575b5081906dffffffffffffffffffffffffffff8091169416941691161460001461237c5791565b9091565b8294506123a4915060603d81116123ab575b61239c8183611eaf565b8101906122bc565b5093612356565b503d612392565b9081602091031261036a5751801515810361036a5790565b91906001600160a01b0390817f0000000000000000000000000000000000000000000000000000000000000000166040918251916306801cc360e41b968784528583169580600498888a8801521698896024870152600160448701526020958681606481885afa9081156125cd57600091612689575b5060009a8b998b8a518663e5e31b1360e01b958683521680928201528a816024818c5afa90811561267d578f91612660575b506125d8575b5089519384528b8401526024830152600060448301528682606481885afa9182156125cd57908792916000926125ab575b506024908951948593849283521696878d8301525afa9081156125a057600091612583575b506124f3575b505050505090508082116000146124ec575090600190565b9160009150565b84955061252b96849551978894859384936378a051ad60e11b855284019092916001600160a01b036020916040840195845216910152565b03915afa918215612579575060009161254d575b5090508038808080806124d4565b82813d8311612572575b6125618183611eaf565b8101031261032d575051803861253f565b503d612557565b513d6000823e3d90fd5b61259a9150853d8711610402576103f48183611eaf565b386124ce565b86513d6000823e3d90fd5b60249192506125c690843d8611610fb157610fa28183611eaf565b91906124a9565b88513d6000823e3d90fd5b8a516378a051ad60e11b8152808e018881526001600160a01b038b166020820152929e9290918b918391908290819060400103915afa918215612655578092612625575b50509b38612478565b9091508982813d831161264e575b61263d8183611eaf565b8101031261032d575051388061261c565b503d612633565b8b51903d90823e3d90fd5b61267791508b3d8d11610402576103f48183611eaf565b38612472565b8f8d51903d90823e3d90fd5b6126a09150873d8911610fb157610fa28183611eaf565b38612440565b156126ad57565b606460405162461bcd60e51b815260206004820152601a60248201527f426173655631526f757465723a20494e56414c49445f504154480000000000006044820152fd5b8051156126fe5760200190565b634e487b7160e01b600052603260045260246000fd5b80518210156126fe5760209160051b010190565b60001981146127375760010190565b634e487b7160e01b600052601160045260246000fd5b9190600161275e81835110156126a6565b81518181018091116127375761277381611ed2565b601f1961279060409361278885519485611eaf565b808452611ed2565b0193602094368684013781966127a5836126f1565b526001600160a01b03907f000000000000000000000000000000000000000000000000000000000000000082166000865b6127e5575b5050505050505050565b82518110156129755761281a846127fc8386612714565b515116858a61280b8588612714565b51015116886104b08588612714565b8487519163e5e31b1360e01b8352169060049180838301526024918b818481895afa90811561296a57918c918c98979695949360009161294d575b50612870575b5050505061286890612728565b9091926127d6565b84959697506128826128c3958b612714565b51908961288f888b612714565b515116918c518097819482936378a051ad60e11b84528984019092916001600160a01b036020916040840195845216910152565b03915afa92831561294257600093612913575b508984019182851161290057505091612868916128f68a96959489612714565b5290388a8161285b565b601190634e487b7160e01b600052526000fd5b90928b82813d831161293b575b61292a8183611eaf565b8101031261032d57505191386128d6565b503d612920565b89513d6000823e3d90fd5b6129649150833d8511610402576103f48183611eaf565b38612855565b8a513d6000823e3d90fd5b6127db565b8181029291811591840414171561273757565b8115612997570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161273757565b8015612a4d5781151580612a44575b156129db5761229292610e9c9161297a565b608460405162461bcd60e51b8152602060048201526024808201527f426173655631526f757465723a20494e53554646494349454e545f4c4951554960448201527f44495459000000000000000000000000000000000000000000000000000000006064820152fd5b508215156129c9565b608460405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a20494e53554646494349454e545f414d4f554e60448201527f54000000000000000000000000000000000000000000000000000000000000006064820152fd5b6040516306801cc360e41b81526001600160a01b0382811660048301528381166024830152841515604483015294959460209492939185816064817f000000000000000000000000000000000000000000000000000000000000000086165afa90811561229557600091612bd5575b5016928315612bc657849392600492612b3e926122f2565b949092604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa92831561229557600093612b93575b505061229292610ea183610e9c610e9c948961297a565b8181949293943d8311612bbf575b612bab8183611eaf565b8101031261032d5750519082610ea1612b7c565b503d612ba1565b50505050509050600090600090565b612bec9150863d8811610fb157610fa28183611eaf565b38612b26565b15612bf957565b606460405162461bcd60e51b815260206004820152601560248201527f426173655631526f757465723a204558504952454400000000000000000000006044820152fd5b15612c4457565b608460405162461bcd60e51b815260206004820152602360248201527f426173655631526f757465723a20494e53554646494349454e545f415f414d4f60448201527f554e5400000000000000000000000000000000000000000000000000000000006064820152fd5b15612cb557565b608460405162461bcd60e51b815260206004820152602360248201527f426173655631526f757465723a20494e53554646494349454e545f425f414d4f60448201527f554e5400000000000000000000000000000000000000000000000000000000006064820152fd5b919095929594939484871061036a5783861061036a576040516306801cc360e41b81526001600160a01b038481166004830152828116602483015283151560448301527f0000000000000000000000000000000000000000000000000000000000000000811694916020919082816064818a5afa90811561229557600091612eac575b501615612e24575b50612db593506122f2565b9290801580612e1c575b15612dcd575050505090915b565b612ddc848288979596976129ba565b94838611612df4575050505061237c90821015612cae565b83955061237c945090612e0b91612e1493946129ba565b948511156120ed565b831015612c3d565b508315612dbf565b6040517f82dfdce40000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152841660248201528415156044820152948190869060649082906000905af194851561229557612db595612e8e575b50612daa565b81612ea492903d10610fb157610fa28183611eaf565b503880612e88565b612ec39150833d8511610fb157610fa28183611eaf565b38612da2565b15612ed057565b608460405162461bcd60e51b815260206004820152602860248201527f426173655631526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e540000000000000000000000000000000000000000000000006064820152fd5b926001600160a01b03919594958452602092838501521660408301526080606083015283519384608084015260005b858110612f8b57505050601f19601f84600060a0809697860101520116010190565b81810183015184820160a001528201612f69565b929160005b82518110156131b3576001600160a01b0380612fc08386612714565b515116612fdf6020918383612fd5878a612714565b510151169061210a565b5090600184019182851161273757612ff7838a612714565b51908480613005888b612714565b5151169116146000146131ab57600090915b87516000198101908111612737578694898792871060001461319e578261306683826130466130929686612714565b5151169060406104b0858a61305b858a612714565b510151169287612714565b945b61308089836130778287612714565b51511694612714565b510151168b6104b06040998a92612714565b1684519361309f85611e93565b60008552813b1561036a57600080946130e68851978896879586947f022c0d9f00000000000000000000000000000000000000000000000000000000865260048601612f3a565b03925af18015613193579061317f94939291613184575b507f423c093a1f80c354c75d4f9e86fde37d7c9014453df9643f585a1b199d094e50613129848a612714565b519183613136868a612714565b5151169361317782613148888c612714565b51015192519485526001600160a01b039095166020850152901515604084015286169233929081906060820190565b0390a3612728565b612fa4565b61318d90611e7f565b386130fd565b82513d6000823e3d90fd5b6130929150828a94613068565b600091613017565b5050509050565b3d156131f5573d9067ffffffffffffffff8211611e6957604051916131e96020601f19601f8401160184611eaf565b82523d6000602084013e565b606090565b600080809381938260405161320e81611e93565b525af16132196131ba565b501561322157565b608460405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c454400000000000000000000000000000000000000000000000000000000006064820152fd5b919091803b1561036a5760405163a9059cbb60e01b602082019081526001600160a01b0390941660248201526044810192909252600092839283906132dd81606481015b03601f198101835282611eaf565b51925af16132e96131ba565b816132f7575b501561036a57565b805180159250821561330c575b5050386132ef565b61331f92506020809183010191016123b2565b3880613304565b90929192813b1561036a576040516323b872dd60e01b602082019081526001600160a01b0392831660248301529490911660448201526064810192909252600092839283906132dd81608481016132cf565b919061338490836129ad565b91821161338d57565b606460405162461bcd60e51b815260206004820152601360248201527f4d6174683a205375622d756e646572666c6f77000000000000000000000000006044820152fd5b916000925b80518410156136e7576001600160a01b0393846133f38284612714565b51511660209580876134058587612714565b5101511690613414828461210a565b50816134208688612714565b515116988261344781836134348a8c612714565b510151169b60409c8d6104b08b8d612714565b16908a51917f0902f1ac000000000000000000000000000000000000000000000000000000008352606060049381818681865afa9586156136dc57879160009384986136aa575b5050168814946dffffffffffffffffffffffffffff919086156136a1575016915b8c51926370a0823160e01b84528285850152602493828186818d5afa90811561369657600091613667575b506134f0916134e891613378565b9789896123ca565b50941561365f57600094925b8a51600019810190811161364b578a10156136425760018a0190818b1161362f5750908a8e6104b0848a8061353461354c9887612714565b515116956135428387612714565b5101511693612714565b935b8c5161355981611e93565b60008152823b1561036a576000946135a08f92879351988997889687957f022c0d9f0000000000000000000000000000000000000000000000000000000087528601612f3a565b03925af18015612942579161361896979899917f423c093a1f80c354c75d4f9e86fde37d7c9014453df9643f585a1b199d094e5093613620575b50613177826135e9888b612714565b51015192519485526001600160a01b039095166020850152901515604084015288169233929081906060820190565b9291906133d6565b61362990611e7f565b386135da565b601186634e487b7160e01b600052526000fd5b50508a9361354e565b50601185634e487b7160e01b600052526000fd5b6000926134fc565b908382813d831161368f575b61367d8183611eaf565b8101031261032d5750516134f06134da565b503d613673565b8f513d6000823e3d90fd5b905016916134af565b6136d29298506dffffffffffffffffffffffffffff9450803d106123ab5761239c8183611eaf565b509690923861348e565b8e513d6000823e3d90fd5b50915050565b959690939192966001600160a01b0380971695863b1561036a5760ff90604051947fd505accf0000000000000000000000000000000000000000000000000000000086526000998089166004880152871660248701528a6044870152606486015216608484015260a483015260c4820152848160e48183885af19081613859575b50613852576040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529116602482015290602090829060449082905afa9182156138465791613815575b501015612dcb57606460405162461bcd60e51b815260206004820152600e60248201527f5065726d6974206661696c7572650000000000000000000000000000000000006044820152fd5b90506020813d821161383e575b8161382f60209383611eaf565b8101031261036a5751386137ca565b3d9150613822565b604051903d90823e3d90fd5b5050505050565b61386590959195611e7f565b933861376e56fea164736f6c6343000813000a00000000000000000000000072e47b1eaaaac6c07ea4071f1d0d355f603e1cc1000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f0000000000000000000000004300000000000000000000000000000000000004
Deployed Bytecode
0x604060808152600480361015610053575b5050361561001d57600080fd5b6100516001600160a01b037f00000000000000000000000043000000000000000000000000000000000000041633146120ed565b005b6000803560e01c80630dede6c414611d0f57806313dcfc5914611bd257806318a1308614611a375780634386e63c146119fe578063448725b4146119755780634c1ee03e1461192e578063544caa56146118df5780635a47ddc3146117a85780635e1e63251461176c5780635e60dab51461173757806367ffb66a146115ae5780636cc1ae131461154c5780637301e3c81461145657806376c72751146111c35780637af728c81461100f5780639881fcb414610fc257806398a0fb3c14610ca3578063a32b1fcd14610acf578063b7e0d4c0146108d1578063c45a01551461088d578063d7b0e0a514610673578063e2d9d4dc146105e1578063e5e31b131461053c578063f2428621146104f8578063f41766d8146104135763fe411f141461017d5750610010565b3461032d5761018b3661209f565b97929795919395949094421115936101a285612bf2565b6101e16001600160a01b03926101da847f00000000000000000000000043000000000000000000000000000000000000041697612bf2565b8685612206565b8a516323b872dd60e01b8152338682019081526001600160a01b038316602082810191909152604082019a909a529184169189908290819060600103818d865af1908115610409578a916103dc575b50156103d857908a89969594939260248251809c819363226bf2d160e21b8352308a8401525af19889156103ce578690879a610395575b50610272868561210a565b5084841693168303610380579161029d8992610295602496959d8e5b1015612c3d565b8b1015612cae565b8b51938480926370a0823160e01b825230888301525afa908115610376578690869261033e575b6102ce935061328b565b813b1561033a578560248492838b519586948593632e1a7d4d60e01b85528401525af180156103305790859291610315575b505061030b916131fa565b8351928352820152f35b81925061032190611e7f565b61032d57808491610300565b80fd5b87513d84823e3d90fd5b8280fd5b9150508682813d831161036f575b6103568183611eaf565b8101031261036a57856102ce9251916102c4565b600080fd5b503d61034c565b8a513d87823e3d90fd5b989161029d8992610295602496959d8e61028e565b809a508c8092503d83116103c7575b6103ae8183611eaf565b810103126103c3578789519901519838610267565b8580fd5b503d6103a4565b8b513d88823e3d90fd5b8880fd5b6103fc9150893d8b11610402575b6103f48183611eaf565b8101906123b2565b38610230565b503d6103ea565b8c513d8c823e3d90fd5b5082346104f45761043861043d61042936611f91565b95829593949196421115612bf2565b61274d565b9485519060001982019182116104e1576104dd87876104d3888861046d896104658a88612714565b511015612ec9565b6104cd6001600160a01b036104bb81610485856126f1565b5151169180610493866126f1565b5151169060206104a2876126f1565b51015116886104b0876126f1565b510151151591612206565b6104c4886126f1565b51913390613326565b84612f9f565b5191829182611e12565b0390f35b80601189634e487b7160e01b6024945252fd5b5080fd5b5082346104f457816003193601126104f457602090516001600160a01b037f0000000000000000000000004300000000000000000000000000000000000004168152f35b50913461033a57602060031936011261033a576020610559611d97565b92602483518095819363e5e31b1360e01b83526001600160a01b03809216908301527f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f165afa9182156105d757602093926105b8575b50519015158152f35b6105d0919250833d8111610402576103f48183611eaf565b90386105af565b81513d85823e3d90fd5b5090346104f45781906105f336611fdf565b97809b9885928b9598979c999f946001600160a01b03998b8b7f0000000000000000000000004300000000000000000000000000000000000004169e8f61063992612206565b6101e1996101da985061065c9690921561066d5750600019905b309033906136ed565b42111561066881612bf2565b612bf2565b90610653565b5091903461033a5760206106d9936106e061071c936106913661209f565b9a929a999194979099421115976106a789612bf2565b6001600160a01b039d8e7f00000000000000000000000043000000000000000000000000000000000000041699612bf2565b8887612206565b8b516323b872dd60e01b8152338882019081526001600160a01b03831660208201526040810195909552908d1693909283918291606090910190565b03818a865af1908115610883578791610865575b50156103c357888691602482518094819363226bf2d160e21b8352308a8401525af1998a1561085b578691879b610821575b509261079a999a928892856107a79661077b8a8661210a565b50169084161460001461081257906107a2919b8c959b5b861015612c3d565b8a1015612cae565b61328b565b813b1561033a578460248492838a519586948593632e1a7d4d60e01b85528401525af1801561080857908492916107f0575b50506107e4916131fa565b82519182526020820152f35b8192506107fc90611e7f565b61032d578083916107d9565b86513d84823e3d90fd5b93906107a2919b8c959b610792565b8a80929c508193503d8311610854575b61083b8183611eaf565b810103126103c3578051602090910151996107a7610762565b503d610831565b89513d88823e3d90fd5b61087d915060203d8111610402576103f48183611eaf565b38610730565b8a513d89823e3d90fd5b5082346104f457816003193601126104f457602090516001600160a01b037f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f168152f35b61093c6109458484876109326108fb6108e93661209f565b9b93949b979296909597421115612bf2565b6001600160a01b0395867f0000000000000000000000004300000000000000000000000000000000000004169434908d878b612d1f565b9a819a8488612206565b80963390613326565b803b156103c3578451630d0e30db60e41b8152868189818d865af18015610aaa57859288928a92610ab4575b506109ab908c895194858094819363a9059cbb60e01b835260209c8d988401602090939291936001600160a01b0360408201951681520152565b03925af1908115610aaa57846024936109d0889796948b948591610a8d575b506120ed565b88519a8b9687957f6a6278420000000000000000000000000000000000000000000000000000000087521690850152165af1928315610a825792610a50575b506104dd9250843411610a38575b51938493846040919493926060820195825260208201520152565b610a4b610a4586346129ad565b336131fa565b610a1d565b90915082813d8311610a7b575b610a678183611eaf565b8101031261036a576104dd91519085610a0f565b503d610a5d565b8251903d90823e3d90fd5b610aa49150893d8b11610402576103f48183611eaf565b8f6109ca565b86513d89823e3d90fd5b909350610ac19150611e7f565b6103c357858785928c610971565b5090346104f4576101806003193601126104f457610aeb611d97565b610af3611dad565b92610afc611e03565b9060643591610b09611dc3565b90610104359060e435821515830361036a57610124359060ff8216820361036a57610b5f610b6792610b6e95610b40868e8d612206565b9015610c9c57600019915b8461016435936101443593309033906136ed565b421115612bf2565b8786612206565b87516323b872dd60e01b8152338782019081526001600160a01b0392831660208281018290526040830197909752929590829081906060015b038187865af1908115610c92578491610c74575b501561033a57602488928486938551998a95869463226bf2d160e21b865216908401525af1948515610c685781948296610c2e575b5090610bfd83928561210a565b50905016911614600014610c2957905b610c1b608435831015612c3d565b6107e460a435821015612cae565b610c0d565b87809297508196503d8311610c61575b610c488183611eaf565b8101031261032d57835160209094015194610bfd610bf0565b503d610c3e565b508551903d90823e3d90fd5b610c8c915060203d8111610402576103f48183611eaf565b38610bbb565b89513d86823e3d90fd5b8991610b4b565b5082903461032d5760a060031936011261032d57610cbf611d97565b91610cc8611dad565b9184610cd2611e03565b60643594608435968551926306801cc360e41b845283610d18828585602099850191939260409160608401956001600160a01b0380921685521660208401521515910152565b039285856001600160a01b039581877f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f165afa948515610fb857908b92918896610f89575b508796889589971680610ef1575b505050505050821580610ee9575b15610e6757505050610d8b848461297a565b90806003831115610e58575081600181811c818101809111610e455791905b848310610e0e575050505b7ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffc188201918211610dfb575090519182526020820192909252604081019190915260609150f35b80601187634e487b7160e01b6024945252fd5b9193509083610e1d818461298d565b908101809111610e3057811c9190610daa565b601189634e487b7160e01b6000525260246000fd5b60248460118b634e487b7160e01b835252fd5b9115610db55760019150610db5565b909592919650610e788188876129ba565b92808411610ec05750610ea790610e9c6104dd9697610ea1869a610e9c838c61297a565b61298d565b9561297a565b905080821015610eb957505b90610a1d565b9050610eb3565b92506104dd945080610e9c610ed989610ea794876129ba565b97610ea1869a610e9c838c61297a565b508015610d79565b91949750929550829194508851958680927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa908115610f7f578691610f4f575b50610f419350936122f2565b919091888881808080610d6b565b905083813d8311610f78575b610f658183611eaf565b8101031261036a57610f4192518a610f35565b503d610f5b565b87513d88823e3d90fd5b610faa919650873d8911610fb1575b610fa28183611eaf565b8101906121e7565b948c610d5d565b503d610f98565b88513d89823e3d90fd5b5082903461032d578160031936011261032d576024359067ffffffffffffffff821161032d57506104dd92610ffd6110049236908301611eea565b903561274d565b905191829182611e12565b5082346104f45761102f61102236611f91565b9593949095421115612bf2565b80519360001985019485116111b05761106394926110dc8895936110d58b946001600160a01b03809860209b8c9186612714565b5101511697611096817f000000000000000000000000430000000000000000000000000000000000000416809a146126a6565b6110cd816110a3866126f1565b51511691806110b1876126f1565b515116908d6110bf886126f1565b510151168a6104b0886126f1565b903390613326565b30906133d1565b82516370a0823160e01b815230838201528681602481885afa9687156111a6578697611170575b505061111190861015612ec9565b823b1561116c5784602485928385519687948593632e1a7d4d60e01b85528401525af1908115611163575061114f575b505061114c916131fa565b80f35b61115890611e7f565b61033a578284611141565b513d84823e3d90fd5b8380fd5b809297508196503d831161119f575b6111898183611eaf565b8101031261036a57611111879451959089611103565b503d61117f565b84513d88823e3d90fd5b60248760118a634e487b7160e01b835252fd5b50916111e0906111d236612054565b959294909195421115612bf2565b6001600160a01b0391826111f3876126f1565b51511691611225847f0000000000000000000000004300000000000000000000000000000000000004168094146126a6565b823b1561145257878551630d0e30db60e41b81528181858134895af180156103305761143e575b50611281936112b38661125e8b6126f1565b5151169160209687938c8b6104b08c88611277856126f1565b51015116926126f1565b895194858094819363a9059cbb60e01b835234908b8401602090939291936001600160a01b0360408201951681520152565b03925af190811561143457906112cf918a9161141757506120ed565b8651936000199485810190811161140457846112ec83928b612714565b51015116948651986370a0823160e01b93848b52868b6024818785169b8c8b8301525afa9a8b156113fa578c9b6113c9575b5061132990826133d1565b80519182019182116113b657918561134681969593602495612714565b510151168751968794859384528301525afa9283156113ad5750859261137d575b505061114c9261137691613378565b1015612ec9565b90809250813d83116113a6575b6113948183611eaf565b8101031261036a575182611376611367565b503d61138a565b513d87823e3d90fd5b60248b601187634e487b7160e01b835252fd5b909a508681813d83116113f3575b6113e18183611eaf565b8101031261036a57519961132961131e565b503d6113d7565b89513d8e823e3d90fd5b60248a601186634e487b7160e01b835252fd5b61142e9150853d8711610402576103f48183611eaf565b386109ca565b86513d8b823e3d90fd5b6114488291611e7f565b61032d573861124c565b8780fd5b50913461033a57608060031936011261033a5781359167ffffffffffffffff808411611548573660238501121561154857838201359461149586611ed2565b946114a285519687611eaf565b86865260209660248888019160051b8301019136831161116c57906024899201905b838210611539575050505060243591821161032d5750936114ee6104d3926104dd96369101611eea565b6104cd6114f9611dd9565b92611508426064351015612bf2565b6104bb6001600160a01b03918261151e866126f1565b515116928061152c876126f1565b515116916104a2876126f1565b813581529082019082016114c4565b8480fd5b50913461033a576115709061156036611f91565b9691969590939295421115612bf2565b6001600160a01b03926112cf84611586896126f1565b51511693856115948a6126f1565b515116946110cd6020968b8a6104b08b8b611277856126f1565b50916115cb6115bc36612054565b95919295939093421115612bf2565b6001600160a01b0390816115de846126f1565b51511691611610817f0000000000000000000000004300000000000000000000000000000000000004168094146126a6565b61161a843461274d565b96875160001981019081116114045790610465611637928a612714565b87611641886126f1565b51843b156104f457818491895192838092630d0e30db60e41b8252895af1801561172d57611715575b5050906116d99261169d83602094611681886126f1565b515116908561168f896126f1565b51015116896104b0896126f1565b896116a78a6126f1565b519389519687958694859363a9059cbb60e01b85528401602090939291936001600160a01b0360408201951681520152565b03925af19081156111a6576104d39392916104cd916104dd98916116fd57506120ed565b61142e915060203d8111610402576103f48183611eaf565b61172190939293611e7f565b6114525790873861166a565b88513d84823e3d90fd5b83823461032d57606060031936011261032d57506107e4611756611d97565b61175e611dad565b611766611e03565b916122f2565b503461032d57606060031936011261032d575061179a9061178b611dad565b611793611dd9565b91356123ca565b825191825215156020820152f35b5082903461032d5761012060031936011261032d576117c5611d97565b906117ce611dad565b926117d7611e03565b9260e4356001600160a01b0380821680920361036a5761184197856024926118486118366020976118288c8e61181242610104351015612bf2565b60c4359160a43591608435916064359187612d1f565b9e8f93829f929e8385612206565b9d8e80943390613326565b3390613326565b865198899586947f6a627842000000000000000000000000000000000000000000000000000000008652850152165af19182156118d4579161189f575b519283526020830193909352506040810191909152606090f35b90506020823d82116118cc575b816118b960209383611eaf565b8101031261036a576104dd915190611885565b3d91506118ac565b9051903d90823e3d90fd5b5082346104f457806003193601126104f4576104dd9061190e611900611d97565b611908611dad565b9061210a565b91516001600160a01b039182168152911660208201529081906040820190565b5082346104f45760606003193601126104f4576020906001600160a01b0361196d611957611d97565b61195f611dad565b611967611e03565b91612206565b915191168152f35b5091903461033a5761198636611fdf565b9297939c988d6001600160a01b039c989c9b97969b9392939e8f7f0000000000000000000000004300000000000000000000000000000000000004169a6119ce848d8c612206565b90600014966020966106e0966106d99561065c9461071c9b6119f75760001990309033906136ed565b8c90610653565b83823461032d57608060031936011261032d57506107e4611a1d611d97565b611a25611dad565b611a2d611e03565b9060643592612ab7565b5082346104f457611a5b611a4a36611f91565b969296949094939193421115612bf2565b82519260001993848101908111610e4557611aba82611a879260206001600160a01b0394859284612714565b5101511694610438847f0000000000000000000000004300000000000000000000000000000000000004168097146126a6565b978851868101908111611bbf5791611add611b1e92610465611b2696958d612714565b611b1581611aea856126f1565b5151169180611af8866126f1565b515116906020611b07876126f1565b510151168b6104b0876126f1565b6104c48b6126f1565b309088612f9f565b8551838101908111611bac57611b3c9087612714565b51813b1561033a5782916024839288519485938492632e1a7d4d60e01b84528d8401525af18015611ba257611b93575b508451918201918211610dfb576104dd85856104d386611b8c8785612714565b51906131fa565b611b9c90611e7f565b86611b6c565b85513d84823e3d90fd5b60248360118a634e487b7160e01b835252fd5b60248660118d634e487b7160e01b835252fd5b50913461033a5760e060031936011261033a57611bed611dd9565b606435926001600160a01b03908185168095036103c35760843591821515809303611d0b5760a43590808216820361145257611c2d4260c4351015612bf2565b85519386850185811067ffffffffffffffff821117611cf857875260018552885b602080821015611c7f57885160209291611c6782611e4d565b8c82528c818301528c8b830152828901015201611c4e565b50509194979690929783611c92866126f1565b51911690526020611ca2856126f1565b51015284611caf846126f1565b510152611cbd82873561274d565b9485519060001982019182116104e1576104dd87876104d388886104cd89611ceb6024356104658c8a612714565b6104bb81610485856126f1565b60248a604187634e487b7160e01b835252fd5b8680fd5b5090346104f4576101006003193601126104f457611d2b611d97565b611d33611dad565b92611d3c611e03565b90611d57611d48611dc3565b926101da4260e4351015612bf2565b86516323b872dd60e01b8152338682019081526001600160a01b039283166020828101829052606435604084015293959390929182908190606001610ba7565b600435906001600160a01b038216820361036a57565b602435906001600160a01b038216820361036a57565b60c435906001600160a01b038216820361036a57565b604435906001600160a01b038216820361036a57565b35906001600160a01b038216820361036a57565b60443590811515820361036a57565b6020908160408183019282815285518094520193019160005b828110611e39575050505090565b835185529381019392810192600101611e2b565b6060810190811067ffffffffffffffff821117611e6957604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff8111611e6957604052565b6020810190811067ffffffffffffffff821117611e6957604052565b90601f601f19910116810190811067ffffffffffffffff821117611e6957604052565b67ffffffffffffffff8111611e695760051b60200190565b81601f8201121561036a57803590611f0182611ed2565b92604090611f1182519586611eaf565b838552602091828601918360608097028601019481861161036a578401925b858410611f41575050505050505090565b868483031261036a57825190611f5682611e4d565b611f5f85611def565b8252611f6c868601611def565b868301528385013590811515820361036a57828792868b950152815201930192611f30565b60a060031982011261036a5760043591602435916044359067ffffffffffffffff821161036a57611fc491600401611eea565b906064356001600160a01b038116810361036a579060843590565b60031961016091011261036a576001600160a01b0390600435828116810361036a5791602435801515810361036a579160443591606435916084359160a435908116810361036a579060c4359060e435801515810361036a57906101043560ff8116810361036a579061012435906101443590565b90608060031983011261036a57600435916024359067ffffffffffffffff821161036a5761208491600401611eea565b906044356001600160a01b038116810361036a579060643590565b60031960e091011261036a576001600160a01b0390600435828116810361036a5791602435801515810361036a579160443591606435916084359160a435908116810361036a579060c43590565b156120f457565b634e487b7160e01b600052600160045260246000fd5b90916001600160a01b039182841683821681811461217d57101561217857925b9183161561213457565b606460405162461bcd60e51b815260206004820152601a60248201527f426173655631526f757465723a205a45524f5f414444524553530000000000006044820152fd5b61212a565b608460405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a204944454e544943414c5f414444524553534560448201527f53000000000000000000000000000000000000000000000000000000000000006064820152fd5b9081602091031261036a57516001600160a01b038116810361036a5790565b6040516306801cc360e41b81526001600160a01b039182166004820152911660248201529015156044820152602081806064810103816001600160a01b037f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f165afa9081156122955760009161227a575090565b612292915060203d8111610fb157610fa28183611eaf565b90565b6040513d6000823e3d90fd5b51906dffffffffffffffffffffffffffff8216820361036a57565b9081606091031261036a576122d0816122a1565b9160406122df602084016122a1565b92015163ffffffff8116810361036a5790565b600491926060612302858461210a565b50946123186001600160a01b0393849286612206565b16604051948580927f0902f1ac0000000000000000000000000000000000000000000000000000000082525afa928315612295576000908194612380575b5081906dffffffffffffffffffffffffffff8091169416941691161460001461237c5791565b9091565b8294506123a4915060603d81116123ab575b61239c8183611eaf565b8101906122bc565b5093612356565b503d612392565b9081602091031261036a5751801515810361036a5790565b91906001600160a01b0390817f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f166040918251916306801cc360e41b968784528583169580600498888a8801521698896024870152600160448701526020958681606481885afa9081156125cd57600091612689575b5060009a8b998b8a518663e5e31b1360e01b958683521680928201528a816024818c5afa90811561267d578f91612660575b506125d8575b5089519384528b8401526024830152600060448301528682606481885afa9182156125cd57908792916000926125ab575b506024908951948593849283521696878d8301525afa9081156125a057600091612583575b506124f3575b505050505090508082116000146124ec575090600190565b9160009150565b84955061252b96849551978894859384936378a051ad60e11b855284019092916001600160a01b036020916040840195845216910152565b03915afa918215612579575060009161254d575b5090508038808080806124d4565b82813d8311612572575b6125618183611eaf565b8101031261032d575051803861253f565b503d612557565b513d6000823e3d90fd5b61259a9150853d8711610402576103f48183611eaf565b386124ce565b86513d6000823e3d90fd5b60249192506125c690843d8611610fb157610fa28183611eaf565b91906124a9565b88513d6000823e3d90fd5b8a516378a051ad60e11b8152808e018881526001600160a01b038b166020820152929e9290918b918391908290819060400103915afa918215612655578092612625575b50509b38612478565b9091508982813d831161264e575b61263d8183611eaf565b8101031261032d575051388061261c565b503d612633565b8b51903d90823e3d90fd5b61267791508b3d8d11610402576103f48183611eaf565b38612472565b8f8d51903d90823e3d90fd5b6126a09150873d8911610fb157610fa28183611eaf565b38612440565b156126ad57565b606460405162461bcd60e51b815260206004820152601a60248201527f426173655631526f757465723a20494e56414c49445f504154480000000000006044820152fd5b8051156126fe5760200190565b634e487b7160e01b600052603260045260246000fd5b80518210156126fe5760209160051b010190565b60001981146127375760010190565b634e487b7160e01b600052601160045260246000fd5b9190600161275e81835110156126a6565b81518181018091116127375761277381611ed2565b601f1961279060409361278885519485611eaf565b808452611ed2565b0193602094368684013781966127a5836126f1565b526001600160a01b03907f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f82166000865b6127e5575b5050505050505050565b82518110156129755761281a846127fc8386612714565b515116858a61280b8588612714565b51015116886104b08588612714565b8487519163e5e31b1360e01b8352169060049180838301526024918b818481895afa90811561296a57918c918c98979695949360009161294d575b50612870575b5050505061286890612728565b9091926127d6565b84959697506128826128c3958b612714565b51908961288f888b612714565b515116918c518097819482936378a051ad60e11b84528984019092916001600160a01b036020916040840195845216910152565b03915afa92831561294257600093612913575b508984019182851161290057505091612868916128f68a96959489612714565b5290388a8161285b565b601190634e487b7160e01b600052526000fd5b90928b82813d831161293b575b61292a8183611eaf565b8101031261032d57505191386128d6565b503d612920565b89513d6000823e3d90fd5b6129649150833d8511610402576103f48183611eaf565b38612855565b8a513d6000823e3d90fd5b6127db565b8181029291811591840414171561273757565b8115612997570490565b634e487b7160e01b600052601260045260246000fd5b9190820391821161273757565b8015612a4d5781151580612a44575b156129db5761229292610e9c9161297a565b608460405162461bcd60e51b8152602060048201526024808201527f426173655631526f757465723a20494e53554646494349454e545f4c4951554960448201527f44495459000000000000000000000000000000000000000000000000000000006064820152fd5b508215156129c9565b608460405162461bcd60e51b815260206004820152602160248201527f426173655631526f757465723a20494e53554646494349454e545f414d4f554e60448201527f54000000000000000000000000000000000000000000000000000000000000006064820152fd5b6040516306801cc360e41b81526001600160a01b0382811660048301528381166024830152841515604483015294959460209492939185816064817f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f86165afa90811561229557600091612bd5575b5016928315612bc657849392600492612b3e926122f2565b949092604051928380927f18160ddd0000000000000000000000000000000000000000000000000000000082525afa92831561229557600093612b93575b505061229292610ea183610e9c610e9c948961297a565b8181949293943d8311612bbf575b612bab8183611eaf565b8101031261032d5750519082610ea1612b7c565b503d612ba1565b50505050509050600090600090565b612bec9150863d8811610fb157610fa28183611eaf565b38612b26565b15612bf957565b606460405162461bcd60e51b815260206004820152601560248201527f426173655631526f757465723a204558504952454400000000000000000000006044820152fd5b15612c4457565b608460405162461bcd60e51b815260206004820152602360248201527f426173655631526f757465723a20494e53554646494349454e545f415f414d4f60448201527f554e5400000000000000000000000000000000000000000000000000000000006064820152fd5b15612cb557565b608460405162461bcd60e51b815260206004820152602360248201527f426173655631526f757465723a20494e53554646494349454e545f425f414d4f60448201527f554e5400000000000000000000000000000000000000000000000000000000006064820152fd5b919095929594939484871061036a5783861061036a576040516306801cc360e41b81526001600160a01b038481166004830152828116602483015283151560448301527f000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f811694916020919082816064818a5afa90811561229557600091612eac575b501615612e24575b50612db593506122f2565b9290801580612e1c575b15612dcd575050505090915b565b612ddc848288979596976129ba565b94838611612df4575050505061237c90821015612cae565b83955061237c945090612e0b91612e1493946129ba565b948511156120ed565b831015612c3d565b508315612dbf565b6040517f82dfdce40000000000000000000000000000000000000000000000000000000081526001600160a01b038381166004830152841660248201528415156044820152948190869060649082906000905af194851561229557612db595612e8e575b50612daa565b81612ea492903d10610fb157610fa28183611eaf565b503880612e88565b612ec39150833d8511610fb157610fa28183611eaf565b38612da2565b15612ed057565b608460405162461bcd60e51b815260206004820152602860248201527f426173655631526f757465723a20494e53554646494349454e545f4f5554505560448201527f545f414d4f554e540000000000000000000000000000000000000000000000006064820152fd5b926001600160a01b03919594958452602092838501521660408301526080606083015283519384608084015260005b858110612f8b57505050601f19601f84600060a0809697860101520116010190565b81810183015184820160a001528201612f69565b929160005b82518110156131b3576001600160a01b0380612fc08386612714565b515116612fdf6020918383612fd5878a612714565b510151169061210a565b5090600184019182851161273757612ff7838a612714565b51908480613005888b612714565b5151169116146000146131ab57600090915b87516000198101908111612737578694898792871060001461319e578261306683826130466130929686612714565b5151169060406104b0858a61305b858a612714565b510151169287612714565b945b61308089836130778287612714565b51511694612714565b510151168b6104b06040998a92612714565b1684519361309f85611e93565b60008552813b1561036a57600080946130e68851978896879586947f022c0d9f00000000000000000000000000000000000000000000000000000000865260048601612f3a565b03925af18015613193579061317f94939291613184575b507f423c093a1f80c354c75d4f9e86fde37d7c9014453df9643f585a1b199d094e50613129848a612714565b519183613136868a612714565b5151169361317782613148888c612714565b51015192519485526001600160a01b039095166020850152901515604084015286169233929081906060820190565b0390a3612728565b612fa4565b61318d90611e7f565b386130fd565b82513d6000823e3d90fd5b6130929150828a94613068565b600091613017565b5050509050565b3d156131f5573d9067ffffffffffffffff8211611e6957604051916131e96020601f19601f8401160184611eaf565b82523d6000602084013e565b606090565b600080809381938260405161320e81611e93565b525af16132196131ba565b501561322157565b608460405162461bcd60e51b815260206004820152602360248201527f5472616e7366657248656c7065723a204554485f5452414e534645525f46414960448201527f4c454400000000000000000000000000000000000000000000000000000000006064820152fd5b919091803b1561036a5760405163a9059cbb60e01b602082019081526001600160a01b0390941660248201526044810192909252600092839283906132dd81606481015b03601f198101835282611eaf565b51925af16132e96131ba565b816132f7575b501561036a57565b805180159250821561330c575b5050386132ef565b61331f92506020809183010191016123b2565b3880613304565b90929192813b1561036a576040516323b872dd60e01b602082019081526001600160a01b0392831660248301529490911660448201526064810192909252600092839283906132dd81608481016132cf565b919061338490836129ad565b91821161338d57565b606460405162461bcd60e51b815260206004820152601360248201527f4d6174683a205375622d756e646572666c6f77000000000000000000000000006044820152fd5b916000925b80518410156136e7576001600160a01b0393846133f38284612714565b51511660209580876134058587612714565b5101511690613414828461210a565b50816134208688612714565b515116988261344781836134348a8c612714565b510151169b60409c8d6104b08b8d612714565b16908a51917f0902f1ac000000000000000000000000000000000000000000000000000000008352606060049381818681865afa9586156136dc57879160009384986136aa575b5050168814946dffffffffffffffffffffffffffff919086156136a1575016915b8c51926370a0823160e01b84528285850152602493828186818d5afa90811561369657600091613667575b506134f0916134e891613378565b9789896123ca565b50941561365f57600094925b8a51600019810190811161364b578a10156136425760018a0190818b1161362f5750908a8e6104b0848a8061353461354c9887612714565b515116956135428387612714565b5101511693612714565b935b8c5161355981611e93565b60008152823b1561036a576000946135a08f92879351988997889687957f022c0d9f0000000000000000000000000000000000000000000000000000000087528601612f3a565b03925af18015612942579161361896979899917f423c093a1f80c354c75d4f9e86fde37d7c9014453df9643f585a1b199d094e5093613620575b50613177826135e9888b612714565b51015192519485526001600160a01b039095166020850152901515604084015288169233929081906060820190565b9291906133d6565b61362990611e7f565b386135da565b601186634e487b7160e01b600052526000fd5b50508a9361354e565b50601185634e487b7160e01b600052526000fd5b6000926134fc565b908382813d831161368f575b61367d8183611eaf565b8101031261032d5750516134f06134da565b503d613673565b8f513d6000823e3d90fd5b905016916134af565b6136d29298506dffffffffffffffffffffffffffff9450803d106123ab5761239c8183611eaf565b509690923861348e565b8e513d6000823e3d90fd5b50915050565b959690939192966001600160a01b0380971695863b1561036a5760ff90604051947fd505accf0000000000000000000000000000000000000000000000000000000086526000998089166004880152871660248701528a6044870152606486015216608484015260a483015260c4820152848160e48183885af19081613859575b50613852576040517fdd62ed3e0000000000000000000000000000000000000000000000000000000081526001600160a01b0392831660048201529116602482015290602090829060449082905afa9182156138465791613815575b501015612dcb57606460405162461bcd60e51b815260206004820152600e60248201527f5065726d6974206661696c7572650000000000000000000000000000000000006044820152fd5b90506020813d821161383e575b8161382f60209383611eaf565b8101031261036a5751386137ca565b3d9150613822565b604051903d90823e3d90fd5b5050505050565b61386590959195611e7f565b933861376e56fea164736f6c6343000813000a
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000072e47b1eaaaac6c07ea4071f1d0d355f603e1cc1000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f0000000000000000000000004300000000000000000000000000000000000004
-----Decoded View---------------
Arg [0] : _blastGovernor (address): 0x72e47b1eaAAaC6c07Ea4071f1d0d355f603E1cc1
Arg [1] : _factory (address): 0xa19C51D91891D3DF7C13Ed22a2f89d328A82950f
Arg [2] : _wETH (address): 0x4300000000000000000000000000000000000004
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 00000000000000000000000072e47b1eaaaac6c07ea4071f1d0d355f603e1cc1
Arg [1] : 000000000000000000000000a19c51d91891d3df7c13ed22a2f89d328a82950f
Arg [2] : 0000000000000000000000004300000000000000000000000000000000000004
Net Worth in USD
Net Worth in ETH
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
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.