// SPDX-License-Identifier: MIT
pragma solidity ^0.8.24;
import "@openzeppelin/contracts/token/ERC20/ERC20.sol";
import "@openzeppelin/contracts/token/ERC20/extensions/ERC20Burnable.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "@openzeppelin/contracts/utils/ReentrancyGuard.sol";
import "@openzeppelin/contracts/utils/Pausable.sol";
contract HollowToken is ERC20, ERC20Burnable, Ownable, ReentrancyGuard, Pausable {
uint256 public constant MAX_SUPPLY = 1_000_000_000 * 10 ** 18;
uint8 public constant CATEGORY_COUNT = 4;
uint256[4] public categoryAmount;
uint256[4] public categoryFee;
string[4] public categoryName;
uint256 public claimCooldown;
mapping(address => uint256) public lastClaimTimestamp;
event TokensClaimed(address indexed claimer, uint8 indexed categoryId, uint256 amount, uint256 feePaid);
event CategoryUpdated(uint8 indexed categoryId, string name, uint256 amount, uint256 fee);
event ClaimCooldownUpdated(uint256 oldCooldown, uint256 newCooldown);
event FeesWithdrawn(address indexed to, uint256 amount);
constructor(
string memory name_,
string memory symbol_,
uint256 claimCooldown_
) ERC20(name_, symbol_) Ownable(msg.sender) {
claimCooldown = claimCooldown_;
}
// ─── Claiming ──────────────────────────────────────────────────────
function claimTokens(uint8 categoryId) external payable nonReentrant whenNotPaused {
require(categoryId < CATEGORY_COUNT, "Invalid category");
require(categoryAmount[categoryId] > 0, "Category disabled");
require(msg.value >= categoryFee[categoryId], "Insufficient fee");
require(
block.timestamp >= lastClaimTimestamp[msg.sender] + claimCooldown,
"Cooldown not elapsed"
);
require(
totalSupply() + categoryAmount[categoryId] <= MAX_SUPPLY,
"Max supply reached"
);
lastClaimTimestamp[msg.sender] = block.timestamp;
_mint(msg.sender, categoryAmount[categoryId]);
uint256 feePaid = categoryFee[categoryId];
emit TokensClaimed(msg.sender, categoryId, categoryAmount[categoryId], feePaid);
if (msg.value > feePaid) {
(bool refunded, ) = msg.sender.call{value: msg.value - feePaid}("");
require(refunded, "Refund failed");
}
}
function canClaim(address account) external view returns (bool) {
return block.timestamp >= lastClaimTimestamp[account] + claimCooldown;
}
function getLastClaimTimestamp(address account) external view returns (uint256) {
return lastClaimTimestamp[account];
}
function getCategoryAmount(uint8 categoryId) external view returns (uint256) {
require(categoryId < CATEGORY_COUNT, "Invalid category");
return categoryAmount[categoryId];
}
function getCategoryFee(uint8 categoryId) external view returns (uint256) {
require(categoryId < CATEGORY_COUNT, "Invalid category");
return categoryFee[categoryId];
}
function getCategoryName(uint8 categoryId) external view returns (string memory) {
require(categoryId < CATEGORY_COUNT, "Invalid category");
return categoryName[categoryId];
}
function getClaimAmount(uint8 categoryId) external view returns (uint256) {
require(categoryId < CATEGORY_COUNT, "Invalid category");
return categoryAmount[categoryId];
}
// ─── Admin: categories ─────────────────────────────────────────────
function setCategory(
uint8 categoryId,
string calldata name,
uint256 amount,
uint256 fee
) external onlyOwner {
require(categoryId < CATEGORY_COUNT, "Invalid category");
categoryName[categoryId] = name;
categoryAmount[categoryId] = amount;
categoryFee[categoryId] = fee;
emit CategoryUpdated(categoryId, name, amount, fee);
}
function setClaimCooldown(uint256 newCooldown) external onlyOwner {
emit ClaimCooldownUpdated(claimCooldown, newCooldown);
claimCooldown = newCooldown;
}
// ─── Admin: supply & fees ──────────────────────────────────────────
function ownerWithdraw(uint256 amount) external onlyOwner {
require(totalSupply() + amount <= MAX_SUPPLY, "Max supply reached");
_mint(owner(), amount);
}
function withdrawFees(address to) external onlyOwner {
uint256 balance = address(this).balance;
require(balance > 0, "No fees to withdraw");
(bool success, ) = to.call{value: balance}("");
require(success, "Withdraw failed");
emit FeesWithdrawn(to, balance);
}
function mint(address to, uint256 amount) external onlyOwner {
require(totalSupply() + amount <= MAX_SUPPLY, "Max supply reached");
_mint(to, amount);
}
function pause() external onlyOwner {
_pause();
}
function unpause() external onlyOwner {
_unpause();
}
receive() external payable {}
}[
{
"type": "constructor",
"inputs": [
{
"name": "name_",
"type": "string",
"internalType": "string"
},
{
"name": "symbol_",
"type": "string",
"internalType": "string"
},
{
"name": "claimCooldown_",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "nonpayable"
},
{
"name": "ERC20InsufficientAllowance",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "allowance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InsufficientBalance",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
},
{
"name": "balance",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "needed",
"type": "uint256",
"internalType": "uint256"
}
]
},
{
"name": "ERC20InvalidApprover",
"type": "error",
"inputs": [
{
"name": "approver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidReceiver",
"type": "error",
"inputs": [
{
"name": "receiver",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSender",
"type": "error",
"inputs": [
{
"name": "sender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "ERC20InvalidSpender",
"type": "error",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
}
]
},
{
"name": "EnforcedPause",
"type": "error",
"inputs": []
},
{
"name": "ExpectedPause",
"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": "ReentrancyGuardReentrantCall",
"type": "error",
"inputs": []
},
{
"name": "Approval",
"type": "event",
"inputs": [
{
"name": "owner",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "CategoryUpdated",
"type": "event",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "name",
"type": "string",
"indexed": false,
"internalType": "string"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "fee",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "ClaimCooldownUpdated",
"type": "event",
"inputs": [
{
"name": "oldCooldown",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "newCooldown",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "FeesWithdrawn",
"type": "event",
"inputs": [
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"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": "TokensClaimed",
"type": "event",
"inputs": [
{
"name": "claimer",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "categoryId",
"type": "uint8",
"indexed": true,
"internalType": "uint8"
},
{
"name": "amount",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
},
{
"name": "feePaid",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Transfer",
"type": "event",
"inputs": [
{
"name": "from",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "to",
"type": "address",
"indexed": true,
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"indexed": false,
"internalType": "uint256"
}
],
"anonymous": false
},
{
"name": "Unpaused",
"type": "event",
"inputs": [
{
"name": "account",
"type": "address",
"indexed": false,
"internalType": "address"
}
],
"anonymous": false
},
{
"name": "CATEGORY_COUNT",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "MAX_SUPPLY",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "allowance",
"type": "function",
"inputs": [
{
"name": "owner",
"type": "address",
"internalType": "address"
},
{
"name": "spender",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "approve",
"type": "function",
"inputs": [
{
"name": "spender",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "balanceOf",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "burn",
"type": "function",
"inputs": [
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "burnFrom",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "canClaim",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "view"
},
{
"name": "categoryAmount",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "categoryFee",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "categoryName",
"type": "function",
"inputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "claimCooldown",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "claimTokens",
"type": "function",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [],
"stateMutability": "payable"
},
{
"name": "decimals",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint8",
"internalType": "uint8"
}
],
"stateMutability": "view"
},
{
"name": "getCategoryAmount",
"type": "function",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getCategoryFee",
"type": "function",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getCategoryName",
"type": "function",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "getClaimAmount",
"type": "function",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"internalType": "uint8"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "getLastClaimTimestamp",
"type": "function",
"inputs": [
{
"name": "account",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "lastClaimTimestamp",
"type": "function",
"inputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "mint",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "name",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "owner",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "address",
"internalType": "address"
}
],
"stateMutability": "view"
},
{
"name": "ownerWithdraw",
"type": "function",
"inputs": [
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"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": "setCategory",
"type": "function",
"inputs": [
{
"name": "categoryId",
"type": "uint8",
"internalType": "uint8"
},
{
"name": "name",
"type": "string",
"internalType": "string"
},
{
"name": "amount",
"type": "uint256",
"internalType": "uint256"
},
{
"name": "fee",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "setClaimCooldown",
"type": "function",
"inputs": [
{
"name": "newCooldown",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "symbol",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "string",
"internalType": "string"
}
],
"stateMutability": "view"
},
{
"name": "totalSupply",
"type": "function",
"inputs": [],
"outputs": [
{
"name": "",
"type": "uint256",
"internalType": "uint256"
}
],
"stateMutability": "view"
},
{
"name": "transfer",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferFrom",
"type": "function",
"inputs": [
{
"name": "from",
"type": "address",
"internalType": "address"
},
{
"name": "to",
"type": "address",
"internalType": "address"
},
{
"name": "value",
"type": "uint256",
"internalType": "uint256"
}
],
"outputs": [
{
"name": "",
"type": "bool",
"internalType": "bool"
}
],
"stateMutability": "nonpayable"
},
{
"name": "transferOwnership",
"type": "function",
"inputs": [
{
"name": "newOwner",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "unpause",
"type": "function",
"inputs": [],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"name": "withdrawFees",
"type": "function",
"inputs": [
{
"name": "to",
"type": "address",
"internalType": "address"
}
],
"outputs": [],
"stateMutability": "nonpayable"
},
{
"type": "receive",
"stateMutability": "payable"
}
]0x608060405234801562000010575f80fd5b50604051620035c5380380620035c58339818101604052810190620000369190620003ce565b33838381600390816200004a919062000693565b5080600490816200005c919062000693565b5050505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620000d2575f6040517f1e4fbdf7000000000000000000000000000000000000000000000000000000008152600401620000c99190620007ba565b60405180910390fd5b620000e3816200011c60201b60201c565b50600162000106620000fa620001df60201b60201c565b6200020860201b60201c565b5f018190555080601281905550505050620007d5565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f1b905090565b5f819050919050565b5f604051905090565b5f80fd5b5f80fd5b5f80fd5b5f80fd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b62000272826200022a565b810181811067ffffffffffffffff821117156200029457620002936200023a565b5b80604052505050565b5f620002a862000211565b9050620002b6828262000267565b919050565b5f67ffffffffffffffff821115620002d857620002d76200023a565b5b620002e3826200022a565b9050602081019050919050565b5f5b838110156200030f578082015181840152602081019050620002f2565b5f8484015250505050565b5f620003306200032a84620002bb565b6200029d565b9050828152602081018484840111156200034f576200034e62000226565b5b6200035c848285620002f0565b509392505050565b5f82601f8301126200037b576200037a62000222565b5b81516200038d8482602086016200031a565b91505092915050565b5f819050919050565b620003aa8162000396565b8114620003b5575f80fd5b50565b5f81519050620003c8816200039f565b92915050565b5f805f60608486031215620003e857620003e76200021a565b5b5f84015167ffffffffffffffff8111156200040857620004076200021e565b5b620004168682870162000364565b935050602084015167ffffffffffffffff8111156200043a57620004396200021e565b5b620004488682870162000364565b92505060406200045b86828701620003b8565b9150509250925092565b5f81519050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f6002820490506001821680620004b457607f821691505b602082108103620004ca57620004c96200046f565b5b50919050565b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026200052e7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620004f1565b6200053a8683620004f1565b95508019841693508086168417925050509392505050565b5f819050919050565b5f6200057b620005756200056f8462000396565b62000552565b62000396565b9050919050565b5f819050919050565b62000596836200055b565b620005ae620005a58262000582565b848454620004fd565b825550505050565b5f90565b620005c4620005b6565b620005d18184846200058b565b505050565b5b81811015620005f857620005ec5f82620005ba565b600181019050620005d7565b5050565b601f82111562000647576200061181620004d0565b6200061c84620004e2565b810160208510156200062c578190505b620006446200063b85620004e2565b830182620005d6565b50505b505050565b5f82821c905092915050565b5f620006695f19846008026200064c565b1980831691505092915050565b5f62000683838362000658565b9150826002028217905092915050565b6200069e8262000465565b67ffffffffffffffff811115620006ba57620006b96200023a565b5b620006c682546200049c565b620006d3828285620005fc565b5f60209050601f83116001811462000709575f8415620006f4578287015190505b62000700858262000676565b8655506200076f565b601f1984166200071986620004d0565b5f5b8281101562000742578489015182556001820191506020850194506020810190506200071b565b868310156200076257848901516200075e601f89168262000658565b8355505b6001600288020188555050505b505050505050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f620007a28262000777565b9050919050565b620007b48162000796565b82525050565b5f602082019050620007cf5f830184620007a9565b92915050565b612de280620007e35f395ff3fe608060405260043610610212575f3560e01c806370a0823111610117578063bd9d518b1161009f578063d3deb7c51161006e578063d3deb7c5146107b3578063dd62ed3e146107ef578063e90dbd8c1461082b578063f2fde38b14610867578063fdea36571461088f57610219565b8063bd9d518b146106e9578063bf3506c114610725578063c7334bb314610761578063d3247e401461078b57610219565b80638456cb59116100e65780638456cb59146106075780638da5cb5b1461061d57806395d89b41146106475780639db1de2b14610671578063a9059cbb146106ad57610219565b806370a0823114610551578063715018a61461058d57806379cc6790146105a35780637d2c1481146105cb57610219565b80633f4ba83a1161019a5780635451ceca116101695780635451ceca1461046b57806359c9eb90146104a75780635c975abb146104cf5780635f118704146104f95780635fee32e01461051557610219565b80633f4ba83a146103c95780633f9a61e0146103df57806340c10f191461041b57806342966c681461044357610219565b80631ab6ccaa116101e15780631ab6ccaa146102d557806323b872dd14610311578063313ce5671461034d57806332cb6b0c1461037757806333f707d1146103a157610219565b806306fdde031461021d578063095ea7b314610247578063164e68de1461028357806318160ddd146102ab57610219565b3661021957005b5f80fd5b348015610228575f80fd5b506102316108b9565b60405161023e91906121d1565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612286565b610949565b60405161027a91906122de565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a491906122f7565b61096b565b005b3480156102b6575f80fd5b506102bf610ab4565b6040516102cc9190612331565b60405180910390f35b3480156102e0575f80fd5b506102fb60048036038101906102f69190612380565b610abd565b6040516103089190612331565b60405180910390f35b34801561031c575f80fd5b50610337600480360381019061033291906123ab565b610b27565b60405161034491906122de565b60405180910390f35b348015610358575f80fd5b50610361610b55565b60405161036e919061240a565b60405180910390f35b348015610382575f80fd5b5061038b610b5d565b6040516103989190612331565b60405180910390f35b3480156103ac575f80fd5b506103c760048036038101906103c29190612423565b610b6d565b005b3480156103d4575f80fd5b506103dd610bea565b005b3480156103ea575f80fd5b5061040560048036038101906104009190612380565b610bfc565b60405161041291906121d1565b60405180910390f35b348015610426575f80fd5b50610441600480360381019061043c9190612286565b610ced565b005b34801561044e575f80fd5b5061046960048036038101906104649190612423565b610d64565b005b348015610476575f80fd5b50610491600480360381019061048c9190612380565b610d78565b60405161049e9190612331565b60405180910390f35b3480156104b2575f80fd5b506104cd60048036038101906104c89190612423565b610de2565b005b3480156104da575f80fd5b506104e3610e2f565b6040516104f091906122de565b60405180910390f35b610513600480360381019061050e9190612380565b610e45565b005b348015610520575f80fd5b5061053b60048036038101906105369190612380565b61120e565b6040516105489190612331565b60405180910390f35b34801561055c575f80fd5b50610577600480360381019061057291906122f7565b611278565b6040516105849190612331565b60405180910390f35b348015610598575f80fd5b506105a16112bd565b005b3480156105ae575f80fd5b506105c960048036038101906105c49190612286565b6112d0565b005b3480156105d6575f80fd5b506105f160048036038101906105ec9190612423565b6112f0565b6040516105fe9190612331565b60405180910390f35b348015610612575f80fd5b5061061b611309565b005b348015610628575f80fd5b5061063161131b565b60405161063e919061245d565b60405180910390f35b348015610652575f80fd5b5061065b611343565b60405161066891906121d1565b60405180910390f35b34801561067c575f80fd5b5061069760048036038101906106929190612423565b6113d3565b6040516106a49190612331565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612286565b6113ec565b6040516106e091906122de565b60405180910390f35b3480156106f4575f80fd5b5061070f600480360381019061070a91906122f7565b61140e565b60405161071c9190612331565b60405180910390f35b348015610730575f80fd5b5061074b600480360381019061074691906122f7565b611423565b60405161075891906122de565b60405180910390f35b34801561076c575f80fd5b50610775611479565b604051610782919061240a565b60405180910390f35b348015610796575f80fd5b506107b160048036038101906107ac91906124d7565b61147e565b005b3480156107be575f80fd5b506107d960048036038101906107d49190612423565b611579565b6040516107e691906121d1565b60405180910390f35b3480156107fa575f80fd5b506108156004803603810190610810919061255b565b611618565b6040516108229190612331565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c91906122f7565b61169a565b60405161085e9190612331565b60405180910390f35b348015610872575f80fd5b5061088d600480360381019061088891906122f7565b6116e0565b005b34801561089a575f80fd5b506108a3611764565b6040516108b09190612331565b60405180910390f35b6060600380546108c8906125c6565b80601f01602080910402602001604051908101604052809291908181526020018280546108f4906125c6565b801561093f5780601f106109165761010080835404028352916020019161093f565b820191905f5260205f20905b81548152906001019060200180831161092257829003601f168201915b5050505050905090565b5f8061095361176a565b9050610960818585611771565b600191505092915050565b610973611783565b5f4790505f81116109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b090612640565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516109de9061268b565b5f6040518083038185875af1925050503d805f8114610a18576040519150601f19603f3d011682016040523d82523d5f602084013e610a1d565b606091505b5050905080610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a58906126e9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a83604051610aa79190612331565b60405180910390a2505050565b5f600254905090565b5f600460ff168260ff1610610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612751565b60405180910390fd5b60068260ff1660048110610b1e57610b1d61276f565b5b01549050919050565b5f80610b3161176a565b9050610b3e85828561180a565b610b4985858561189d565b60019150509392505050565b5f6012905090565b6b033b2e3c9fd0803ce800000081565b610b75611783565b6b033b2e3c9fd0803ce800000081610b8b610ab4565b610b9591906127c9565b1115610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd90612846565b60405180910390fd5b610be7610be161131b565b8261198d565b50565b610bf2611783565b610bfa611a0c565b565b6060600460ff168260ff1610610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612751565b60405180910390fd5b600e8260ff1660048110610c5e57610c5d61276f565b5b018054610c6a906125c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c96906125c6565b8015610ce15780601f10610cb857610100808354040283529160200191610ce1565b820191905f5260205f20905b815481529060010190602001808311610cc457829003601f168201915b50505050509050919050565b610cf5611783565b6b033b2e3c9fd0803ce800000081610d0b610ab4565b610d1591906127c9565b1115610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90612846565b60405180910390fd5b610d60828261198d565b5050565b610d75610d6f61176a565b82611a6e565b50565b5f600460ff168260ff1610610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990612751565b60405180910390fd5b60068260ff1660048110610dd957610dd861276f565b5b01549050919050565b610dea611783565b7f78cc7d427330795fc1cd2c34df4c3e227b215808406932377e468dcfa7b2d15760125482604051610e1d929190612864565b60405180910390a18060128190555050565b5f600560149054906101000a900460ff16905090565b610e4d611aed565b610e55611b0f565b600460ff168160ff1610610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590612751565b60405180910390fd5b5f60068260ff1660048110610eb657610eb561276f565b5b015411610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef906128d5565b60405180910390fd5b600a8160ff1660048110610f0f57610f0e61276f565b5b0154341015610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a9061293d565b60405180910390fd5b60125460135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f9e91906127c9565b421015610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906129a5565b60405180910390fd5b6b033b2e3c9fd0803ce800000060068260ff16600481106110045761100361276f565b5b015461100e610ab4565b61101891906127c9565b1115611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612846565b60405180910390fd5b4260135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506110bd3360068360ff16600481106110b6576110b561276f565b5b015461198d565b5f600a8260ff16600481106110d5576110d461276f565b5b015490508160ff163373ffffffffffffffffffffffffffffffffffffffff167f4cdd1e5abd5e67621a8639a5b5ff40dd358e4c01707eff4cc55755c60fd27a5460068560ff166004811061112c5761112b61276f565b5b01548460405161113d929190612864565b60405180910390a380341115611202575f3373ffffffffffffffffffffffffffffffffffffffff16823461117191906129c3565b60405161117d9061268b565b5f6040518083038185875af1925050503d805f81146111b7576040519150601f19603f3d011682016040523d82523d5f602084013e6111bc565b606091505b5050905080611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790612a40565b60405180910390fd5b505b5061120b611b50565b50565b5f600460ff168260ff1610611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90612751565b60405180910390fd5b600a8260ff166004811061126f5761126e61276f565b5b01549050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112c5611783565b6112ce5f611b6a565b565b6112e2826112dc61176a565b8361180a565b6112ec8282611a6e565b5050565b600681600481106112ff575f80fd5b015f915090505481565b611311611783565b611319611c2d565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611352906125c6565b80601f016020809104026020016040519081016040528092919081815260200182805461137e906125c6565b80156113c95780601f106113a0576101008083540402835291602001916113c9565b820191905f5260205f20905b8154815290600101906020018083116113ac57829003601f168201915b5050505050905090565b600a81600481106113e2575f80fd5b015f915090505481565b5f806113f661176a565b905061140381858561189d565b600191505092915050565b6013602052805f5260405f205f915090505481565b5f60125460135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461146f91906127c9565b4210159050919050565b600481565b611486611783565b600460ff168560ff16106114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690612751565b60405180910390fd5b8383600e8760ff16600481106114e8576114e761276f565b5b0191826114f6929190612c32565b508160068660ff166004811061150f5761150e61276f565b5b018190555080600a8660ff166004811061152c5761152b61276f565b5b01819055508460ff167f57c9bae405bc6022446d32ad85532706a024aa1464890aa5336772201ce269388585858560405161156a9493929190612d39565b60405180910390a25050505050565b600e8160048110611588575f80fd5b015f915090508054611599906125c6565b80601f01602080910402602001604051908101604052809291908181526020018280546115c5906125c6565b80156116105780601f106115e757610100808354040283529160200191611610565b820191905f5260205f20905b8154815290600101906020018083116115f357829003601f168201915b505050505081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116e8611783565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611758575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161174f919061245d565b60405180910390fd5b61176181611b6a565b50565b60125481565b5f33905090565b61177e8383836001611c90565b505050565b61178b61176a565b73ffffffffffffffffffffffffffffffffffffffff166117a961131b565b73ffffffffffffffffffffffffffffffffffffffff1614611808576117cc61176a565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117ff919061245d565b60405180910390fd5b565b5f6118158484611618565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156118975781811015611888578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161187f93929190612d77565b60405180910390fd5b61189684848484035f611c90565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361190d575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611904919061245d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361197d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611974919061245d565b60405180910390fd5b611988838383611e5f565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fd575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016119f4919061245d565b60405180910390fd5b611a085f8383611e5f565b5050565b611a14612078565b5f600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a5761176a565b604051611a64919061245d565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ade575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ad5919061245d565b60405180910390fd5b611ae9825f83611e5f565b5050565b611af56120b8565b6002611b07611b026120f9565b612122565b5f0181905550565b611b17610e2f565b15611b4e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001611b62611b5d6120f9565b612122565b5f0181905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c35611b0f565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c7961176a565b604051611c86919061245d565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d00575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611cf7919061245d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d70575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d67919061245d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e59578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e509190612331565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eaf578060025f828254611ea391906127c9565b92505081905550611f7d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f38578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611f2f93929190612d77565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc4578060025f828254039250508190555061200e565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161206b9190612331565b60405180910390a3505050565b612080610e2f565b6120b6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6120c061212b565b156120f7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f1b905090565b5f819050919050565b5f600261213e6121396120f9565b612122565b5f015414905090565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561217e578082015181840152602081019050612163565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121a382612147565b6121ad8185612151565b93506121bd818560208601612161565b6121c681612189565b840191505092915050565b5f6020820190508181035f8301526121e98184612199565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612222826121f9565b9050919050565b61223281612218565b811461223c575f80fd5b50565b5f8135905061224d81612229565b92915050565b5f819050919050565b61226581612253565b811461226f575f80fd5b50565b5f813590506122808161225c565b92915050565b5f806040838503121561229c5761229b6121f1565b5b5f6122a98582860161223f565b92505060206122ba85828601612272565b9150509250929050565b5f8115159050919050565b6122d8816122c4565b82525050565b5f6020820190506122f15f8301846122cf565b92915050565b5f6020828403121561230c5761230b6121f1565b5b5f6123198482850161223f565b91505092915050565b61232b81612253565b82525050565b5f6020820190506123445f830184612322565b92915050565b5f60ff82169050919050565b61235f8161234a565b8114612369575f80fd5b50565b5f8135905061237a81612356565b92915050565b5f60208284031215612395576123946121f1565b5b5f6123a28482850161236c565b91505092915050565b5f805f606084860312156123c2576123c16121f1565b5b5f6123cf8682870161223f565b93505060206123e08682870161223f565b92505060406123f186828701612272565b9150509250925092565b6124048161234a565b82525050565b5f60208201905061241d5f8301846123fb565b92915050565b5f60208284031215612438576124376121f1565b5b5f61244584828501612272565b91505092915050565b61245781612218565b82525050565b5f6020820190506124705f83018461244e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261249757612496612476565b5b8235905067ffffffffffffffff8111156124b4576124b361247a565b5b6020830191508360018202830111156124d0576124cf61247e565b5b9250929050565b5f805f805f608086880312156124f0576124ef6121f1565b5b5f6124fd8882890161236c565b955050602086013567ffffffffffffffff81111561251e5761251d6121f5565b5b61252a88828901612482565b9450945050604061253d88828901612272565b925050606061254e88828901612272565b9150509295509295909350565b5f8060408385031215612571576125706121f1565b5b5f61257e8582860161223f565b925050602061258f8582860161223f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806125dd57607f821691505b6020821081036125f0576125ef612599565b5b50919050565b7f4e6f206665657320746f207769746864726177000000000000000000000000005f82015250565b5f61262a601383612151565b9150612635826125f6565b602082019050919050565b5f6020820190508181035f8301526126578161261e565b9050919050565b5f81905092915050565b50565b5f6126765f8361265e565b915061268182612668565b5f82019050919050565b5f6126958261266b565b9150819050919050565b7f5769746864726177206661696c656400000000000000000000000000000000005f82015250565b5f6126d3600f83612151565b91506126de8261269f565b602082019050919050565b5f6020820190508181035f830152612700816126c7565b9050919050565b7f496e76616c69642063617465676f7279000000000000000000000000000000005f82015250565b5f61273b601083612151565b915061274682612707565b602082019050919050565b5f6020820190508181035f8301526127688161272f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127d382612253565b91506127de83612253565b92508282019050808211156127f6576127f561279c565b5b92915050565b7f4d617820737570706c79207265616368656400000000000000000000000000005f82015250565b5f612830601283612151565b915061283b826127fc565b602082019050919050565b5f6020820190508181035f83015261285d81612824565b9050919050565b5f6040820190506128775f830185612322565b6128846020830184612322565b9392505050565b7f43617465676f72792064697361626c65640000000000000000000000000000005f82015250565b5f6128bf601183612151565b91506128ca8261288b565b602082019050919050565b5f6020820190508181035f8301526128ec816128b3565b9050919050565b7f496e73756666696369656e7420666565000000000000000000000000000000005f82015250565b5f612927601083612151565b9150612932826128f3565b602082019050919050565b5f6020820190508181035f8301526129548161291b565b9050919050565b7f436f6f6c646f776e206e6f7420656c61707365640000000000000000000000005f82015250565b5f61298f601483612151565b915061299a8261295b565b602082019050919050565b5f6020820190508181035f8301526129bc81612983565b9050919050565b5f6129cd82612253565b91506129d883612253565b92508282039050818111156129f0576129ef61279c565b5b92915050565b7f526566756e64206661696c6564000000000000000000000000000000000000005f82015250565b5f612a2a600d83612151565b9150612a35826129f6565b602082019050919050565b5f6020820190508181035f830152612a5781612a1e565b9050919050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612af17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ab6565b612afb8683612ab6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612b36612b31612b2c84612253565b612b13565b612253565b9050919050565b5f819050919050565b612b4f83612b1c565b612b63612b5b82612b3d565b848454612ac2565b825550505050565b5f90565b612b77612b6b565b612b82818484612b46565b505050565b5b81811015612ba557612b9a5f82612b6f565b600181019050612b88565b5050565b601f821115612bea57612bbb81612a95565b612bc484612aa7565b81016020851015612bd3578190505b612be7612bdf85612aa7565b830182612b87565b50505b505050565b5f82821c905092915050565b5f612c0a5f1984600802612bef565b1980831691505092915050565b5f612c228383612bfb565b9150826002028217905092915050565b612c3c8383612a5e565b67ffffffffffffffff811115612c5557612c54612a68565b5b612c5f82546125c6565b612c6a828285612ba9565b5f601f831160018114612c97575f8415612c85578287013590505b612c8f8582612c17565b865550612cf6565b601f198416612ca586612a95565b5f5b82811015612ccc57848901358255600182019150602085019450602081019050612ca7565b86831015612ce95784890135612ce5601f891682612bfb565b8355505b6001600288020188555050505b50505050505050565b828183375f83830152505050565b5f612d188385612151565b9350612d25838584612cff565b612d2e83612189565b840190509392505050565b5f6060820190508181035f830152612d52818688612d0d565b9050612d616020830185612322565b612d6e6040830184612322565b95945050505050565b5f606082019050612d8a5f83018661244e565b612d976020830185612322565b612da46040830184612322565b94935050505056fea2646970667358221220d784cd04fa9e8456993ebba7ed27f2f66bea5cf4f9dd9664395d4c46cd0a256864736f6c63430008180033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006486f6c6c6f7700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000006486f6c6c6f770000000000000000000000000000000000000000000000000000
0x608060405260043610610212575f3560e01c806370a0823111610117578063bd9d518b1161009f578063d3deb7c51161006e578063d3deb7c5146107b3578063dd62ed3e146107ef578063e90dbd8c1461082b578063f2fde38b14610867578063fdea36571461088f57610219565b8063bd9d518b146106e9578063bf3506c114610725578063c7334bb314610761578063d3247e401461078b57610219565b80638456cb59116100e65780638456cb59146106075780638da5cb5b1461061d57806395d89b41146106475780639db1de2b14610671578063a9059cbb146106ad57610219565b806370a0823114610551578063715018a61461058d57806379cc6790146105a35780637d2c1481146105cb57610219565b80633f4ba83a1161019a5780635451ceca116101695780635451ceca1461046b57806359c9eb90146104a75780635c975abb146104cf5780635f118704146104f95780635fee32e01461051557610219565b80633f4ba83a146103c95780633f9a61e0146103df57806340c10f191461041b57806342966c681461044357610219565b80631ab6ccaa116101e15780631ab6ccaa146102d557806323b872dd14610311578063313ce5671461034d57806332cb6b0c1461037757806333f707d1146103a157610219565b806306fdde031461021d578063095ea7b314610247578063164e68de1461028357806318160ddd146102ab57610219565b3661021957005b5f80fd5b348015610228575f80fd5b506102316108b9565b60405161023e91906121d1565b60405180910390f35b348015610252575f80fd5b5061026d60048036038101906102689190612286565b610949565b60405161027a91906122de565b60405180910390f35b34801561028e575f80fd5b506102a960048036038101906102a491906122f7565b61096b565b005b3480156102b6575f80fd5b506102bf610ab4565b6040516102cc9190612331565b60405180910390f35b3480156102e0575f80fd5b506102fb60048036038101906102f69190612380565b610abd565b6040516103089190612331565b60405180910390f35b34801561031c575f80fd5b50610337600480360381019061033291906123ab565b610b27565b60405161034491906122de565b60405180910390f35b348015610358575f80fd5b50610361610b55565b60405161036e919061240a565b60405180910390f35b348015610382575f80fd5b5061038b610b5d565b6040516103989190612331565b60405180910390f35b3480156103ac575f80fd5b506103c760048036038101906103c29190612423565b610b6d565b005b3480156103d4575f80fd5b506103dd610bea565b005b3480156103ea575f80fd5b5061040560048036038101906104009190612380565b610bfc565b60405161041291906121d1565b60405180910390f35b348015610426575f80fd5b50610441600480360381019061043c9190612286565b610ced565b005b34801561044e575f80fd5b5061046960048036038101906104649190612423565b610d64565b005b348015610476575f80fd5b50610491600480360381019061048c9190612380565b610d78565b60405161049e9190612331565b60405180910390f35b3480156104b2575f80fd5b506104cd60048036038101906104c89190612423565b610de2565b005b3480156104da575f80fd5b506104e3610e2f565b6040516104f091906122de565b60405180910390f35b610513600480360381019061050e9190612380565b610e45565b005b348015610520575f80fd5b5061053b60048036038101906105369190612380565b61120e565b6040516105489190612331565b60405180910390f35b34801561055c575f80fd5b50610577600480360381019061057291906122f7565b611278565b6040516105849190612331565b60405180910390f35b348015610598575f80fd5b506105a16112bd565b005b3480156105ae575f80fd5b506105c960048036038101906105c49190612286565b6112d0565b005b3480156105d6575f80fd5b506105f160048036038101906105ec9190612423565b6112f0565b6040516105fe9190612331565b60405180910390f35b348015610612575f80fd5b5061061b611309565b005b348015610628575f80fd5b5061063161131b565b60405161063e919061245d565b60405180910390f35b348015610652575f80fd5b5061065b611343565b60405161066891906121d1565b60405180910390f35b34801561067c575f80fd5b5061069760048036038101906106929190612423565b6113d3565b6040516106a49190612331565b60405180910390f35b3480156106b8575f80fd5b506106d360048036038101906106ce9190612286565b6113ec565b6040516106e091906122de565b60405180910390f35b3480156106f4575f80fd5b5061070f600480360381019061070a91906122f7565b61140e565b60405161071c9190612331565b60405180910390f35b348015610730575f80fd5b5061074b600480360381019061074691906122f7565b611423565b60405161075891906122de565b60405180910390f35b34801561076c575f80fd5b50610775611479565b604051610782919061240a565b60405180910390f35b348015610796575f80fd5b506107b160048036038101906107ac91906124d7565b61147e565b005b3480156107be575f80fd5b506107d960048036038101906107d49190612423565b611579565b6040516107e691906121d1565b60405180910390f35b3480156107fa575f80fd5b506108156004803603810190610810919061255b565b611618565b6040516108229190612331565b60405180910390f35b348015610836575f80fd5b50610851600480360381019061084c91906122f7565b61169a565b60405161085e9190612331565b60405180910390f35b348015610872575f80fd5b5061088d600480360381019061088891906122f7565b6116e0565b005b34801561089a575f80fd5b506108a3611764565b6040516108b09190612331565b60405180910390f35b6060600380546108c8906125c6565b80601f01602080910402602001604051908101604052809291908181526020018280546108f4906125c6565b801561093f5780601f106109165761010080835404028352916020019161093f565b820191905f5260205f20905b81548152906001019060200180831161092257829003601f168201915b5050505050905090565b5f8061095361176a565b9050610960818585611771565b600191505092915050565b610973611783565b5f4790505f81116109b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109b090612640565b60405180910390fd5b5f8273ffffffffffffffffffffffffffffffffffffffff16826040516109de9061268b565b5f6040518083038185875af1925050503d805f8114610a18576040519150601f19603f3d011682016040523d82523d5f602084013e610a1d565b606091505b5050905080610a61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a58906126e9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff167fc0819c13be868895eb93e40eaceb96de976442fa1d404e5c55f14bb65a8c489a83604051610aa79190612331565b60405180910390a2505050565b5f600254905090565b5f600460ff168260ff1610610b07576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afe90612751565b60405180910390fd5b60068260ff1660048110610b1e57610b1d61276f565b5b01549050919050565b5f80610b3161176a565b9050610b3e85828561180a565b610b4985858561189d565b60019150509392505050565b5f6012905090565b6b033b2e3c9fd0803ce800000081565b610b75611783565b6b033b2e3c9fd0803ce800000081610b8b610ab4565b610b9591906127c9565b1115610bd6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bcd90612846565b60405180910390fd5b610be7610be161131b565b8261198d565b50565b610bf2611783565b610bfa611a0c565b565b6060600460ff168260ff1610610c47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c3e90612751565b60405180910390fd5b600e8260ff1660048110610c5e57610c5d61276f565b5b018054610c6a906125c6565b80601f0160208091040260200160405190810160405280929190818152602001828054610c96906125c6565b8015610ce15780601f10610cb857610100808354040283529160200191610ce1565b820191905f5260205f20905b815481529060010190602001808311610cc457829003601f168201915b50505050509050919050565b610cf5611783565b6b033b2e3c9fd0803ce800000081610d0b610ab4565b610d1591906127c9565b1115610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90612846565b60405180910390fd5b610d60828261198d565b5050565b610d75610d6f61176a565b82611a6e565b50565b5f600460ff168260ff1610610dc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db990612751565b60405180910390fd5b60068260ff1660048110610dd957610dd861276f565b5b01549050919050565b610dea611783565b7f78cc7d427330795fc1cd2c34df4c3e227b215808406932377e468dcfa7b2d15760125482604051610e1d929190612864565b60405180910390a18060128190555050565b5f600560149054906101000a900460ff16905090565b610e4d611aed565b610e55611b0f565b600460ff168160ff1610610e9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e9590612751565b60405180910390fd5b5f60068260ff1660048110610eb657610eb561276f565b5b015411610ef8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eef906128d5565b60405180910390fd5b600a8160ff1660048110610f0f57610f0e61276f565b5b0154341015610f53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4a9061293d565b60405180910390fd5b60125460135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054610f9e91906127c9565b421015610fe0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd7906129a5565b60405180910390fd5b6b033b2e3c9fd0803ce800000060068260ff16600481106110045761100361276f565b5b015461100e610ab4565b61101891906127c9565b1115611059576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161105090612846565b60405180910390fd5b4260135f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055506110bd3360068360ff16600481106110b6576110b561276f565b5b015461198d565b5f600a8260ff16600481106110d5576110d461276f565b5b015490508160ff163373ffffffffffffffffffffffffffffffffffffffff167f4cdd1e5abd5e67621a8639a5b5ff40dd358e4c01707eff4cc55755c60fd27a5460068560ff166004811061112c5761112b61276f565b5b01548460405161113d929190612864565b60405180910390a380341115611202575f3373ffffffffffffffffffffffffffffffffffffffff16823461117191906129c3565b60405161117d9061268b565b5f6040518083038185875af1925050503d805f81146111b7576040519150601f19603f3d011682016040523d82523d5f602084013e6111bc565b606091505b5050905080611200576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f790612a40565b60405180910390fd5b505b5061120b611b50565b50565b5f600460ff168260ff1610611258576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124f90612751565b60405180910390fd5b600a8260ff166004811061126f5761126e61276f565b5b01549050919050565b5f805f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6112c5611783565b6112ce5f611b6a565b565b6112e2826112dc61176a565b8361180a565b6112ec8282611a6e565b5050565b600681600481106112ff575f80fd5b015f915090505481565b611311611783565b611319611c2d565b565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060048054611352906125c6565b80601f016020809104026020016040519081016040528092919081815260200182805461137e906125c6565b80156113c95780601f106113a0576101008083540402835291602001916113c9565b820191905f5260205f20905b8154815290600101906020018083116113ac57829003601f168201915b5050505050905090565b600a81600481106113e2575f80fd5b015f915090505481565b5f806113f661176a565b905061140381858561189d565b600191505092915050565b6013602052805f5260405f205f915090505481565b5f60125460135f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205461146f91906127c9565b4210159050919050565b600481565b611486611783565b600460ff168560ff16106114cf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c690612751565b60405180910390fd5b8383600e8760ff16600481106114e8576114e761276f565b5b0191826114f6929190612c32565b508160068660ff166004811061150f5761150e61276f565b5b018190555080600a8660ff166004811061152c5761152b61276f565b5b01819055508460ff167f57c9bae405bc6022446d32ad85532706a024aa1464890aa5336772201ce269388585858560405161156a9493929190612d39565b60405180910390a25050505050565b600e8160048110611588575f80fd5b015f915090508054611599906125c6565b80601f01602080910402602001604051908101604052809291908181526020018280546115c5906125c6565b80156116105780601f106115e757610100808354040283529160200191611610565b820191905f5260205f20905b8154815290600101906020018083116115f357829003601f168201915b505050505081565b5f60015f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905092915050565b5f60135f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6116e8611783565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611758575f6040517f1e4fbdf700000000000000000000000000000000000000000000000000000000815260040161174f919061245d565b60405180910390fd5b61176181611b6a565b50565b60125481565b5f33905090565b61177e8383836001611c90565b505050565b61178b61176a565b73ffffffffffffffffffffffffffffffffffffffff166117a961131b565b73ffffffffffffffffffffffffffffffffffffffff1614611808576117cc61176a565b6040517f118cdaa70000000000000000000000000000000000000000000000000000000081526004016117ff919061245d565b60405180910390fd5b565b5f6118158484611618565b90507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8110156118975781811015611888578281836040517ffb8f41b200000000000000000000000000000000000000000000000000000000815260040161187f93929190612d77565b60405180910390fd5b61189684848484035f611c90565b5b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff160361190d575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611904919061245d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff160361197d575f6040517fec442f05000000000000000000000000000000000000000000000000000000008152600401611974919061245d565b60405180910390fd5b611988838383611e5f565b505050565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036119fd575f6040517fec442f050000000000000000000000000000000000000000000000000000000081526004016119f4919061245d565b60405180910390fd5b611a085f8383611e5f565b5050565b611a14612078565b5f600560146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa611a5761176a565b604051611a64919061245d565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611ade575f6040517f96c6fd1e000000000000000000000000000000000000000000000000000000008152600401611ad5919061245d565b60405180910390fd5b611ae9825f83611e5f565b5050565b611af56120b8565b6002611b07611b026120f9565b612122565b5f0181905550565b611b17610e2f565b15611b4e576040517fd93c066500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6001611b62611b5d6120f9565b612122565b5f0181905550565b5f60055f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508160055f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c35611b0f565b6001600560146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258611c7961176a565b604051611c86919061245d565b60405180910390a1565b5f73ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611d00575f6040517fe602df05000000000000000000000000000000000000000000000000000000008152600401611cf7919061245d565b60405180910390fd5b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611d70575f6040517f94280d62000000000000000000000000000000000000000000000000000000008152600401611d67919061245d565b60405180910390fd5b8160015f8673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20819055508015611e59578273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92584604051611e509190612331565b60405180910390a35b50505050565b5f73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603611eaf578060025f828254611ea391906127c9565b92505081905550611f7d565b5f805f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2054905081811015611f38578381836040517fe450d38c000000000000000000000000000000000000000000000000000000008152600401611f2f93929190612d77565b60405180910390fd5b8181035f808673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f2081905550505b5f73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611fc4578060025f828254039250508190555061200e565b805f808473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f82825401925050819055505b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8360405161206b9190612331565b60405180910390a3505050565b612080610e2f565b6120b6576040517f8dfc202b00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b6120c061212b565b156120f7576040517f3ee5aeb500000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b565b5f7f9b779b17422d0df92223018b32b4d1fa46e071723d6817e2486d003becc55f005f1b905090565b5f819050919050565b5f600261213e6121396120f9565b612122565b5f015414905090565b5f81519050919050565b5f82825260208201905092915050565b5f5b8381101561217e578082015181840152602081019050612163565b5f8484015250505050565b5f601f19601f8301169050919050565b5f6121a382612147565b6121ad8185612151565b93506121bd818560208601612161565b6121c681612189565b840191505092915050565b5f6020820190508181035f8301526121e98184612199565b905092915050565b5f80fd5b5f80fd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612222826121f9565b9050919050565b61223281612218565b811461223c575f80fd5b50565b5f8135905061224d81612229565b92915050565b5f819050919050565b61226581612253565b811461226f575f80fd5b50565b5f813590506122808161225c565b92915050565b5f806040838503121561229c5761229b6121f1565b5b5f6122a98582860161223f565b92505060206122ba85828601612272565b9150509250929050565b5f8115159050919050565b6122d8816122c4565b82525050565b5f6020820190506122f15f8301846122cf565b92915050565b5f6020828403121561230c5761230b6121f1565b5b5f6123198482850161223f565b91505092915050565b61232b81612253565b82525050565b5f6020820190506123445f830184612322565b92915050565b5f60ff82169050919050565b61235f8161234a565b8114612369575f80fd5b50565b5f8135905061237a81612356565b92915050565b5f60208284031215612395576123946121f1565b5b5f6123a28482850161236c565b91505092915050565b5f805f606084860312156123c2576123c16121f1565b5b5f6123cf8682870161223f565b93505060206123e08682870161223f565b92505060406123f186828701612272565b9150509250925092565b6124048161234a565b82525050565b5f60208201905061241d5f8301846123fb565b92915050565b5f60208284031215612438576124376121f1565b5b5f61244584828501612272565b91505092915050565b61245781612218565b82525050565b5f6020820190506124705f83018461244e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f84011261249757612496612476565b5b8235905067ffffffffffffffff8111156124b4576124b361247a565b5b6020830191508360018202830111156124d0576124cf61247e565b5b9250929050565b5f805f805f608086880312156124f0576124ef6121f1565b5b5f6124fd8882890161236c565b955050602086013567ffffffffffffffff81111561251e5761251d6121f5565b5b61252a88828901612482565b9450945050604061253d88828901612272565b925050606061254e88828901612272565b9150509295509295909350565b5f8060408385031215612571576125706121f1565b5b5f61257e8582860161223f565b925050602061258f8582860161223f565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f60028204905060018216806125dd57607f821691505b6020821081036125f0576125ef612599565b5b50919050565b7f4e6f206665657320746f207769746864726177000000000000000000000000005f82015250565b5f61262a601383612151565b9150612635826125f6565b602082019050919050565b5f6020820190508181035f8301526126578161261e565b9050919050565b5f81905092915050565b50565b5f6126765f8361265e565b915061268182612668565b5f82019050919050565b5f6126958261266b565b9150819050919050565b7f5769746864726177206661696c656400000000000000000000000000000000005f82015250565b5f6126d3600f83612151565b91506126de8261269f565b602082019050919050565b5f6020820190508181035f830152612700816126c7565b9050919050565b7f496e76616c69642063617465676f7279000000000000000000000000000000005f82015250565b5f61273b601083612151565b915061274682612707565b602082019050919050565b5f6020820190508181035f8301526127688161272f565b9050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6127d382612253565b91506127de83612253565b92508282019050808211156127f6576127f561279c565b5b92915050565b7f4d617820737570706c79207265616368656400000000000000000000000000005f82015250565b5f612830601283612151565b915061283b826127fc565b602082019050919050565b5f6020820190508181035f83015261285d81612824565b9050919050565b5f6040820190506128775f830185612322565b6128846020830184612322565b9392505050565b7f43617465676f72792064697361626c65640000000000000000000000000000005f82015250565b5f6128bf601183612151565b91506128ca8261288b565b602082019050919050565b5f6020820190508181035f8301526128ec816128b3565b9050919050565b7f496e73756666696369656e7420666565000000000000000000000000000000005f82015250565b5f612927601083612151565b9150612932826128f3565b602082019050919050565b5f6020820190508181035f8301526129548161291b565b9050919050565b7f436f6f6c646f776e206e6f7420656c61707365640000000000000000000000005f82015250565b5f61298f601483612151565b915061299a8261295b565b602082019050919050565b5f6020820190508181035f8301526129bc81612983565b9050919050565b5f6129cd82612253565b91506129d883612253565b92508282039050818111156129f0576129ef61279c565b5b92915050565b7f526566756e64206661696c6564000000000000000000000000000000000000005f82015250565b5f612a2a600d83612151565b9150612a35826129f6565b602082019050919050565b5f6020820190508181035f830152612a5781612a1e565b9050919050565b5f82905092915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f819050815f5260205f209050919050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f60088302612af17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612ab6565b612afb8683612ab6565b95508019841693508086168417925050509392505050565b5f819050919050565b5f612b36612b31612b2c84612253565b612b13565b612253565b9050919050565b5f819050919050565b612b4f83612b1c565b612b63612b5b82612b3d565b848454612ac2565b825550505050565b5f90565b612b77612b6b565b612b82818484612b46565b505050565b5b81811015612ba557612b9a5f82612b6f565b600181019050612b88565b5050565b601f821115612bea57612bbb81612a95565b612bc484612aa7565b81016020851015612bd3578190505b612be7612bdf85612aa7565b830182612b87565b50505b505050565b5f82821c905092915050565b5f612c0a5f1984600802612bef565b1980831691505092915050565b5f612c228383612bfb565b9150826002028217905092915050565b612c3c8383612a5e565b67ffffffffffffffff811115612c5557612c54612a68565b5b612c5f82546125c6565b612c6a828285612ba9565b5f601f831160018114612c97575f8415612c85578287013590505b612c8f8582612c17565b865550612cf6565b601f198416612ca586612a95565b5f5b82811015612ccc57848901358255600182019150602085019450602081019050612ca7565b86831015612ce95784890135612ce5601f891682612bfb565b8355505b6001600288020188555050505b50505050505050565b828183375f83830152505050565b5f612d188385612151565b9350612d25838584612cff565b612d2e83612189565b840190509392505050565b5f6060820190508181035f830152612d52818688612d0d565b9050612d616020830185612322565b612d6e6040830184612322565b95945050505050565b5f606082019050612d8a5f83018661244e565b612d976020830185612322565b612da46040830184612322565b94935050505056fea2646970667358221220d784cd04fa9e8456993ebba7ed27f2f66bea5cf4f9dd9664395d4c46cd0a256864736f6c63430008180033
| Token | Symbol | Balance | Price | Value |
|---|---|---|---|---|
| no token holdings | ||||
| Type | Age | Block | Details |
|---|---|---|---|
| no cross-chain L1↔L2 transactions for this address | |||
| 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 |
|---|---|---|---|
| 0x9bb002…efd9b6 | 4 hrs agoSun, 16 Aug 2026 17:01:13 UTC | 0xc0819c…489a | [0] 0x000000000000…fd69b0c7 data: 0x000000000000000000…8aba4000 |
| 0x99c715…366296 | 6 hrs agoSun, 16 Aug 2026 15:34:39 UTC | 0x4cdd1e…7a54 | [0] 0x000000000000…51c414e9 [1] 0x000000000000…00000003 data: 0x000000000000000000…a4c68000 |
| 0x99c715…366296 | 6 hrs agoSun, 16 Aug 2026 15:34:39 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…51c414e9 data: 0x000000000000000000…bda00000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…5b30d507 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…dab7242c data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…c6c02d6c data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…b5e1ffd1 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…5dce7019 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…71a36831 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…af371e90 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…51c414e9 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…21a40f38 data: 0x000000000000000000…a7640000 |
| 0x4b0360…df4c37 | 7 hrs agoSun, 16 Aug 2026 14:32:24 UTC | Transfer | [0] 0x000000000000…eede78f6 [1] 0x000000000000…df526343 data: 0x000000000000000000…a7640000 |
| 0x913106…c0a7d9 | 7 hrs agoSun, 16 Aug 2026 14:07:29 UTC | 0x4cdd1e…7a54 | [0] 0x000000000000…7f209c4a [1] 0x000000000000…00000003 data: 0x000000000000000000…a4c68000 |
| 0x913106…c0a7d9 | 7 hrs agoSun, 16 Aug 2026 14:07:29 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…7f209c4a data: 0x000000000000000000…bda00000 |
| 0x525d57…6de830 | 7 hrs agoSun, 16 Aug 2026 13:46:14 UTC | 0x4cdd1e…7a54 | [0] 0x000000000000…6d220e98 [1] 0x000000000000…00000002 data: 0x000000000000000000…52634000 |
| 0x525d57…6de830 | 7 hrs agoSun, 16 Aug 2026 13:46:14 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…6d220e98 data: 0x000000000000000000…b2400000 |
| 0xba6e50…dacef3 | 14 hrs agoSun, 16 Aug 2026 06:52:03 UTC | Transfer | [0] 0x000000000000…7d21d0a4 [1] 0x000000000000…3e94cce3 data: 0x000000000000000000…dea00000 |
| 0xad7118…b34746 | 14 hrs agoSun, 16 Aug 2026 06:51:32 UTC | Approval | [0] 0x000000000000…7d21d0a4 [1] 0x000000000000…eede78f6 data: 0x000000000000000000…dea00000 |
| 0xa5793a…9947e8 | 14 hrs agoSun, 16 Aug 2026 06:50:29 UTC | Transfer | [0] 0x000000000000…7d21d0a4 [1] 0x000000000000…3e94cce3 data: 0x000000000000000000…dea00000 |
| 0x94bcde…832352 | 14 hrs agoSun, 16 Aug 2026 06:49:58 UTC | Approval | [0] 0x000000000000…7d21d0a4 [1] 0x000000000000…eede78f6 data: 0x000000000000000000…dea00000 |
| 0xbba039…5b2e4e | 15 hrs agoSun, 16 Aug 2026 06:02:01 UTC | 0x4cdd1e…7a54 | [0] 0x000000000000…00ff0767 [1] 0x000000000000…00000001 data: 0x000000000000000000…316ec000 |
| 0xbba039…5b2e4e | 15 hrs agoSun, 16 Aug 2026 06:02:01 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…00ff0767 data: 0x000000000000000000…59200000 |
| 0xfd4189…ffb6a2 | 19 hrs agoSun, 16 Aug 2026 02:42:17 UTC | 0x4cdd1e…7a54 | [0] 0x000000000000…00ff0767 [1] 0x000000000000…00000002 data: 0x000000000000000000…52634000 |
| 0xfd4189…ffb6a2 | 19 hrs agoSun, 16 Aug 2026 02:42:17 UTC | Transfer | [0] 0x000000000000…00000000 [1] 0x000000000000…00ff0767 data: 0x000000000000000000…b2400000 |
| Block | Age | Parent Transaction Hash | Type | Method | From | To | Value | |
|---|---|---|---|---|---|---|---|---|
| 38,138,787 | 4 hrs agoSun, 16 Aug 2026 17:01:13 UTC | 0x9bb002…efd9b6 | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0x0c20…b0c7 | 0.0257 ETH |
| 35,582,211 | 3 days agoThu, 13 Aug 2026 17:48:47 UTC | 0x69f7e4…d06668 | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0x0c20…b0c7 | 0.00508 ETH |
| 35,428,779 | 3 days agoThu, 13 Aug 2026 13:32:30 UTC | 0x8562fd…d1e497 | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0xd5b4…cce3 | 0.01374 ETH |
| 35,339,875 | 3 days agoThu, 13 Aug 2026 11:03:53 UTC | 0xb00068…03a7a9 | CALL | claimTokens | 0xfa34…2cc0 | OUT | 0x2740…2de7 | 0.00094 ETH |
| 35,339,777 | 3 days agoThu, 13 Aug 2026 11:03:43 UTC | 0xf8a1a3…f98f6c | CALL | claimTokens | 0xfa34…2cc0 | OUT | 0x1eb3…e4e2 | 0.00094 ETH |
| 35,339,174 | 3 days agoThu, 13 Aug 2026 11:02:44 UTC | 0xd39321…5f4727 | CALL | claimTokens | 0xfa34…2cc0 | OUT | 0x244e…06b9 | 0.00094 ETH |
| 35,339,096 | 3 days agoThu, 13 Aug 2026 11:02:36 UTC | 0x7860e9…4ad0de | CALL | claimTokens | 0xfa34…2cc0 | OUT | 0x28e6…0398 | 0.00094 ETH |
| 33,739,205 | 5 days agoTue, 11 Aug 2026 14:37:41 UTC | 0x1c67e8…52bffb | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0x0c20…b0c7 | 0.00696 ETH |
| 32,281,897 | 6 days agoSun, 09 Aug 2026 22:05:49 UTC | 0xb27a49…c548b0 | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0x0c20…b0c7 | 0.00774 ETH |
| 31,926,321 | 7 days agoSun, 09 Aug 2026 12:12:30 UTC | 0x1a0bfd…e5b65f | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0x0c20…b0c7 | 0.02228 ETH |
| 31,409,690 | 7 days agoSat, 08 Aug 2026 21:49:28 UTC | 0x3f180c…63b3eb | CALL | withdrawFees | 0xfa34…2cc0 | OUT | 0x0c20…b0c7 | 0.00186 ETH |
| Transaction Hash | Method ? | Block | Age | From | To | Amount | Txn Fee ? | ||
|---|---|---|---|---|---|---|---|---|---|
| 0x9bb002…efd9b6 | withdrawFees | 38,138,787 | 4 hrs agoSun, 16 Aug 2026 17:01:13 UTC | 0xd5b4…cce3 | IN | Hollow | $0.000 ETH | 0.00000071 | |
| 0x99c715…366296 | claimTokens | 38,087,016 | 6 hrs agoSun, 16 Aug 2026 15:34:39 UTC | 0xb4ad…14e9 | IN | Hollow | $1.870.001 ETH | 0.00000109 | |
| 0x913106…c0a7d9 | claimTokens | 38,034,876 | 7 hrs agoSun, 16 Aug 2026 14:07:29 UTC | 0x74ce…9c4a | IN | Hollow | $1.870.001 ETH | 0.00000113 | |
| 0x525d57…6de830 | claimTokens | 38,022,206 | 7 hrs agoSun, 16 Aug 2026 13:46:14 UTC | 0x6b4b…0e98 | IN | Hollow | $0.940.0005 ETH | 0.00000181 | |
| 0xad7118…b34746 | Approve | 37,774,509 | 14 hrs agoSun, 16 Aug 2026 06:51:32 UTC | 0xcf0d…d0a4 | IN | Hollow | $0.000 ETH | 0.00000113 | |
| 0x94bcde…832352 | Approve | 37,773,574 | 14 hrs agoSun, 16 Aug 2026 06:49:58 UTC | 0xcf0d…d0a4 | IN | Hollow | $0.000 ETH | 0.00000113 | |
| 0xbba039…5b2e4e | claimTokens | 37,744,931 | 15 hrs agoSun, 16 Aug 2026 06:02:01 UTC | 0xcc47…0767 | IN | Hollow | $0.560.0003 ETH | 0.00000133 | |
| 0xfd4189…ffb6a2 | claimTokens | 37,625,548 | 19 hrs agoSun, 16 Aug 2026 02:42:17 UTC | 0xcc47…0767 | IN | Hollow | $0.940.0005 ETH | 0.00000142 | |
| 0x8243f3…cf60a5 | claimTokens | 37,600,503 | 19 hrs agoSun, 16 Aug 2026 02:00:23 UTC | 0x2ec8…0766 | IN | Hollow | $1.870.001 ETH | 0.00000144 | |
| 0x90a79a…cd36aa | claimTokens | 37,556,001 | 20 hrs agoSun, 16 Aug 2026 00:46:00 UTC | 0x2ec8…0766 | IN | Hollow | $0.940.0005 ETH | 0.00000240 | |
| 0x3f5993…f6cf32 | Approve | 37,500,364 | 22 hrs agoSat, 15 Aug 2026 23:12:59 UTC | 0xbeed…d507 | IN | Hollow | $0.000 ETH | 0.00000133 | |
| 0x125c0e…7443eb | claimTokens | 37,499,744 | 22 hrs agoSat, 15 Aug 2026 23:11:58 UTC | 0xbeed…d507 | IN | Hollow | $0.940.0005 ETH | 0.00000151 | |
| 0xe91ba8…ad9f4f | claimTokens | 37,453,471 | 23 hrs agoSat, 15 Aug 2026 21:54:38 UTC | 0x8959…6e44 | IN | Hollow | $0.110.00006 ETH | 0.00000152 | |
| 0xfe0517…d76555 | claimTokens | 37,451,463 | 23 hrs agoSat, 15 Aug 2026 21:51:16 UTC | 0xa33c…64fc | IN | Hollow | $0.110.00006 ETH | 0.00000248 | |
| 0x741d12…398816 | claimTokens | 37,365,114 | 1 day agoSat, 15 Aug 2026 19:26:55 UTC | 0x8959…6e44 | IN | Hollow | $1.870.001 ETH | 0.00000257 | |
| 0x36e2f4…64268e | claimTokens | 37,283,993 | 1 day agoSat, 15 Aug 2026 17:11:28 UTC | 0x5fbf…3eb3 | IN | Hollow | $1.870.001 ETH | 0.00000262 | |
| 0x3d1d45…0f5556 | claimTokens | 37,215,790 | 1 day agoSat, 15 Aug 2026 15:17:33 UTC | 0x93f4…307a | IN | Hollow | $0.940.0005 ETH | 0.00000168 | |
| 0xb9e7ee…936378 | claimTokens | 37,102,107 | 1 day agoSat, 15 Aug 2026 12:07:34 UTC | 0xcc47…0767 | IN | Hollow | $0.940.0005 ETH | 0.00000169 | |
| 0x61340a…e38051 | claimTokens | 37,093,925 | 1 day agoSat, 15 Aug 2026 11:53:53 UTC | 0x06af…6ade | IN | Hollow | $0.110.00006 ETH | 0.00000283 | |
| 0x05aa0b…e2671b | Approve | 37,072,187 | 1 day agoSat, 15 Aug 2026 11:17:31 UTC | 0x50ab…6831 | IN | Hollow | $0.000 ETH | 0.00000150 | |
| 0x0e055f…04b772 | claimTokens | 37,065,601 | 1 day agoSat, 15 Aug 2026 11:06:31 UTC | 0x50ab…6831 | IN | Hollow | $0.110.00006 ETH | 0.00000282 | |
| 0x404d17…b90943 | claimTokens | 37,061,138 | 1 day agoSat, 15 Aug 2026 10:59:03 UTC | 0x13af…f8f0 | IN | Hollow | $1.870.001 ETH | 0.00000173 | |
| 0x240260…bcd7ed | claimTokens | 36,926,963 | 1 day agoSat, 15 Aug 2026 07:14:34 UTC | 0x74ce…9c4a | IN | Hollow | $0.940.0005 ETH | 0.00000308 | |
| 0x3f7c70…e60012 | claimTokens | 36,876,221 | 1 day agoSat, 15 Aug 2026 05:49:38 UTC | 0xcf0d…d0a4 | IN | Hollow | $1.870.001 ETH | 0.00000196 | |
| 0xa9ca51…e9494f | claimTokens | 36,852,698 | 1 day agoSat, 15 Aug 2026 05:10:18 UTC | 0x8b93…3524 | IN | Hollow | $0.110.00006 ETH | 0.00000197 |