// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import {Ownable} from "@openzeppelin/contracts/access/Ownable.sol";
import {Pausable} from "@openzeppelin/contracts/utils/Pausable.sol";
import {Clones} from "@openzeppelin/contracts/proxy/Clones.sol";
import {IERC20Metadata} from "@openzeppelin/contracts/token/ERC20/extensions/IERC20Metadata.sol";
import {BasketToken, Mode} from "./BasketToken.sol";
/// @title BasketFactory — permissionless launcher for fixed-weight onchain baskets.
/// @dev Deploys BasketToken EIP-1167 clones and keeps an enumerable onchain registry so the
/// frontend needs no indexer. Assets must sit on an owner-managed allowlist.
contract BasketFactory is Ownable, Pausable {
// ---------------------------------------------------------------- constants
uint256 public constant BPS = 10_000;
uint256 public constant MAX_CREATOR_FEE_BPS = 100;
uint256 public constant MIN_ASSETS = 2;
uint256 public constant MAX_ASSETS = 10;
uint256 public constant MAX_DECIMALS = 24;
// ---------------------------------------------------------------- storage
address public immutable implementation;
address public treasury;
address public router;
mapping(address => bool) public isAssetAllowed;
mapping(address => bool) public isBasket;
address[] private _baskets;
// ---------------------------------------------------------------- events
event BasketCreated(
address indexed basket,
address indexed creator,
string name,
string symbol,
address[] assets,
uint256[] weightsBps,
uint256 creatorFeeBps,
Mode mode
);
event AssetAllowed(address indexed asset, bool allowed);
event TreasuryUpdated(address indexed treasury);
event RouterUpdated(address indexed router);
// ---------------------------------------------------------------- errors
error InvalidAssetCount();
error LengthMismatch();
error FeeTooHigh();
error WeightsMustSumToBps();
error ZeroWeight();
error AssetNotAllowed(address asset);
error DuplicateAsset(address asset);
error ZeroAddress();
error UnsupportedDecimals(address asset);
error EmptyString();
constructor(address treasury_, address router_) Ownable(msg.sender) {
if (treasury_ == address(0)) revert ZeroAddress();
treasury = treasury_;
router = router_; // address(0) is fine: Router Mode baskets revert until one is set
implementation = address(new BasketToken());
emit TreasuryUpdated(treasury_);
emit RouterUpdated(router_);
}
// ---------------------------------------------------------------- create
function createBasket(
string calldata name,
string calldata symbol,
address[] calldata assets,
uint256[] calldata weightsBps,
uint256 creatorFeeBps,
Mode mode
) external whenNotPaused returns (address basket) {
uint256 n = assets.length;
if (n < MIN_ASSETS || n > MAX_ASSETS) revert InvalidAssetCount();
if (weightsBps.length != n) revert LengthMismatch();
if (creatorFeeBps > MAX_CREATOR_FEE_BPS) revert FeeTooHigh();
if (bytes(name).length == 0 || bytes(symbol).length == 0) revert EmptyString();
uint8[] memory assetDecimals = new uint8[](n);
uint256 weightSum;
for (uint256 i; i < n; ++i) {
address asset = assets[i];
if (!isAssetAllowed[asset]) revert AssetNotAllowed(asset);
if (weightsBps[i] == 0) revert ZeroWeight();
weightSum += weightsBps[i];
for (uint256 j; j < i; ++j) {
if (assets[j] == asset) revert DuplicateAsset(asset);
}
uint8 dec = IERC20Metadata(asset).decimals();
if (dec > MAX_DECIMALS) revert UnsupportedDecimals(asset);
assetDecimals[i] = dec;
}
if (weightSum != BPS) revert WeightsMustSumToBps();
basket = Clones.clone(implementation);
BasketToken(payable(basket)).initialize(
BasketToken.InitParams({
name: name,
symbol: symbol,
creator: msg.sender,
creatorFeeBps: creatorFeeBps,
mode: mode,
assets: assets,
weightsBps: weightsBps,
assetDecimals: assetDecimals
})
);
_baskets.push(basket);
isBasket[basket] = true;
emit BasketCreated(basket, msg.sender, name, symbol, assets, weightsBps, creatorFeeBps, mode);
}
// ---------------------------------------------------------------- registry (indexer-free reads)
function getBasketsCount() external view returns (uint256) {
return _baskets.length;
}
function getBasketAt(uint256 index) external view returns (address) {
return _baskets[index];
}
function getAllBaskets() external view returns (address[] memory) {
return _baskets;
}
// ---------------------------------------------------------------- owner controls
function setAssetAllowed(address asset, bool allowed) public onlyOwner {
if (asset == address(0)) revert ZeroAddress();
isAssetAllowed[asset] = allowed;
emit AssetAllowed(asset, allowed);
}
function setAssetsAllowed(address[] calldata assets, bool allowed) external onlyOwner {
for (uint256 i; i < assets.length; ++i) {
setAssetAllowed(assets[i], allowed);
}
}
function setTreasury(address treasury_) external onlyOwner {
if (treasury_ == address(0)) revert ZeroAddress();
treasury = treasury_;
emit TreasuryUpdated(treasury_);
}
function setRouter(address router_) external onlyOwner {
router = router_;
emit RouterUpdated(router_);
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
}[
{
"type": "constructor",
"inputs": [
{
"name": "treasury_",
"type": "address",
"internalType": "address"
},
{
"name": "router_",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "AssetNotAllowed",
"type": "error",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "DuplicateAsset",
"type": "error",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "EmptyString",
"type": "error",
"inputs": []
},
{
"name": "EnforcedPause",
"type": "error",
"inputs": []
},
{
"name": "ExpectedPause",
"type": "error",
"inputs": []
},
{
"name": "FailedDeployment",
"type": "error",
"inputs": []
},
{
"name": "FeeTooHigh",
"type": "error",
"inputs": []
},
{
"name": "InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "InvalidAssetCount",
"type": "error",
"inputs": []
},
{
"name": "LengthMismatch",
"type": "error",
"inputs": []
},
{
"name": "OwnableInvalidOwner",
"type": "error",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "OwnableUnauthorizedAccount",
"type": "error",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "UnsupportedDecimals",
"type": "error",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "WeightsMustSumToBps",
"type": "error",
"inputs": []
},
{
"name": "ZeroAddress",
"type": "error",
"inputs": []
},
{
"name": "ZeroWeight",
"type": "error",
"inputs": []
},
{
"name": "AssetAllowed",
"type": "event",
"inputs": [
{
"name": "asset",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "allowed",
"type": "bool",
"indexed": false,
"internalType": "bool"
}
],
"anonymous": false
},
{
"name": "BasketCreated",
"type": "event",
"inputs": [
{
"name": "basket",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "creator",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "assets",
"type": "address[]",
"indexed": false,
"internalType": "address[]"
},
{
"name": "weightsBps",
"type": "uint256[]",
"indexed": false,
"internalType": "uint256[]"
},
{
"name": "creatorFeeBps",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "mode",
"type": "uint8",
"indexed": false,
"internalType": "enum Mode"
}
],
"anonymous": false
},
{
"name": "OwnershipTransferred",
"type": "event",
"inputs": [
{
"name": "previousOwner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "newOwner",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Paused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "RouterUpdated",
"type": "event",
"inputs": [
{
"name": "router",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "TreasuryUpdated",
"type": "event",
"inputs": [
{
"name": "treasury",
"type": "address",
"indexed": true,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "Unpaused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_ASSETS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_CREATOR_FEE_BPS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MAX_DECIMALS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "MIN_ASSETS",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "createBasket",
"type": "function",
"inputs": [
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "symbol",
"type": "string",
"internalType": "string"
},
{
"name": "assets",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "weightsBps",
"type": "uint256[]",
"internalType": "uint256[]"
},
{
"name": "creatorFeeBps",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "mode",
"type": "uint8",
"internalType": "enum Mode"
}
],
"outputs": [
{
"name": "basket",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "nonpayable"
},
{
"name": "getAllBaskets",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address[]",
"internalType": "address[]"
}
],
"stateMutability": "view"
},
{
"name": "getBasketAt",
"type": "function",
"inputs": [
{
"name": "index",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "getBasketsCount",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "implementation",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "isAssetAllowed",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "isBasket",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "pause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "paused",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "renounceOwnership",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "router",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "setAssetAllowed",
"type": "function",
"inputs": [
{
"name": "asset",
"type": "address",
"internalType": "address"
},
{
"name": "allowed",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setAssetsAllowed",
"type": "function",
"inputs": [
{
"name": "assets",
"type": "address[]",
"internalType": "address[]"
},
{
"name": "allowed",
"type": "bool",
"internalType": "bool"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setRouter",
"type": "function",
"inputs": [
{
"name": "router_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setTreasury",
"type": "function",
"inputs": [
{
"name": "treasury_",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "treasury",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "unpause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
}
]0x60a0346101bd57601f61491438819003918201601f19168301916001600160401b038311848410176101875780849260409485528339810103126101bd57610052602061004b836101c1565b92016101c1565b9033156101aa575f8054336001600160a01b0319821681178355604051939290916001600160a01b0316907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09080a36001600160a01b031691821561019b57600180546001600160a01b03199081168517909155600280549091166001600160a01b039290921691821790559061353e8082016001600160401b038111838210176101875782916113d6833903905ff0801561017c576001600160a01b0316608052604051917f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d15f80a27f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc805f80a261120090816101d6823960805181818161081f0152610ec80152f35b6040513d5f823e3d90fd5b634e487b7160e01b5f52604160045260245ffd5b63d92e233d60e01b5f5260045ffd5b631e4fbdf760e01b5f525f60045260245ffd5b5f80fd5b51906001600160a01b03821682036101bd5756fe6080806040526004361015610012575f80fd5b5f905f3560e01c9081630417cf8e14610f9a57508063249d39e914610f7e578063260a220b14610f635780633f4ba83a14610ef75780635c60da1b14610eb35780635c975abb14610e8f57806361d027b314610e675780636fc5cbcb146106ef578063715018a61461069557806376b1d08f146106795780638456cb59146106185780638d026c15146105fa5780638da5cb5b146105d35780639469bf8f146105945780639c5ee80b1461055c578063a844a13414610540578063b6ae037114610478578063c0d7865514610410578063e53c045614610376578063eb44d48214610337578063f0f44260146102be578063f11321fd146101d7578063f2fde38b146101515763f887ea4014610126575f80fd5b3461014e578060031936011261014e576002546040516001600160a01b039091168152602090f35b80fd5b503461014e57602036600319011261014e5761016b611012565b610173611187565b6001600160a01b031680156101c35781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b503461014e57604036600319011261014e5760043567ffffffffffffffff81116102ba57610209903690600401610fe1565b9061021261103c565b9061021b611187565b81151590845b84811061022c578580f35b61023f61023a828785611085565b611095565b610247611187565b6001600160a01b031680156102ab5790816001928852600360205261027b8660408a209060ff801983541691151516179055565b7fa918a4160e8216eca57d47b5ff3d7d37f630f73f4df2077816c15786f8fe296e6020604051878152a201610221565b63d92e233d60e01b8752600487fd5b5080fd5b503461014e57602036600319011261014e576102d8611012565b6102e0611187565b6001600160a01b0316801561032857600180546001600160a01b031916821790557f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d18280a280f35b63d92e233d60e01b8252600482fd5b503461014e57602036600319011261014e5760209060ff906040906001600160a01b03610362611012565b168152600484522054166040519015158152f35b503461014e57604036600319011261014e57610390611012565b61039861103c565b906103a1611187565b6001600160a01b03169081156104015760207fa918a4160e8216eca57d47b5ff3d7d37f630f73f4df2077816c15786f8fe296e91838552600382526103f581604087209060ff801983541691151516179055565b6040519015158152a280f35b63d92e233d60e01b8352600483fd5b503461014e57602036600319011261014e5761042a611012565b610432611187565b600280546001600160a01b0319166001600160a01b039290921691821790557f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc808280a280f35b503461014e578060031936011261014e5760405180602060055491828152018091600585527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090855b81811061052157505050826104d791038361104b565b604051928392602084019060208552518091526040840192915b8181106104ff575050500390f35b82516001600160a01b03168452859450602093840193909201916001016104f1565b82546001600160a01b03168452602090930192600192830192016104c1565b503461014e578060031936011261014e57602060405160648152f35b503461014e57602036600319011261014e57602061057b60043561114f565b905460405160039290921b1c6001600160a01b03168152f35b503461014e57602036600319011261014e5760209060ff906040906001600160a01b036105bf611012565b168152600384522054166040519015158152f35b503461014e578060031936011261014e57546040516001600160a01b039091168152602090f35b503461014e578060031936011261014e576020600554604051908152f35b503461014e578060031936011261014e57610631611187565b6106396111ad565b805460ff60a01b1916600160a01b1781556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a180f35b503461014e578060031936011261014e576020604051600a8152f35b503461014e578060031936011261014e576106ae611187565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610c3e5760c0366003190112610c3e5760043567ffffffffffffffff8111610c3e57610721903690600401610fb3565b909160243567ffffffffffffffff8111610c3e57610743903690600401610fb3565b91909360443567ffffffffffffffff8111610c3e57610766903690600401610fe1565b60649391933567ffffffffffffffff8111610c3e57610789903690600401610fe1565b959093600260a4351015610c3e5761079f6111ad565b600283108015610e5d575b610e4e57828703610e3f57606460843511610e305787158015610e28575b610e19576107d58361106d565b976107e3604051998a61104b565b838952601f196107f28561106d565b013660208b01375f805b858210610c9c57612710915003610c8d576e5af43d82803e903d91602b57fd5bf37f0000000000000000000000000000000000000000000000000000000000000000763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b1760205260018060a01b03603760095ff016988915610c7e5760405190610100820182811067ffffffffffffffff821117610c6a576040526108a83684866110a9565b82526108b536868e6110a9565b6020830152336040830152608435606083015260a43560808301526108d98661106d565b6108e6604051918261104b565b86815260208101368860051b8c0111610c3e578a905b8860051b8c018210610c5257505060a08301526109188a61106d565b610925604051918261104b565b8a815260208101368c60051b8b0111610c3e5789905b8c60051b8b018210610c4257505060c083015260e0820152893b15610c3e5760405190633ce994ef60e01b825260206004830152818b6109a261098c845161010060248601526101248501906110ef565b60208501518482036023190160448601526110ef565b60408401516001600160a01b031660648401526060840151608484015260808401519093906109d59060a485019061112e565b60a0810151936023198482030160c4850152602080865192838152019501905f5b818110610c175750505060c0810151936023198482030160e4850152602080865192838152019501905f5b818110610bf75750505060e001519260231983820301610104840152602080855192838152019401905f5b818110610bd657505050815f81819503925af18015610bcb57610bb6575b5060055468010000000000000000811015610ba25792610ae0610aed9360c09c938c610a9e88600160209a0160055561114f565b81546001600160a01b0360039290921b91821b191692901b9190911790558c8952600487526040808a20805460ff19166001179055518e81529d8e0191611167565b918b8303858d0152611167565b88810360408a0152828152019390825b818110610b7c5750505085830360608701528383526001600160fb1b03841161014e5750846020809686947f7a2cf59855660ec51830ca1fa659846add0fff1341608a8738bbdcc5e4da4621948760051b90848301376084356080830152610b6a60a0830160a43561112e565b339660051b01030190a3604051908152f35b909194602080600192838060a01b03610b948a611028565b168152019601929101610afd565b634e487b7160e01b86526041600452602486fd5b610bc39195505f9061104b565b5f935f610a6a565b6040513d5f823e3d90fd5b925092509260208060019260ff875116815201940191019084928e92610a4c565b929450925093602080600192875181520195019101908e92869492610a21565b929450925093602080600192838060a01b0388511681520195019101908e928694926109f6565b5f80fd5b813581526020918201910161093b565b60208091610c5f84611028565b8152019101906108fc565b634e487b7160e01b5f52604160045260245ffd5b63b06ebf3d60e01b5f5260045ffd5b63dd5edb5760e01b5f5260045ffd5b6001600160a01b03610cb261023a84898d611085565b1690815f52600360205260ff60405f20541615610e0657610cd4838c8b611085565b3515610df757610ce5838c8b611085565b358101809111610de357915f5b818110610dab575060405163313ce56760e01b8152602081600481865afa8015610bcb575f90610d6f575b60ff9150169160188311610d5d57508b51811015610d495760019160208d8360051b01015201906107fc565b634e487b7160e01b5f52603260045260245ffd5b6349acbd3560e01b5f5260045260245ffd5b506020813d8211610da3575b81610d886020938361104b565b81010312610c3e575160ff81168103610c3e5760ff90610d1d565b3d9150610d7b565b828b610dc261023a848c60018060a01b0394611085565b1614610dd057600101610cf2565b8263437a40b160e01b5f5260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6319a2a9bd60e01b5f5260045ffd5b50630188053b60e41b5f5260045260245ffd5b63ecd7b0d160e01b5f5260045ffd5b5081156107c8565b63cd4e616760e01b5f5260045ffd5b631fec674760e31b5f5260045ffd5b634b454d1360e11b5f5260045ffd5b50600a83116107aa565b34610c3e575f366003190112610c3e576001546040516001600160a01b039091168152602090f35b34610c3e575f366003190112610c3e57602060ff5f5460a01c166040519015158152f35b34610c3e575f366003190112610c3e576040517f00000000000000000000000000000000000000000000000000000000000000006001600160a01b03168152602090f35b34610c3e575f366003190112610c3e57610f0f611187565b5f5460ff8160a01c1615610f545760ff60a01b19165f556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a1005b638dfc202b60e01b5f5260045ffd5b34610c3e575f366003190112610c3e57602060405160028152f35b34610c3e575f366003190112610c3e5760206040516127108152f35b34610c3e575f366003190112610c3e5780601860209252f35b9181601f84011215610c3e5782359167ffffffffffffffff8311610c3e5760208381860195010111610c3e57565b9181601f84011215610c3e5782359167ffffffffffffffff8311610c3e576020808501948460051b010111610c3e57565b600435906001600160a01b0382168203610c3e57565b35906001600160a01b0382168203610c3e57565b602435908115158203610c3e57565b90601f8019910116810190811067ffffffffffffffff821117610c6a57604052565b67ffffffffffffffff8111610c6a5760051b60200190565b9190811015610d495760051b0190565b356001600160a01b0381168103610c3e5790565b92919267ffffffffffffffff8211610c6a57604051916110d3601f8201601f19166020018461104b565b829481845281830111610c3e578281602093845f960137010152565b91908251928382525f5b848110611119575050825f602080949584010152601f8019910116010190565b806020809284010151828286010152016110f9565b90600282101561113b5752565b634e487b7160e01b5f52602160045260245ffd5b600554811015610d495760055f5260205f2001905f90565b908060209392818452848401375f828201840152601f01601f1916010190565b5f546001600160a01b0316330361119a57565b63118cdaa760e01b5f523360045260245ffd5b60ff5f5460a01c166111bb57565b63d93c066560e01b5f5260045ffdfea26469706673582212209df1720882963198a06e47503a01e5e7fb2d33847db711e2b2e60b32f0f20a9d64736f6c634300081a00336080604052346102d6576100116102da565b6100196102da565b81516001600160401b0381116101e957600354600181811c911680156102cc575b60208210146101cb57601f8111610269575b50602092601f821160011461020857928192935f926101fd575b50508160011b915f199060031b1c1916176003555b80516001600160401b0381116101e957600454600181811c911680156101df575b60208210146101cb57601f8111610168575b50602091601f8211600114610108579181925f926100fd575b50508160011b915f199060031b1c1916176004555b6001600555600160ff19601254161760125560405161324190816102fd8239f35b015190505f806100c7565b601f1982169260045f52805f20915f5b85811061015057508360019510610138575b505050811b016004556100dc565b01515f1960f88460031b161c191690555f808061012a565b91926020600181928685015181550194019201610118565b60045f527f8a35acfbc15ff81a39ae7d344fd709f28e8600b4aa8c65c6b64bfe7fe36bd19b601f830160051c810191602084106101c1575b601f0160051c01905b8181106101b657506100ae565b5f81556001016101a9565b90915081906101a0565b634e487b7160e01b5f52602260045260245ffd5b90607f169061009c565b634e487b7160e01b5f52604160045260245ffd5b015190505f80610066565b601f1982169360035f52805f20915f5b8681106102515750836001959610610239575b505050811b0160035561007b565b01515f1960f88460031b161c191690555f808061022b565b91926020600181928685015181550194019201610218565b60035f527fc2575a0e9e593c00f959f8c92f12db2869c3395a3b0502d05e2516446f71f85b601f830160051c810191602084106102c2575b601f0160051c01905b8181106102b7575061004c565b5f81556001016102aa565b90915081906102a1565b90607f169061003a565b5f80fd5b60405190602082016001600160401b038111838210176101e9576040525f825256fe60808060405260043610156100a9575b50361561001a575f80fd5b6006546040516303e21fa960e61b815290602090829060049082906001600160a01b03165afa90811561009e575f9161006f575b506001600160a01b0316330361006057005b63867783b760e01b5f5260045ffd5b610091915060203d602011610097575b6100898183611f79565b81019061291e565b5f61004e565b503d61007f565b6040513d5f823e3d90fd5b5f3560e01c90816302d05d3f14611e015750806306fdde0314611de6578063095ea7b314611d6457806317773ebb14611d4757806318160ddd14611d2a5780631fcd308014611d0d57806322acb86714611cf257806323b872dd14611c13578063249d39e914611bf7578063295a521214611bd0578063313ce56714611bb5578063370158ea14611a845780633a474fd014611a345780633ce994ef146113b45780633d61b286146112145780634cdad506146111f55780635b15490814610cfa57806367e4ac2c14610ccb5780636f8cbb0014610c9c57806370a0823114610c65578063798a6ca514610b9b57806395d89b4114610b6c5780639cca923814610b34578063a0712d6814610938578063a0821be31461090d578063a9059cbb146108dc578063af635c28146104e0578063b3d7f6b9146104ad578063be37822814610492578063c45a01551461046a578063d294f093146103dd578063db006a75146102ec578063dd62ed3e1461029c578063e0f8003d146102645763fd215c3b14610236575f61000f565b34610260576020366003190112610260576040610254600435612bb6565b82519182526020820152f35b5f80fd5b34610260576020366003190112610260576001600160a01b03610285611e63565b165f52600f602052602060405f2054604051908152f35b34610260576040366003190112610260576102b5611e63565b6102bd611e79565b6001600160a01b039182165f908152600160209081526040808320949093168252928352819020549051908152f35b3461026057602036600319011261026057600435610308612ca0565b80156103ce57610317816128a0565b6103218233612cc0565b600a545f5b8181106103835761037f83857f6b921527f65949c80fab346e1e330b442e353b32e7b29f428d3d0c7766dd91526040518061036385339583612886565b0390a26001600555604051918291602083526020830190611e8f565b0390f35b80610390600192856121b4565b5161039c575b01610326565b6103c96103a882612153565b848060a01b0391549060031b1c166103c083876121b4565b519033906130ba565b610396565b639811e0c760e01b5f5260045ffd5b34610260575f366003190112610260576103f5612ca0565b335f52600d60205260405f2054801561045b57602090335f52600d82525f6040812055610423813330612be3565b6040518181527f9493e5bbe4e8e0ac67284469a2d677403d0378a85a59e341d3abc433d0d9a209833392a26001600555604051908152f35b6312d37ee560e31b5f5260045ffd5b34610260575f366003190112610260576006546040516001600160a01b039091168152602090f35b34610260575f366003190112610260576020604051601e8152f35b346102605760203660031901126102605761037f6104cc600435612abf565b604051918291602083526020830190611e8f565b34610260576060366003190112610260576004356044356104ff612ca0565b60ff6009541660028110156108c8576001036108b9578042116108aa5781156103ce576001600160a01b03610532612f31565b6040516315ab88c960e31b81529116602082600481845afa91821561009e575f92610889575b50610562846128a0565b9061056d8533612cc0565b4793600a549260405194610582606087611f79565b600286526040366020880137610597866121a4565b6001600160a01b0390911690525f5b84811061063657876105b888476129b7565b6024358110610627575f80808084335af16105d1612a80565b50156106185760209160405190815281838201527f786875e1cfb7304a0cb0e3672e281b2d4890f432fdd4c07fc44d687612d5296360403392a26001600555604051908152f35b630db2c7f160e31b5f5260045ffd5b6307dd37f760e41b5f5260045ffd5b61064081836121b4565b51156108815761064f81612153565b905460039190911b1c6001600160a01b031661066a87612197565b5261067481612153565b905460039190911b1c6001600160a01b031661069082846121b4565b5160405163095ea7b360e01b60208083019182526001600160a01b03891660248401526044808401949094529282529091905f906106cf606485611f79565b83519082865af15f513d82610865575b50501561082c575b50506106f381836121b4565b5190604051916318cbafe560e01b835260048301525f602483015260a060448301525f828061072560a482018b611ecf565b306064830152876084830152038183895af191821561009e5760019261080c575b5061075081612153565b838060a01b0391549060031b1c1660405160205f81830163095ea7b360e01b81528960248501528160448501526044845261078c606485611f79565b83519082865af15f513d826107f1575b5050156107ad575b50505b016105a6565b6107ea916107e560405163095ea7b360e01b60208201528960248201525f6044820152604481526107df606482611f79565b82613153565b613153565b89806107a4565b9091506108055750813b15155b8c8061079c565b84146107fe565b610827903d805f833e61081f8183611f79565b81019061293d565b610746565b61085e916107e560405163095ea7b360e01b60208201528860248201525f6044820152604481526107df606482611f79565b88806106e7565b9091506108795750813b15155b8b806106df565b600114610872565b6001906107a7565b6108a391925060203d602011610097576100898183611f79565b9084610558565b631ab7da6b60e01b5f5260045ffd5b632a580d6d60e01b5f5260045ffd5b634e487b7160e01b5f52602160045260245ffd5b34610260576040366003190112610260576109026108f8611e63565b6024359033612be3565b602060405160018152f35b3461026057602036600319011261026057602061093061092b611e63565b6129ff565b604051908152f35b3461026057602036600319011261026057600435610954612ca0565b620f42408110610b255761096781612abf565b90600a545f5b8181106109d657602083857faad17e6ee2be50f5e4fb7d8374627b2d21b534984e88fd304081138e27eb776c6109a38333612fa6565b92604051908152838582015260606040820152806109c633946060830190611e8f565b0390a26001600555604051908152f35b6109df81612153565b90546040516370a0823160e01b815230600482015260039290921b1c6001600160a01b031690602081602481855afa90811561009e575f91610af4575b50610a62610a2a84886121b4565b51604051906323b872dd60e01b6020830152336024830152306044830152606482015260648152610a5c608482611f79565b83613153565b6040516370a0823160e01b815230600482015290602082602481865afa801561009e575f90610ac1575b610a9692506129b7565b610aa083876121b4565b5103610aaf575060010161096d565b6335822d6b60e11b5f5260045260245ffd5b506020823d8211610aec575b81610ada60209383611f79565b8101031261026057610a969151610a8c565b3d9150610acd565b90506020813d8211610b1d575b81610b0e60209383611f79565b81010312610260575186610a1c565b3d9150610b01565b63638b396160e01b5f5260045ffd5b34610260576020366003190112610260576001600160a01b03610b55611e63565b165f52600d602052602060405f2054604051908152f35b34610260575f3660031901126102605761037f610b8761203f565b604051918291602083526020830190611e24565b3461026057602036600319011261026057610bb4611e63565b610bbc612ca0565b335f52600e60205260405f2060018060a01b0382165f5260205260405f2054801561045b57335f908152600e602090815260408083206001600160a01b03909516808452948252808320839055600f82529091208054919391610c209084906129b7565b9055610c2d8233836130ba565b6040518281527f963661f8d3573d0cf278045f1bab03849ad3782a891d94ee5352c9729c15d17e843392a36001600555604051908152f35b34610260576020366003190112610260576001600160a01b03610c86611e63565b165f525f602052602060405f2054604051908152f35b34610260575f3660031901126102605761037f610cb7612219565b604051918291602083526020830190611f0b565b34610260575f3660031901126102605761037f610ce66121c8565b604051918291602083526020830190611ecf565b604036600319011261026057602435610d11612ca0565b60ff6009541660028110156108c8576001036108b9578042116108aa5734156103ce576001600160a01b03610d44612f31565b166040516315ab88c960e31b8152602081600481855afa90811561009e575f916111d6575b50600a549060025493610d7b83612121565b923495801590815f14610ff6575f975f1984018481119891895b610fe257818b1015610deb576001610de28b92610ddb8e8d610dd482612710610dcd610dc08361217f565b90549060031b1c3461280f565b04926121b4565b528d6121b4565b51906129b7565b9b019a90610d95565b9294979598909193969950610fe257610e0490856121b4565b525b6040515f1997610e17606083611f79565b600282526040366020840137610e2c82612197565b6001600160a01b0390911690525f5b868110610ea75788620f42408110610b2557610e578133612fa6565b60043581106106275760209160405190348252838201528160408201527fc10522e16dc223f3c40a457344e926cd77b260b4d064dbf28c86566c23d733f760603392a26001600555604051908152f35b610eca610eb382612153565b905460039190911b1c6001600160a01b03166129ff565b610ed382612153565b905460039190911b1c6001600160a01b0316610eee846121a4565b52610ef982876121b4565b515f8a6040519283808093637ff36ab560e01b825285600483015260806024830152610f28608483018b611ecf565b9030604484015260648301520391895af1801561009e57610fca575b50610f5a81610f55610eb385612153565b6129b7565b90858815610fbc575050610fa290610f9c610f748461217f565b90549060031b1c610f9660ff610f89876129c4565b90549060031b1c166129ee565b9061280f565b90612dda565b898110610fb3575b50600101610e3b565b98506001610faa565b610fc592612e93565b610fa2565b610fdd903d805f833e61081f8183611f79565b610f44565b634e487b7160e01b5f52601160045260245ffd5b939161100781989798949294612121565b935f95604051611018606082611f79565b60028152604036602083013761102d81612197565b6001600160a01b03871690525f905b8482106110c35750505f995f1984018481119a8b5b610fe257818d10156110a25760016110998d928f808f8f8f9061108461107d610ddb96611089946121b4565b513461280f565b612b98565b61109383836121b4565b526121b4565b9d019c90611051565b94999750929750939890949950610fe2576110bd90856121b4565b52610e06565b90976110d1899c9b9c612153565b905460039190911b1c6001600160a01b03166110ec836121a4565b5260405163d06ca61f60e01b8152670de0b6b3a76400006004820152604060248201525f818d81806111216044820189611ecf565b03915afa90811561009e575f916111bc575b5080515f198101908111610fe25761114a916121b4565b51611157610eb38b612153565b91670de0b6b3a7640000830292808404670de0b6b3a76400001490151715610fe2576111886111ac92600194612b98565b806111b75750825b61119a8c8c6121b4565b526111a58b8b6121b4565b5190612879565b9801909a999a61103c565b611190565b6111d091503d805f833e61081f8183611f79565b8d611133565b6111ef915060203d602011610097576100898183611f79565b83610d69565b346102605760203660031901126102605761037f6104cc6004356128a0565b3461026057602036600319011261026057600435611230612ca0565b80156103ce5761123f816128a0565b6112498233612cc0565b600a545f5b81811061128b5761037f83857f6b921527f65949c80fab346e1e330b442e353b32e7b29f428d3d0c7766dd91526040518061036385339583612886565b80611298600192856121b4565b51156113af576112cb6112aa82612153565b848060a01b0391549060031b1c166112c283876121b4565b51903390612d44565b156112d7575b0161124e565b6112e181856121b4565b51335f52600e60205260405f206112f783612153565b858060a01b0391549060031b1c16848060a01b03165f5260205261132060405f20918254612879565b905561132c81856121b4565b5161133682612153565b848060a01b0391549060031b1c165f52600f60205261135a60405f20918254612879565b905561136581612153565b838060a01b0391549060031b1c1661137d82866121b4565b516040519081527f0ad7f783a10a39fd56cfcd05a1f458f7d92df291023b237ca8597a82524b51b760203392a36112d1565b6112d1565b346102605760203660031901126102605760043567ffffffffffffffff8111610260578060040161010060031983360301126102605760125460ff8116611a265760ff1916600117601255600680546001600160a01b0319163317905560448201906001600160a01b03611427836127c5565b166bffffffffffffffffffffffff60a01b6007541617600755606483013560085560848301359260028410156102605760ff196009541660ff85161760095561147360a48201836127d9565b9067ffffffffffffffff821161173357600160401b821161173357600a5482600a558083106119ec575b50600a5f525f5b8281106119b1575050506114bb60c48201836127d9565b9067ffffffffffffffff821161173357600160401b821161173357600b5482600b55808310611977575b50600b5f525f5b8281106119435750505061150360e48201836127d9565b9067ffffffffffffffff821161173357600160401b821161173357600c5482600c558083106118c4575b5090600c5f528060051c905f5b8281106118825750601f198116900380611827575b50505061155c8280612846565b9067ffffffffffffffff821161173357611577601054611f41565b601f81116117c9575b505f90601f83116001146117525791806115bc9594926024945f92611747575b50508160011b915f199060031b1c1916176010555b0190612846565b9067ffffffffffffffff8211611733576115d7601154611f41565b601f81116116d5575b505f90601f8311600114611661576116159392915f9183611656575b50508160011b915f199060031b1c1916176011556127c5565b6116226040518093611ec2565b6001600160a01b03169033907f2e7cdee40b0f3a0e4ee540324e09da72da9dfefa9c0926d952be5ae82737120290602090a3005b0135905085806115fc565b601f1983169160115f525f805160206131cc833981519152925f5b8181106116bd5750916001939185611615979694106116a4575b505050811b016011556127c5565b01355f19600384901b60f8161c19169055858080611696565b9193602060018192878701358155019501920161167c565b6117189060115f52601f840160051c5f805160206131cc83398151915201906020851061171e575b601f0160051c5f805160206131cc8339815191520190612822565b846115e0565b5f805160206131cc83398151915291506116fd565b634e487b7160e01b5f52604160045260245ffd5b0135905088806115a0565b601f1983169160105f525f805160206131ec833981519152925f5b8181106117b157509260019285926024966115bc99989610611798575b505050811b016010556115b5565b01355f19600384901b60f8161c1916905588808061178a565b9193602060018192878701358155019501920161176d565b61180c9060105f52601f840160051c5f805160206131ec833981519152019060208510611812575b601f0160051c5f805160206131ec8339815191520190612822565b86611580565b5f805160206131ec83398151915291506117f1565b915f925f5b81811061184e575050505f805160206131ac833981519152015584808061154f565b90919360206118786001928461186389612838565b919060ff809160031b9316831b921b19161790565b950192910161182c565b5f805b602081106118a757505f805160206131ac83398151915282015560010161153a565b949060206118bb6001928861186386612838565b92019501611885565b61190390601f80850160051c9181861680611909575b500160051c5f805160206131ac83398151915201905f805160206131ac83398151915201612822565b8661152d565b7fdf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c68401908154905f199060200360031b1c1690558a6118da565b60019060208335930192817f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db90155016114ec565b600b5f526119ab907f0175b7a638427703f0dbe7bb9bbf987a2551717b34e79f33b5b1008d1fa01db9908101908401612822565b866114e5565b60019060206119bf846127c5565b930192817fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a80155016114a4565b600a5f52611a20907fc65a7bb8d6351c1cf70c95a316cc6a92839c986682d98bc35f958f4883f9d2a8908101908401612822565b8661149d565b62dc149f60e41b5f5260045ffd5b3461026057604036600319011261026057611a4d611e63565b611a55611e79565b6001600160a01b039182165f908152600e60209081526040808320949093168252928352819020549051908152f35b34610260575f36600319011261026057600a54611aa081612121565b905f5b818110611b825782600160a01b60019003600754169060095460ff16906008549160025492611ad0611f9b565b93611ad961203f565b95611ae26121c8565b91611aeb6120c1565b93611af4612219565b95604051998a996101408b526101408b01611b0e91611e24565b8a810360208c0152611b1f91611e24565b9360408a015260608901611b3291611ec2565b608088015260a087015285810360c0870152611b4d91611ecf565b84810360e0860152611b5e91611e8f565b838103610100850152611b7091611f0b565b82810361012084015261037f91611e8f565b80611ba4611b91600193612153565b848060a01b0391549060031b1c166129ff565b611bae82866121b4565b5201611aa3565b34610260575f36600319011261026057602060405160128152f35b34610260575f36600319011261026057602060ff60095416611bf56040518092611ec2565bf35b34610260575f3660031901126102605760206040516127108152f35b3461026057606036600319011261026057611c2c611e63565b611c34611e79565b6001600160a01b0382165f818152600160209081526040808320338452909152902054909260443592915f198110611c72575b506109029350612be3565b838110611cd7578415611cc4573315611cb157610902945f52600160205260405f2060018060a01b0333165f526020528360405f209103905584611c67565b634a1406b160e11b5f525f60045260245ffd5b63e602df0560e01b5f525f60045260245ffd5b8390637dc7a0d960e11b5f523360045260245260445260645ffd5b34610260575f3660031901126102605761037f6104cc6120c1565b34610260575f366003190112610260576020604051620f42408152f35b34610260575f366003190112610260576020600254604051908152f35b34610260575f366003190112610260576020600854604051908152f35b3461026057604036600319011261026057611d7d611e63565b602435903315611cc4576001600160a01b0316908115611cb157335f52600160205260405f20825f526020528060405f20556040519081527f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560203392a3602060405160018152f35b34610260575f3660031901126102605761037f610b87611f9b565b34610260575f366003190112610260576007546001600160a01b03168152602090f35b91908251928382525f5b848110611e4e575050825f602080949584010152601f8019910116010190565b80602080928401015182828601015201611e2e565b600435906001600160a01b038216820361026057565b602435906001600160a01b038216820361026057565b90602080835192838152019201905f5b818110611eac5750505090565b8251845260209384019390920191600101611e9f565b9060028210156108c85752565b90602080835192838152019201905f5b818110611eec5750505090565b82516001600160a01b0316845260209384019390920191600101611edf565b90602080835192838152019201905f5b818110611f285750505090565b825160ff16845260209384019390920191600101611f1b565b90600182811c92168015611f6f575b6020831014611f5b57565b634e487b7160e01b5f52602260045260245ffd5b91607f1691611f50565b90601f8019910116810190811067ffffffffffffffff82111761173357604052565b604051905f8260105491611fae83611f41565b80835292600181169081156120205750600114611fd4575b611fd292500383611f79565b565b5060105f90815290915f805160206131ec8339815191525b818310612004575050906020611fd292820101611fc6565b6020919350806001915483858901015201910190918492611fec565b60209250611fd294915060ff191682840152151560051b820101611fc6565b604051905f826011549161205283611f41565b8083529260018116908115612020575060011461207557611fd292500383611f79565b5060115f90815290915f805160206131cc8339815191525b8183106120a5575050906020611fd292820101611fc6565b602091935080600191548385890101520191019091849261208d565b60405190600b548083528260208101600b5f5260205f20925f5b8181106120f0575050611fd292500383611f79565b84548352600194850194879450602090930192016120db565b67ffffffffffffffff81116117335760051b60200190565b9061212b82612109565b6121386040519182611f79565b8281528092612149601f1991612109565b0190602036910137565b600a5481101561216b57600a5f5260205f2001905f90565b634e487b7160e01b5f52603260045260245ffd5b600b5481101561216b57600b5f5260205f2001905f90565b80511561216b5760200190565b80516001101561216b5760400190565b805182101561216b5760209160051b010190565b60405190600a548083528260208101600a5f5260205f20925f5b8181106121f7575050611fd292500383611f79565b84546001600160a01b03168352600194850194879450602090930192016121e2565b60405190600c548083528260208101600c5f5260205f20925f905b80601f83011061261d57611fd2945491818110612609575b8181106125f2575b8181106125db575b8181106125c4575b8181106125ae575b818110612597575b818110612580575b818110612569575b818110612552575b81811061253b575b818110612524575b81811061250d575b8181106124f6575b8181106124df575b8181106124c8575b8181106124b1575b81811061249a575b818110612483575b81811061246c575b818110612455575b81811061243e575b818110612427575b818110612410575b8181106123f9575b8181106123e2575b8181106123cb575b8181106123b4575b81811061239d575b818110612386575b81811061236f575b818110612358575b1061234a575b500383611f79565b60f81c81526020015f612342565b92602060019160ff8560f01c16815201930161233c565b92602060019160ff8560e81c168152019301612334565b92602060019160ff8560e01c16815201930161232c565b92602060019160ff8560d81c168152019301612324565b92602060019160ff8560d01c16815201930161231c565b92602060019160ff8560c81c168152019301612314565b92602060019160ff8560c01c16815201930161230c565b92602060019160ff8560b81c168152019301612304565b92602060019160ff8560b01c1681520193016122fc565b92602060019160ff8560a81c1681520193016122f4565b92602060019160ff8560a01c1681520193016122ec565b92602060019160ff8560981c1681520193016122e4565b92602060019160ff8560901c1681520193016122dc565b92602060019160ff8560881c1681520193016122d4565b92602060019160ff8560801c1681520193016122cc565b92602060019160ff8560781c1681520193016122c4565b92602060019160ff8560701c1681520193016122bc565b92602060019160ff8560681c1681520193016122b4565b92602060019160ff8560601c1681520193016122ac565b92602060019160ff8560581c1681520193016122a4565b92602060019160ff8560501c16815201930161229c565b92602060019160ff8560481c168152019301612294565b92602060019160ff8560401c16815201930161228c565b92602060019160ff8560381c168152019301612284565b92602060019160ff8560301c16815201930161227c565b92602060019160ff8560281c168152019301612274565b92602060019160ff85831c16815201930161226c565b92602060019160ff8560181c168152019301612264565b92602060019160ff8560101c16815201930161225c565b92602060019160ff8560081c168152019301612254565b92602060019160ff8516815201930161224c565b916020919350610400600191865460ff8116825260ff8160081c168583015260ff8160101c16604083015260ff8160181c16606083015260ff81861c16608083015260ff8160281c1660a083015260ff8160301c1660c083015260ff8160381c1660e083015260ff8160401c1661010083015260ff8160481c1661012083015260ff8160501c1661014083015260ff8160581c1661016083015260ff8160601c1661018083015260ff8160681c166101a083015260ff8160701c166101c083015260ff8160781c166101e083015260ff8160801c1661020083015260ff8160881c1661022083015260ff8160901c1661024083015260ff8160981c1661026083015260ff8160a01c1661028083015260ff8160a81c166102a083015260ff8160b01c166102c083015260ff8160b81c166102e083015260ff8160c01c1661030083015260ff8160c81c1661032083015260ff8160d01c1661034083015260ff8160d81c1661036083015260ff8160e01c1661038083015260ff8160e81c166103a083015260ff8160f01c166103c083015260f81c6103e0820152019401920185929391612234565b356001600160a01b03811681036102605790565b903590601e1981360301821215610260570180359067ffffffffffffffff821161026057602001918160051b3603831361026057565b81810292918115918404141715610fe257565b81811061282d575050565b5f8155600101612822565b3560ff811681036102605790565b903590601e1981360301821215610260570180359067ffffffffffffffff82116102605760200191813603831361026057565b91908201809211610fe257565b60409061289d939281528160208201520190611e8f565b90565b90600a54801561290f576128b381612121565b9260025490811561290a575f5b8381106128cd5750505050565b806128f9846128f36128e0600195612153565b868060a01b0391549060031b1c166129ff565b85612e93565b61290382896121b4565b52016128c0565b505050565b6338f6c55560e01b5f5260045ffd5b9081602091031261026057516001600160a01b03811681036102605790565b6020818303126102605780519067ffffffffffffffff821161026057019080601f8301121561026057815161297181612109565b9261297f6040519485611f79565b81845260208085019260051b82010192831161026057602001905b8282106129a75750505090565b815181526020918201910161299a565b91908203918211610fe257565b90600c5482101561216b57600c5f52600582901c5f805160206131ac8339815191520191601f1690565b60ff16604d8111610fe257600a0a90565b6040516370a0823160e01b8152306004820152906001600160a01b0316602082602481845afa90811561009e575f91612a4a575b61289d92505f52600f60205260405f2054906129b7565b90506020823d602011612a78575b81612a6560209383611f79565b810103126102605761289d915190612a33565b3d9150612a58565b3d15612aba573d9067ffffffffffffffff82116117335760405191612aaf601f8201601f191660200184611f79565b82523d5f602084013e565b606090565b90600a54801561290f57612ad281612121565b926002545f8115905b848110612ae9575050505050565b8115612b495780612b37612b16612b0160019461217f565b90549060031b1c610f9660ff610f89866129c4565b69021e19e0c9bab2400000612b2c81838a612e93565b918809151590612879565b612b41828a6121b4565b525b01612adb565b90506001612b6c612b5983612153565b838060a01b0391549060031b1c166129ff565b91612b88612b7b858588612e93565b855f958809151590612879565b612b92828a6121b4565b52612b43565b8115612ba2570490565b634e487b7160e01b5f52601260045260245ffd5b90612710612bc66008548461280f565b0491601e810290808204601e1490151715610fe257612710900490565b6001600160a01b0316908115612c8d576001600160a01b0316918215612c7a57815f525f60205260405f2054818110612c6157817fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef92602092855f525f84520360405f2055845f525f825260405f20818154019055604051908152a3565b8263391434e360e21b5f5260045260245260445260645ffd5b63ec442f0560e01b5f525f60045260245ffd5b634b637e8f60e11b5f525f60045260245ffd5b600260055414612cb1576002600555565b633ee5aeb560e01b5f5260045ffd5b9091906001600160a01b03168015612c8d57805f525f60205260405f2054838110612d2a576020845f94957fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef938587528684520360408620558060025403600255604051908152a3565b915063391434e360e21b5f5260045260245260445260645ffd5b919091803b15612dd35760405163a9059cbb60e01b602082019081526001600160a01b039490941660248201526044808201939093529182525f9283928390612d8e606482611f79565b51925af1612d9a612a80565b81612da3575090565b8051801592508215612db457505090565b8192509060209181010312610260576020015180151581036102605790565b5050505f90565b5f1969021e19e0c9bab240000082099169021e19e0c9bab2400000820291828085109403938085039414612e875783821115612e6f5769021e19e0c9bab2400000829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b50634e487b715f52156003026011186020526024601cfd5b509061289d9250612b98565b90915f198383099280830292838086109503948086039514612f245784831115612f0c5790829109815f0382168092046002816003021880820260020302808202600203028082026002030280820260020302808202600203028091026002030293600183805f03040190848311900302920304170290565b82634e487b715f52156003026011186020526024601cfd5b50509061289d9250612b98565b6006546040516303e21fa960e61b815290602090829060049082906001600160a01b03165afa90811561009e575f91612f87575b506001600160a01b03168015612f785790565b63179ce99f60e01b5f5260045ffd5b612fa0915060203d602011610097576100898183611f79565b5f612f65565b9190612fb181612bb6565b9091612fd1612fca612fc38486612879565b80936129b7565b80966130f6565b80612fdb57505050565b612fe590306130f6565b6006546040516361d027b360e01b815290602090829060049082906001600160a01b03165afa90811561009e577f5043a98101449b6485157a71d6e401ffa8f20e8c2a48f0c99205d619ae6774df916040915f9161309b575b5060018060a01b03600754165f52600d602052815f2061305f868254612879565b905560018060a01b031693845f52600d602052815f20613080858254612879565b905560018060a01b03600754169382519182526020820152a3565b6130b4915060203d602011610097576100898183611f79565b5f61303e565b60405163a9059cbb60e01b60208201526001600160a01b03929092166024830152604480830193909352918152611fd2916107e5606483611f79565b6001600160a01b0316908115612c7a577fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef6020826131375f94600254612879565b60025584845283825260408420818154019055604051908152a3565b905f602091828151910182855af11561009e575f513d6131a257506001600160a01b0381163b155b6131825750565b635274afe760e01b5f9081526001600160a01b0391909116600452602490fd5b6001141561317b56fedf6966c971051c3d54ec59162606531493a51404a002842f56009d7e5cf4a8c731ecc21a745e3968a04e9570e4425bc18fa8019c68028196b546d1669c200c681b6847dc741a1b0cd08d278845f9d819d87b734759afb55fe2de5cb82a9ae672a264697066735822122081f282cb8352c952c9a2c6424a995fba347290c844d81d0aff597d552c0bb54d64736f6c634300081a003300000000000000000000000061bc096649b58c95f54f6c9bc6d54b7cba535efe0000000000000000000000000000000000000000000000000000000000000000
0x6080806040526004361015610012575f80fd5b5f905f3560e01c9081630417cf8e14610f9a57508063249d39e914610f7e578063260a220b14610f635780633f4ba83a14610ef75780635c60da1b14610eb35780635c975abb14610e8f57806361d027b314610e675780636fc5cbcb146106ef578063715018a61461069557806376b1d08f146106795780638456cb59146106185780638d026c15146105fa5780638da5cb5b146105d35780639469bf8f146105945780639c5ee80b1461055c578063a844a13414610540578063b6ae037114610478578063c0d7865514610410578063e53c045614610376578063eb44d48214610337578063f0f44260146102be578063f11321fd146101d7578063f2fde38b146101515763f887ea4014610126575f80fd5b3461014e578060031936011261014e576002546040516001600160a01b039091168152602090f35b80fd5b503461014e57602036600319011261014e5761016b611012565b610173611187565b6001600160a01b031680156101c35781546001600160a01b03198116821783556001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08380a380f35b631e4fbdf760e01b82526004829052602482fd5b503461014e57604036600319011261014e5760043567ffffffffffffffff81116102ba57610209903690600401610fe1565b9061021261103c565b9061021b611187565b81151590845b84811061022c578580f35b61023f61023a828785611085565b611095565b610247611187565b6001600160a01b031680156102ab5790816001928852600360205261027b8660408a209060ff801983541691151516179055565b7fa918a4160e8216eca57d47b5ff3d7d37f630f73f4df2077816c15786f8fe296e6020604051878152a201610221565b63d92e233d60e01b8752600487fd5b5080fd5b503461014e57602036600319011261014e576102d8611012565b6102e0611187565b6001600160a01b0316801561032857600180546001600160a01b031916821790557f7dae230f18360d76a040c81f050aa14eb9d6dc7901b20fc5d855e2a20fe814d18280a280f35b63d92e233d60e01b8252600482fd5b503461014e57602036600319011261014e5760209060ff906040906001600160a01b03610362611012565b168152600484522054166040519015158152f35b503461014e57604036600319011261014e57610390611012565b61039861103c565b906103a1611187565b6001600160a01b03169081156104015760207fa918a4160e8216eca57d47b5ff3d7d37f630f73f4df2077816c15786f8fe296e91838552600382526103f581604087209060ff801983541691151516179055565b6040519015158152a280f35b63d92e233d60e01b8352600483fd5b503461014e57602036600319011261014e5761042a611012565b610432611187565b600280546001600160a01b0319166001600160a01b039290921691821790557f7aed1d3e8155a07ccf395e44ea3109a0e2d6c9b29bbbe9f142d9790596f4dc808280a280f35b503461014e578060031936011261014e5760405180602060055491828152018091600585527f036b6384b5eca791c62761152d0c79bb0604c104a5fb6f4eb0703f3154bb3db090855b81811061052157505050826104d791038361104b565b604051928392602084019060208552518091526040840192915b8181106104ff575050500390f35b82516001600160a01b03168452859450602093840193909201916001016104f1565b82546001600160a01b03168452602090930192600192830192016104c1565b503461014e578060031936011261014e57602060405160648152f35b503461014e57602036600319011261014e57602061057b60043561114f565b905460405160039290921b1c6001600160a01b03168152f35b503461014e57602036600319011261014e5760209060ff906040906001600160a01b036105bf611012565b168152600384522054166040519015158152f35b503461014e578060031936011261014e57546040516001600160a01b039091168152602090f35b503461014e578060031936011261014e576020600554604051908152f35b503461014e578060031936011261014e57610631611187565b6106396111ad565b805460ff60a01b1916600160a01b1781556040513381527f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a25890602090a180f35b503461014e578060031936011261014e576020604051600a8152f35b503461014e578060031936011261014e576106ae611187565b80546001600160a01b03198116825581906001600160a01b03167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e08280a380f35b5034610c3e5760c0366003190112610c3e5760043567ffffffffffffffff8111610c3e57610721903690600401610fb3565b909160243567ffffffffffffffff8111610c3e57610743903690600401610fb3565b91909360443567ffffffffffffffff8111610c3e57610766903690600401610fe1565b60649391933567ffffffffffffffff8111610c3e57610789903690600401610fe1565b959093600260a4351015610c3e5761079f6111ad565b600283108015610e5d575b610e4e57828703610e3f57606460843511610e305787158015610e28575b610e19576107d58361106d565b976107e3604051998a61104b565b838952601f196107f28561106d565b013660208b01375f805b858210610c9c57612710915003610c8d576e5af43d82803e903d91602b57fd5bf37f000000000000000000000000795d5a6d879b1c339c062b00adc702523b803c4a763d602d80600a3d3981f3363d3d373d3d3d363d7300000062ffffff8260881c16175f5260781b1760205260018060a01b03603760095ff016988915610c7e5760405190610100820182811067ffffffffffffffff821117610c6a576040526108a83684866110a9565b82526108b536868e6110a9565b6020830152336040830152608435606083015260a43560808301526108d98661106d565b6108e6604051918261104b565b86815260208101368860051b8c0111610c3e578a905b8860051b8c018210610c5257505060a08301526109188a61106d565b610925604051918261104b565b8a815260208101368c60051b8b0111610c3e5789905b8c60051b8b018210610c4257505060c083015260e0820152893b15610c3e5760405190633ce994ef60e01b825260206004830152818b6109a261098c845161010060248601526101248501906110ef565b60208501518482036023190160448601526110ef565b60408401516001600160a01b031660648401526060840151608484015260808401519093906109d59060a485019061112e565b60a0810151936023198482030160c4850152602080865192838152019501905f5b818110610c175750505060c0810151936023198482030160e4850152602080865192838152019501905f5b818110610bf75750505060e001519260231983820301610104840152602080855192838152019401905f5b818110610bd657505050815f81819503925af18015610bcb57610bb6575b5060055468010000000000000000811015610ba25792610ae0610aed9360c09c938c610a9e88600160209a0160055561114f565b81546001600160a01b0360039290921b91821b191692901b9190911790558c8952600487526040808a20805460ff19166001179055518e81529d8e0191611167565b918b8303858d0152611167565b88810360408a0152828152019390825b818110610b7c5750505085830360608701528383526001600160fb1b03841161014e5750846020809686947f7a2cf59855660ec51830ca1fa659846add0fff1341608a8738bbdcc5e4da4621948760051b90848301376084356080830152610b6a60a0830160a43561112e565b339660051b01030190a3604051908152f35b909194602080600192838060a01b03610b948a611028565b168152019601929101610afd565b634e487b7160e01b86526041600452602486fd5b610bc39195505f9061104b565b5f935f610a6a565b6040513d5f823e3d90fd5b925092509260208060019260ff875116815201940191019084928e92610a4c565b929450925093602080600192875181520195019101908e92869492610a21565b929450925093602080600192838060a01b0388511681520195019101908e928694926109f6565b5f80fd5b813581526020918201910161093b565b60208091610c5f84611028565b8152019101906108fc565b634e487b7160e01b5f52604160045260245ffd5b63b06ebf3d60e01b5f5260045ffd5b63dd5edb5760e01b5f5260045ffd5b6001600160a01b03610cb261023a84898d611085565b1690815f52600360205260ff60405f20541615610e0657610cd4838c8b611085565b3515610df757610ce5838c8b611085565b358101809111610de357915f5b818110610dab575060405163313ce56760e01b8152602081600481865afa8015610bcb575f90610d6f575b60ff9150169160188311610d5d57508b51811015610d495760019160208d8360051b01015201906107fc565b634e487b7160e01b5f52603260045260245ffd5b6349acbd3560e01b5f5260045260245ffd5b506020813d8211610da3575b81610d886020938361104b565b81010312610c3e575160ff81168103610c3e5760ff90610d1d565b3d9150610d7b565b828b610dc261023a848c60018060a01b0394611085565b1614610dd057600101610cf2565b8263437a40b160e01b5f5260045260245ffd5b634e487b7160e01b5f52601160045260245ffd5b6319a2a9bd60e01b5f5260045ffd5b50630188053b60e41b5f5260045260245ffd5b63ecd7b0d160e01b5f5260045ffd5b5081156107c8565b63cd4e616760e01b5f5260045ffd5b631fec674760e31b5f5260045ffd5b634b454d1360e11b5f5260045ffd5b50600a83116107aa565b34610c3e575f366003190112610c3e576001546040516001600160a01b039091168152602090f35b34610c3e575f366003190112610c3e57602060ff5f5460a01c166040519015158152f35b34610c3e575f366003190112610c3e576040517f000000000000000000000000795d5a6d879b1c339c062b00adc702523b803c4a6001600160a01b03168152602090f35b34610c3e575f366003190112610c3e57610f0f611187565b5f5460ff8160a01c1615610f545760ff60a01b19165f556040513381527f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa90602090a1005b638dfc202b60e01b5f5260045ffd5b34610c3e575f366003190112610c3e57602060405160028152f35b34610c3e575f366003190112610c3e5760206040516127108152f35b34610c3e575f366003190112610c3e5780601860209252f35b9181601f84011215610c3e5782359167ffffffffffffffff8311610c3e5760208381860195010111610c3e57565b9181601f84011215610c3e5782359167ffffffffffffffff8311610c3e576020808501948460051b010111610c3e57565b600435906001600160a01b0382168203610c3e57565b35906001600160a01b0382168203610c3e57565b602435908115158203610c3e57565b90601f8019910116810190811067ffffffffffffffff821117610c6a57604052565b67ffffffffffffffff8111610c6a5760051b60200190565b9190811015610d495760051b0190565b356001600160a01b0381168103610c3e5790565b92919267ffffffffffffffff8211610c6a57604051916110d3601f8201601f19166020018461104b565b829481845281830111610c3e578281602093845f960137010152565b91908251928382525f5b848110611119575050825f602080949584010152601f8019910116010190565b806020809284010151828286010152016110f9565b90600282101561113b5752565b634e487b7160e01b5f52602160045260245ffd5b600554811015610d495760055f5260205f2001905f90565b908060209392818452848401375f828201840152601f01601f1916010190565b5f546001600160a01b0316330361119a57565b63118cdaa760e01b5f523360045260245ffd5b60ff5f5460a01c166111bb57565b63d93c066560e01b5f5260045ffdfea26469706673582212209df1720882963198a06e47503a01e5e7fb2d33847db711e2b2e60b32f0f20a9d64736f6c634300081a0033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0xabe49f…2a3be5 | setAssetsAllowed | 18,426,778 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0x61bc…5efe | IN | BasketFactory | $0.000 ETH | 0.00025339 |
| Transaction Hash | Method | Block | Age | From | To | Amount | Token | ||
|---|---|---|---|---|---|---|---|---|---|
| no token transfers for this address yet | |||||||||
| Transaction Hash | Method | Block | Age | From | To | Type | Item | ||
|---|---|---|---|---|---|---|---|---|---|
| no NFT transfers for this address yet | |||||||||
| Txn Hash | Age | Event | Topics / Data |
|---|---|---|---|
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…d4233931 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…997e1730 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…62100b7d data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…43137cf1 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…f512be74 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…9f33f51d data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…1b153289 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…b4c95ec6 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…ef32f77c data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…f600c410 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…c40a114b data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…5f95e7bf data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…3ddf6958 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…82f86386 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…85c53c60 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…28e460e9 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…3146aef9 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…b948de79 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…101ac1a3 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…c94a9caa data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…b9803016 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…45e3c3f7 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…098c6f43 data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…509916fd data: 0x000000000000000000…00000001 |
| 0xabe49f…2a3be5 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa918a4…296e | [0] 0x000000000000…a9915da6 data: 0x000000000000000000…00000001 |
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 18,426,778 | 22 days agoFri, 24 Jul 2026 20:12:36 UTC | 0xa8ddf1…a86b8c | CREATE | 0x60a03461 | 0xae51…7232 | OUT | 0x795d…3c4a | 0 ETH |