Source Code
Overview
M Balance
M Value
$48,797.43 (@ $1.63/M)Latest 25 from a total of 26 transactions
| Transaction Hash |
|
Block
|
From
|
To
|
|||||
|---|---|---|---|---|---|---|---|---|---|
| Execute Tx | 4025192 | 53 days ago | IN | 0 M | 0.11696542 | ||||
| Confirm Tx | 4025093 | 53 days ago | IN | 0 M | 0.14807815 | ||||
| Submit Tx | 4024853 | 53 days ago | IN | 0 M | 0.2326595 | ||||
| Execute Tx | 3952911 | 59 days ago | IN | 0 M | 0.11088965 | ||||
| Confirm Tx | 3952909 | 59 days ago | IN | 0 M | 0.1481768 | ||||
| Submit Tx | 3952901 | 59 days ago | IN | 0 M | 0.16541225 | ||||
| Execute Tx | 3952895 | 59 days ago | IN | 0 M | 0.14843965 | ||||
| Confirm Tx | 3952890 | 59 days ago | IN | 0 M | 0.1481768 | ||||
| Submit Tx | 3952881 | 59 days ago | IN | 0 M | 0.1653762 | ||||
| Execute Tx | 3952834 | 59 days ago | IN | 0 M | 0.17097416 | ||||
| Confirm Tx | 3952768 | 59 days ago | IN | 0 M | 0.14095068 | ||||
| Submit Tx | 3943214 | 60 days ago | IN | 0 M | 0.2328765 | ||||
| Execute Tx | 3407761 | 103 days ago | IN | 0 M | 0.08902654 | ||||
| Submit Tx | 3407755 | 103 days ago | IN | 0 M | 0.26875436 | ||||
| Execute Tx | 3407750 | 103 days ago | IN | 0 M | 0.11614665 | ||||
| Submit Tx | 3407748 | 103 days ago | IN | 0 M | 0.26906077 | ||||
| Execute Tx | 3407736 | 103 days ago | IN | 0 M | 0.15623203 | ||||
| Submit Tx | 3407734 | 103 days ago | IN | 0 M | 0.26909681 | ||||
| Execute Tx | 3407730 | 103 days ago | IN | 0 M | 0.10497778 | ||||
| Submit Tx | 3407727 | 103 days ago | IN | 0 M | 0.26875436 | ||||
| Submit Tx | 3407660 | 103 days ago | IN | 0 M | 0.26875436 | ||||
| Execute Tx | 3407656 | 103 days ago | IN | 0 M | 0.15623203 | ||||
| Submit Tx | 3407645 | 103 days ago | IN | 0 M | 0.26909681 | ||||
| Execute Tx | 3407641 | 103 days ago | IN | 0 M | 0.156214 | ||||
| Submit Tx | 3407637 | 103 days ago | IN | 0 M | 0.29478101 |
Latest 25 internal transactions (View All)
Advanced mode:
| Parent Transaction Hash | Block | From | To | |||
|---|---|---|---|---|---|---|
| 4684255 | 1 hr ago | 0.03 M | ||||
| 4684253 | 1 hr ago | 0.03 M | ||||
| 4684251 | 1 hr ago | 0.03 M | ||||
| 4684250 | 1 hr ago | 0.03 M | ||||
| 4684248 | 1 hr ago | 0.03 M | ||||
| 4684246 | 1 hr ago | 0.03 M | ||||
| 4684244 | 1 hr ago | 0.03 M | ||||
| 4684242 | 1 hr ago | 0.03 M | ||||
| 4684240 | 1 hr ago | 0.03 M | ||||
| 4684238 | 1 hr ago | 0.03 M | ||||
| 4680529 | 8 hrs ago | 0.73477672 M | ||||
| 4680486 | 9 hrs ago | 0.06769031 M | ||||
| 4680443 | 9 hrs ago | 0.19610045 M | ||||
| 4680443 | 9 hrs ago | 0.06562373 M | ||||
| 4680358 | 9 hrs ago | 0.07482592 M | ||||
| 4680357 | 9 hrs ago | 0.11061671 M | ||||
| 4680357 | 9 hrs ago | 1.43147333 M | ||||
| 4680357 | 9 hrs ago | 0.15 M | ||||
| 4680357 | 9 hrs ago | 0.30239667 M | ||||
| 4671559 | 26 hrs ago | 0.03 M | ||||
| 4671557 | 26 hrs ago | 0.03 M | ||||
| 4671551 | 26 hrs ago | 0.03 M | ||||
| 4671549 | 26 hrs ago | 0.03 M | ||||
| 4671547 | 26 hrs ago | 0.03 M | ||||
| 4671545 | 26 hrs ago | 0.03 M |
Cross-Chain Transactions
Loading...
Loading
Similar Match Source Code This contract matches the deployed Bytecode of the Source Code for Contract 0xdA9a1297...5b9ed6056 The constructor portion of the code might be different and could alter the actual behaviour of the contract
Contract Name:
TimelockMultiSigWallet
Compiler Version
v0.8.28+commit.7893614a
Optimization Enabled:
No with 200 runs
Other Settings:
shanghai EvmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT
pragma solidity =0.8.28;
import {ITimelockMultiSigWallet} from "./ITimelockMultiSigWallet.sol";
contract TimelockMultiSigWallet is ITimelockMultiSigWallet {
uint256 public constant EXECUTED_TIMESTAMP = uint256(1);
mapping(uint256 txId => Transaction) public transactions;
mapping(uint256 txId => uint256) public timestamps;
mapping(uint256 txId => mapping(address owner => bool)) public isConfirmed;
mapping(address owner => bool) public isOwner;
address[] public owners;
uint256 public transactionCount;
uint256 public requiredConfirmations;
uint256 public minDelay;
modifier onlyOwner() {
require(isOwner[msg.sender], UnAuthorizedCaller(msg.sender));
_;
}
modifier onlyWallet() {
require(msg.sender == address(this), InvalidAccess(msg.sender));
_;
}
modifier onlyNotConfirmed(uint256 _txId) {
require(
!isConfirmed[_txId][msg.sender],
CallerAlreadyConfirmed({txId: _txId, caller: msg.sender})
);
_;
}
/**
* Transaction status
* submitted -> fullyConfirmed -> scheduled(watting, ready) -> executed
*/
modifier onlySubmittedTx(uint256 _txId) {
require(_txId < transactionCount, UnsubmittedTx(_txId));
_;
}
modifier onlyFullyConfirmed(uint256 _txId) {
require(isFullyConfirmed(_txId), NotFullyConfirmedTx(_txId));
_;
}
modifier onlyUnscheduled(uint256 _txId) {
require(
getScheduleStatus(_txId) == ScheduleStatus.Unscheduled,
UnexpectedScheduleState({
txId: _txId,
expectedState: _encodeStateBitmap(ScheduleStatus.Unscheduled)
})
);
_;
}
constructor(
address[] memory _owners,
uint256 _requiredConfirmations,
uint256 _minDelay
) {
uint256 ownersLen = _owners.length;
require(
ownersLen > 0,
OwnersLengthNotEnough({newLength: ownersLen, minimum: 1})
);
require(
_requiredConfirmations > 0 && _requiredConfirmations <= ownersLen,
InvalidRequiredConfirmations({
newRequired: _requiredConfirmations,
maximum: ownersLen
})
);
for (uint256 i = 0; i < ownersLen; i++) {
address owner = _owners[i];
require(owner != address(0), InvalidZeroAddress());
require(!isOwner[owner], DuplicateOwner(owner));
isOwner[owner] = true;
}
owners = _owners;
requiredConfirmations = _requiredConfirmations;
minDelay = _minDelay;
}
receive() external payable {
emit Deposit(msg.sender, msg.value, address(this).balance);
}
function submitTx(
address _to,
uint256 _value,
bytes calldata _data,
uint256 _delay
) external onlyOwner {
require(
_delay >= minDelay,
InsufficientDelay({delay: _delay, minDelay: minDelay})
);
uint256 txId = transactionCount;
transactions[txId] = Transaction({
to: _to,
value: _value,
data: _data,
delay: _delay
});
transactionCount++;
emit SubmitTx({txId: txId, submittedBy: msg.sender});
_confirmTx(txId);
if (requiredConfirmations == 1) _scheduleTx(txId);
}
function confirmTx(
uint256 _txId
)
external
onlyOwner
onlySubmittedTx(_txId)
onlyNotConfirmed(_txId)
onlyUnscheduled(_txId)
{
_confirmTx(_txId);
if (isFullyConfirmed(_txId)) _scheduleTx(_txId);
}
function revokeConfirmation(
uint256 _txId
) external onlyOwner onlySubmittedTx(_txId) onlyUnscheduled(_txId) {
require(
isConfirmed[_txId][msg.sender],
CallerNotConfirmed({txId: _txId, caller: msg.sender})
);
isConfirmed[_txId][msg.sender] = false;
emit RevokeConfirmation({txId: _txId, revokedBy: msg.sender});
}
/**
* @dev Changes the transaction status to 'executed' to prevent further confirmation or execution
*/
function cancelTx(uint256 _txId) public onlyWallet onlySubmittedTx(_txId) {
require(
!isScheduleExecuted(_txId),
UnexpectedScheduleState({
txId: _txId,
expectedState: _encodeStateBitmap(ScheduleStatus.Unscheduled) |
_encodeStateBitmap(ScheduleStatus.Waiting) |
_encodeStateBitmap(ScheduleStatus.Ready)
})
);
delete transactions[_txId];
timestamps[_txId] = EXECUTED_TIMESTAMP;
emit CancelTx({txId: _txId, canceledBy: msg.sender});
}
function executeTx(
uint256 _txId
) public onlyOwner onlySubmittedTx(_txId) onlyFullyConfirmed(_txId) {
Transaction storage transaction = transactions[_txId];
uint256 value = transaction.value;
uint256 balance = address(this).balance;
require(
balance >= value,
NotEnoughBalance({have: balance, need: value})
);
_beforeCall(_txId);
(bool success, bytes memory data) = transaction.to.call{value: value}(
transaction.data
);
if (!success) {
assembly {
revert(add(data, 32), mload(data))
}
}
_afterCall(_txId);
emit ExecuteTx({txId: _txId, executedBy: msg.sender});
}
function _beforeCall(uint256 _txId) private view {
require(
isScheduleReady(_txId),
UnexpectedScheduleState({
txId: _txId,
expectedState: _encodeStateBitmap(ScheduleStatus.Ready)
})
);
}
function _afterCall(uint256 _txId) private {
require(
isScheduleReady(_txId),
UnexpectedScheduleState({
txId: _txId,
expectedState: _encodeStateBitmap(ScheduleStatus.Ready)
})
);
timestamps[_txId] = EXECUTED_TIMESTAMP;
}
function addOwner(address _owner) external onlyWallet {
require(_owner != address(0), InvalidZeroAddress());
require(!isOwner[_owner], DuplicateOwner(_owner));
isOwner[_owner] = true;
owners.push(_owner);
emit AddOwner(_owner);
}
function removeOwner(address _owner) external onlyWallet {
require(isOwner[_owner], NotOwnerAddress(_owner));
uint256 newOwnerLength = owners.length - 1;
require(
newOwnerLength >= requiredConfirmations,
OwnersLengthNotEnough(newOwnerLength, requiredConfirmations)
);
isOwner[_owner] = false;
uint256 len = owners.length;
for (uint256 i = 0; i < len; i++) {
if (owners[i] == _owner) {
owners[i] = owners[len - 1];
owners.pop();
break;
}
}
emit RemoveOwner(_owner);
}
function changeOwner(
address _oldOwner,
address _newOwner
) external onlyWallet {
require(isOwner[_oldOwner], NotOwnerAddress(_oldOwner));
require(!isOwner[_newOwner], DuplicateOwner(_newOwner));
require(_newOwner != address(0), InvalidZeroAddress());
isOwner[_oldOwner] = false;
isOwner[_newOwner] = true;
uint256 len = owners.length;
for (uint256 i = 0; i < len; i++) {
if (owners[i] == _oldOwner) {
owners[i] = _newOwner;
break;
}
}
emit ChangeOwner(_oldOwner, _newOwner);
}
function changeRequiredConfirmations(uint8 _required) external onlyWallet {
uint256 maximum = owners.length;
require(
_required > 0 && _required <= maximum,
InvalidRequiredConfirmations({
newRequired: _required,
maximum: maximum
})
);
requiredConfirmations = _required;
emit ChangeRequiredConfirmations(_required);
}
function changeMinDelay(uint256 _newDelay) external onlyWallet {
minDelay = _newDelay;
emit ChangeMinDelay({oldDelay: minDelay, newDelay: _newDelay});
}
function _confirmTx(uint256 _txId) private {
isConfirmed[_txId][msg.sender] = true;
emit ConfirmTx({txId: _txId, confirmedBy: msg.sender});
}
function _scheduleTx(uint256 _txId) private {
uint256 timestamp = block.timestamp + transactions[_txId].delay;
timestamps[_txId] = timestamp;
emit ScheduleTx({txId: _txId, timestamp: timestamp});
}
function isFullyConfirmed(uint256 _txId) public view returns (bool) {
uint256 count = 0;
uint256 len = owners.length;
for (uint256 i = 0; i < len; i++) {
if (isConfirmed[_txId][owners[i]]) {
count += 1;
}
if (count == requiredConfirmations) {
return true;
}
}
return false;
}
function isSchedulePending(uint256 _txId) public view returns (bool) {
ScheduleStatus state = getScheduleStatus(_txId);
return state == ScheduleStatus.Waiting || state == ScheduleStatus.Ready;
}
function isScheduleReady(uint256 _txId) public view returns (bool) {
return getScheduleStatus(_txId) == ScheduleStatus.Ready;
}
function isScheduleExecuted(uint256 _txId) public view returns (bool) {
return getScheduleStatus(_txId) == ScheduleStatus.Executed;
}
function getConfirmCount(uint256 _txId) public view returns (uint256) {
uint256 count = 0;
uint256 len = owners.length;
for (uint256 i = 0; i < len; i++) {
if (isConfirmed[_txId][owners[i]]) {
count += 1;
}
}
return count;
}
function getScheduleStatus(
uint256 _txId
) public view returns (ScheduleStatus) {
uint256 timestamp = timestamps[_txId];
if (timestamp == 0) {
return ScheduleStatus.Unscheduled;
} else if (timestamp == EXECUTED_TIMESTAMP) {
return ScheduleStatus.Executed;
} else if (timestamp > block.timestamp) {
return ScheduleStatus.Waiting;
} else {
return ScheduleStatus.Ready;
}
}
function getTransactionsInfo(
uint256[] memory _txIds
)
external
view
returns (
ScheduleStatus[] memory status,
uint256[] memory confirmCounts,
Transaction[] memory txs
)
{
uint256 txIdsLength = _txIds.length;
require(txIdsLength > 0);
status = new ScheduleStatus[](txIdsLength);
confirmCounts = new uint256[](txIdsLength);
txs = new Transaction[](txIdsLength);
for (uint256 i = 0; i < txIdsLength; i++) {
uint256 id = _txIds[i];
status[i] = getScheduleStatus(id);
confirmCounts[i] = getConfirmCount(id);
txs[i] = transactions[id];
}
}
function getOwnersLen() external view returns (uint256) {
return owners.length;
}
function getOwners() external view returns (address[] memory) {
return owners;
}
/**
* 0x000...1000
* ^^^^^^----- ...
* ^---- Executed
* ^--- Ready
* ^-- Waiting
* ^- Unscheduled
*/
function _encodeStateBitmap(
ScheduleStatus _scheduleStatus
) private pure returns (bytes32) {
return bytes32(1 << uint8(_scheduleStatus));
}
}// SPDX-License-Identifier: MIT
pragma solidity =0.8.28;
interface ITimelockMultiSigWallet {
struct Transaction {
address to;
uint256 value;
uint256 delay;
bytes data;
}
enum ScheduleStatus {
Unscheduled,
Waiting,
Ready,
Executed
}
// events
event SubmitTx(uint256 indexed txId, address indexed submittedBy);
event ConfirmTx(uint256 indexed txId, address indexed confirmedBy);
event RevokeConfirmation(uint256 indexed txId, address indexed revokedBy);
event ScheduleTx(uint256 indexed txId, uint256 timestamp);
event CancelTx(uint256 indexed txId, address indexed canceledBy);
event AddOwner(address indexed owner);
event ChangeMinDelay(uint256 oldDelay, uint256 newDelay);
event ChangeOwner(address indexed oldOwner, address indexed newOwner);
event ChangeRequiredConfirmations(uint8 required);
event Deposit(address indexed sender, uint256 amount, uint256 balance);
event ExecuteTx(uint256 indexed txId, address indexed executedBy);
event RemoveOwner(address indexed revokedOwner);
// errors
error UnAuthorizedCaller(address caller);
error InvalidAccess(address caller);
error CallerAlreadyConfirmed(uint256 txId, address caller);
error CallerNotConfirmed(uint256 txId, address caller);
error UnsubmittedTx(uint256 txId);
error NotFullyConfirmedTx(uint256 txId);
error UnexpectedScheduleState(uint256 txId, bytes32 expectedState);
error NotEnoughBalance(uint256 have, uint256 need);
error InvalidZeroAddress();
error NotOwnerAddress(address addr);
error DuplicateOwner(address addr);
error OwnersLengthNotEnough(uint256 newLength, uint256 minimum);
error InvalidRequiredConfirmations(uint256 newRequired, uint256 maximum);
error InsufficientDelay(uint256 delay, uint256 minDelay);
// functions
receive() external payable;
function EXECUTED_TIMESTAMP() external view returns (uint256);
function addOwner(address _owner) external;
function cancelTx(uint256 _txId) external;
function changeMinDelay(uint256 _newDelay) external;
function changeOwner(address _oldOwner, address _newOwner) external;
function changeRequiredConfirmations(uint8 _required) external;
function confirmTx(uint256 _txId) external;
function executeTx(uint256 _txId) external;
function getConfirmCount(uint256 _txId) external view returns (uint256);
function getOwners() external view returns (address[] memory);
function getOwnersLen() external view returns (uint256);
function getScheduleStatus(
uint256 _txId
) external view returns (ITimelockMultiSigWallet.ScheduleStatus);
function isConfirmed(
uint256 txId,
address owner
) external view returns (bool);
function isFullyConfirmed(uint256 _txId) external view returns (bool);
function isOwner(address owner) external view returns (bool);
function isScheduleExecuted(uint256 _txId) external view returns (bool);
function isSchedulePending(uint256 _txId) external view returns (bool);
function isScheduleReady(uint256 _txId) external view returns (bool);
function minDelay() external view returns (uint256);
function owners(uint256) external view returns (address);
function removeOwner(address _owner) external;
function requiredConfirmations() external view returns (uint256);
function revokeConfirmation(uint256 _txId) external;
function submitTx(
address _to,
uint256 _value,
bytes memory _data,
uint256 _delay
) external;
function timestamps(uint256 txId) external view returns (uint256);
function transactionCount() external view returns (uint256);
function transactions(
uint256 txId
)
external
view
returns (address to, uint256 value, uint256 delay, bytes memory data);
function getTransactionsInfo(
uint256[] memory _txIds
)
external
view
returns (
ScheduleStatus[] memory status,
uint256[] memory confirmCounts,
Transaction[] memory txs
);
}{
"remappings": [
"@openzeppelin/contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/contracts/",
"@openzeppelin/contracts/=lib/openzeppelin-contracts/contracts/",
"ds-test/=lib/openzeppelin-contracts-upgradeable/lib/forge-std/lib/ds-test/src/",
"erc4626-tests/=lib/openzeppelin-contracts-upgradeable/lib/erc4626-tests/",
"forge-std/=lib/forge-std/src/",
"halmos-cheatcodes/=lib/openzeppelin-contracts-upgradeable/lib/halmos-cheatcodes/src/",
"openzeppelin-contracts-upgradeable/=lib/openzeppelin-contracts-upgradeable/",
"openzeppelin-contracts/=lib/openzeppelin-contracts/"
],
"optimizer": {
"enabled": false,
"runs": 200
},
"metadata": {
"useLiteralContent": false,
"bytecodeHash": "ipfs",
"appendCBOR": true
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"evmVersion": "shanghai",
"viaIR": false,
"libraries": {}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address[]","name":"_owners","type":"address[]"},{"internalType":"uint256","name":"_requiredConfirmations","type":"uint256"},{"internalType":"uint256","name":"_minDelay","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"},{"internalType":"address","name":"caller","type":"address"}],"name":"CallerAlreadyConfirmed","type":"error"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"},{"internalType":"address","name":"caller","type":"address"}],"name":"CallerNotConfirmed","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"DuplicateOwner","type":"error"},{"inputs":[{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"uint256","name":"minDelay","type":"uint256"}],"name":"InsufficientDelay","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"InvalidAccess","type":"error"},{"inputs":[{"internalType":"uint256","name":"newRequired","type":"uint256"},{"internalType":"uint256","name":"maximum","type":"uint256"}],"name":"InvalidRequiredConfirmations","type":"error"},{"inputs":[],"name":"InvalidZeroAddress","type":"error"},{"inputs":[{"internalType":"uint256","name":"have","type":"uint256"},{"internalType":"uint256","name":"need","type":"uint256"}],"name":"NotEnoughBalance","type":"error"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"NotFullyConfirmedTx","type":"error"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"NotOwnerAddress","type":"error"},{"inputs":[{"internalType":"uint256","name":"newLength","type":"uint256"},{"internalType":"uint256","name":"minimum","type":"uint256"}],"name":"OwnersLengthNotEnough","type":"error"},{"inputs":[{"internalType":"address","name":"caller","type":"address"}],"name":"UnAuthorizedCaller","type":"error"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"},{"internalType":"bytes32","name":"expectedState","type":"bytes32"}],"name":"UnexpectedScheduleState","type":"error"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"UnsubmittedTx","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"}],"name":"AddOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"canceledBy","type":"address"}],"name":"CancelTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"oldDelay","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newDelay","type":"uint256"}],"name":"ChangeMinDelay","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"ChangeOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint8","name":"required","type":"uint8"}],"name":"ChangeRequiredConfirmations","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"confirmedBy","type":"address"}],"name":"ConfirmTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Deposit","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"executedBy","type":"address"}],"name":"ExecuteTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"revokedOwner","type":"address"}],"name":"RemoveOwner","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"revokedBy","type":"address"}],"name":"RevokeConfirmation","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"timestamp","type":"uint256"}],"name":"ScheduleTx","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"txId","type":"uint256"},{"indexed":true,"internalType":"address","name":"submittedBy","type":"address"}],"name":"SubmitTx","type":"event"},{"inputs":[],"name":"EXECUTED_TIMESTAMP","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"addOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"cancelTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newDelay","type":"uint256"}],"name":"changeMinDelay","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_oldOwner","type":"address"},{"internalType":"address","name":"_newOwner","type":"address"}],"name":"changeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"_required","type":"uint8"}],"name":"changeRequiredConfirmations","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"confirmTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"executeTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"getConfirmCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwners","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getOwnersLen","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"getScheduleStatus","outputs":[{"internalType":"enum ITimelockMultiSigWallet.ScheduleStatus","name":"","type":"uint8"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"_txIds","type":"uint256[]"}],"name":"getTransactionsInfo","outputs":[{"internalType":"enum ITimelockMultiSigWallet.ScheduleStatus[]","name":"status","type":"uint8[]"},{"internalType":"uint256[]","name":"confirmCounts","type":"uint256[]"},{"components":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"internalType":"struct ITimelockMultiSigWallet.Transaction[]","name":"txs","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"isConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"isFullyConfirmed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"isScheduleExecuted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"isSchedulePending","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"isScheduleReady","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"minDelay","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"owners","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"removeOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"requiredConfirmations","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_txId","type":"uint256"}],"name":"revokeConfirmation","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_value","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"},{"internalType":"uint256","name":"_delay","type":"uint256"}],"name":"submitTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"timestamps","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"transactionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"txId","type":"uint256"}],"name":"transactions","outputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"value","type":"uint256"},{"internalType":"uint256","name":"delay","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"stateMutability":"view","type":"function"},{"stateMutability":"payable","type":"receive"}]Contract Creation Code
0x608060405234801561000f575f5ffd5b50604051613fa4380380613fa483398181016040528101906100319190610517565b5f835190505f8111816001909161007f576040517f5138739c0000000000000000000000000000000000000000000000000000000081526004016100769291906105d4565b60405180910390fd5b50505f831180156100905750808311155b838290916100d5576040517fe2689b040000000000000000000000000000000000000000000000000000000081526004016100cc9291906105fb565b60405180910390fd5b50505f5f90505b81811015610258575f8582815181106100f8576100f7610622565b5b602002602001015190505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610167576040517ff6b2911f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161581906101f4576040517f2029bc650000000000000000000000000000000000000000000000000000000081526004016101eb919061065e565b60405180910390fd5b50600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505080806001019150506100dc565b50836004908051906020019061026f929190610287565b50826006819055508160078190555050505050610677565b828054828255905f5260205f209081019282156102fd579160200282015b828111156102fc578251825f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550916020019190600101906102a5565b5b50905061030a919061030e565b5090565b5b80821115610325575f815f90555060010161030f565b5090565b5f604051905090565b5f5ffd5b5f5ffd5b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b6103848261033e565b810181811067ffffffffffffffff821117156103a3576103a261034e565b5b80604052505050565b5f6103b5610329565b90506103c1828261037b565b919050565b5f67ffffffffffffffff8211156103e0576103df61034e565b5b602082029050602081019050919050565b5f5ffd5b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f61041e826103f5565b9050919050565b61042e81610414565b8114610438575f5ffd5b50565b5f8151905061044981610425565b92915050565b5f61046161045c846103c6565b6103ac565b90508083825260208201905060208402830185811115610484576104836103f1565b5b835b818110156104ad5780610499888261043b565b845260208401935050602081019050610486565b5050509392505050565b5f82601f8301126104cb576104ca61033a565b5b81516104db84826020860161044f565b91505092915050565b5f819050919050565b6104f6816104e4565b8114610500575f5ffd5b50565b5f81519050610511816104ed565b92915050565b5f5f5f6060848603121561052e5761052d610332565b5b5f84015167ffffffffffffffff81111561054b5761054a610336565b5b610557868287016104b7565b935050602061056886828701610503565b925050604061057986828701610503565b9150509250925092565b61058c816104e4565b82525050565b5f819050919050565b5f819050919050565b5f6105be6105b96105b484610592565b61059b565b6104e4565b9050919050565b6105ce816105a4565b82525050565b5f6040820190506105e75f830185610583565b6105f460208301846105c5565b9392505050565b5f60408201905061060e5f830185610583565b61061b6020830184610583565b9392505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b61065881610414565b82525050565b5f6020820190506106715f83018461064f565b92915050565b613920806106845f395ff3fe6080604052600436106101ba575f3560e01c806380be9696116100eb578063a452304211610089578063d0b6a17d11610063578063d0b6a17d146106c0578063f00d4b5d146106e8578063f079630414610710578063fc5616f81461073a57610211565b8063a452304214610644578063b77bf6001461066c578063c63c4e9b1461069657610211565b80638bc33af3116100c55780638bc33af3146105775780639749b368146105b35780639ace38c2146105db578063a0e67e2b1461061a57610211565b806380be9696146104d557806380f59a651461051157806382e717f71461054d57610211565b80634d07ffd11161015857806366670bc91161013257806366670bc91461040d5780636e7afa34146104495780637065cb4814610485578063801be060146104ad57610211565b80634d07ffd11461038157806354b5fe80146103bd57806357b055bc146103e557610211565b8063173825d911610194578063173825d9146102cb57806319089490146102f357806320ea8d861461031d5780632f54bf6e1461034557610211565b8063025e7c2714610215578063088440bf1461025157806309a3c0781461028d57610211565b36610211573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15344760405161020792919061294c565b60405180910390a2005b5f5ffd5b348015610220575f5ffd5b5061023b600480360381019061023691906129ae565b610776565b6040516102489190612a18565b60405180910390f35b34801561025c575f5ffd5b50610277600480360381019061027291906129ae565b6107b1565b6040516102849190612a31565b60405180910390f35b348015610298575f5ffd5b506102b360048036038101906102ae9190612b9a565b61088d565b6040516102c293929190612f57565b60405180910390f35b3480156102d6575f5ffd5b506102f160048036038101906102ec9190612fcb565b610b77565b005b3480156102fe575f5ffd5b50610307610ef2565b6040516103149190612a31565b60405180910390f35b348015610328575f5ffd5b50610343600480360381019061033e91906129ae565b610efe565b005b348015610350575f5ffd5b5061036b60048036038101906103669190612fcb565b61119f565b6040516103789190613010565b60405180910390f35b34801561038c575f5ffd5b506103a760048036038101906103a291906129ae565b6111bc565b6040516103b49190613038565b60405180910390f35b3480156103c8575f5ffd5b506103e360048036038101906103de91906129ae565b611211565b005b3480156103f0575f5ffd5b5061040b600480360381019061040691906129ae565b61149c565b005b348015610418575f5ffd5b50610433600480360381019061042e91906129ae565b611679565b6040516104409190613010565b60405180910390f35b348015610454575f5ffd5b5061046f600480360381019061046a91906129ae565b6116b1565b60405161047c9190613010565b60405180910390f35b348015610490575f5ffd5b506104ab60048036038101906104a69190612fcb565b6117a3565b005b3480156104b8575f5ffd5b506104d360048036038101906104ce91906129ae565b611a03565b005b3480156104e0575f5ffd5b506104fb60048036038101906104f691906129ae565b611c21565b6040516105089190613010565b60405180910390f35b34801561051c575f5ffd5b5061053760048036038101906105329190613051565b611c8d565b6040516105449190613010565b60405180910390f35b348015610558575f5ffd5b50610561611cb7565b60405161056e9190612a31565b60405180910390f35b348015610582575f5ffd5b5061059d600480360381019061059891906129ae565b611cbd565b6040516105aa9190612a31565b60405180910390f35b3480156105be575f5ffd5b506105d960048036038101906105d491906129ae565b611cd2565b005b3480156105e6575f5ffd5b5061060160048036038101906105fc91906129ae565b611d89565b60405161061194939291906130d7565b60405180910390f35b348015610625575f5ffd5b5061062e611e59565b60405161063b91906131c9565b60405180910390f35b34801561064f575f5ffd5b5061066a6004803603810190610665919061321f565b611ee4565b005b348015610677575f5ffd5b50610680612000565b60405161068d9190612a31565b60405180910390f35b3480156106a1575f5ffd5b506106aa612006565b6040516106b79190612a31565b60405180910390f35b3480156106cb575f5ffd5b506106e660048036038101906106e191906132a3565b61200c565b005b3480156106f3575f5ffd5b5061070e60048036038101906107099190613327565b612269565b005b34801561071b575f5ffd5b50610724612654565b6040516107319190612a31565b60405180910390f35b348015610745575f5ffd5b50610760600480360381019061075b91906129ae565b612659565b60405161076d9190613010565b60405180910390f35b60048181548110610785575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f90505f60048054905090505f5f90505b818110156108825760025f8681526020019081526020015f205f600483815481106107f2576107f1613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156108755760018361087291906133bf565b92505b80806001019150506107c4565b508192505050919050565b60608060605f845190505f81116108a2575f5ffd5b8067ffffffffffffffff8111156108bc576108bb612a5e565b5b6040519080825280602002602001820160405280156108ea5781602001602082028036833780820191505090505b5093508067ffffffffffffffff81111561090757610906612a5e565b5b6040519080825280602002602001820160405280156109355781602001602082028036833780820191505090505b5092508067ffffffffffffffff81111561095257610951612a5e565b5b60405190808252806020026020018201604052801561098b57816020015b6109786128a1565b8152602001906001900390816109705790505b5091505f5f90505b81811015610b6e575f8682815181106109af576109ae613365565b5b602002602001015190506109c2816111bc565b8683815181106109d5576109d4613365565b5b602002602001019060038111156109ef576109ee612c0a565b5b90816003811115610a0357610a02612c0a565b5b81525050610a10816107b1565b858381518110610a2357610a22613365565b5b6020026020010181815250505f5f8281526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382018054610ac29061341f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aee9061341f565b8015610b395780601f10610b1057610100808354040283529160200191610b39565b820191905f5260205f20905b815481529060010190602001808311610b1c57829003601f168201915b505050505081525050848381518110610b5557610b54613365565b5b6020026020010181905250508080600101915050610993565b50509193909250565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390610be8576040517f84fa6f71000000000000000000000000000000000000000000000000000000008152600401610bdf9190612a18565b60405180910390fd5b5060035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168190610c75576040517fa5a3ffb9000000000000000000000000000000000000000000000000000000008152600401610c6c9190612a18565b60405180910390fd5b505f6001600480549050610c89919061344f565b9050600654811015816006549091610cd8576040517f5138739c000000000000000000000000000000000000000000000000000000008152600401610ccf92919061294c565b60405180910390fd5b50505f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60048054905090505f5f90505b81811015610ea9578373ffffffffffffffffffffffffffffffffffffffff1660048281548110610d6f57610d6e613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e9c576004600183610dc1919061344f565b81548110610dd257610dd1613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048281548110610e0e57610e0d613365565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004805480610e6557610e64613482565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ea9565b8080600101915050610d3c565b508273ffffffffffffffffffffffffffffffffffffffff167fac6e8398676cf37429d530b81144d7079e99f4fe9d28b0d88c4a749ceccbe8cd60405160405180910390a2505050565b5f600480549050905090565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff163390610f8a576040517f0b104a5b000000000000000000000000000000000000000000000000000000008152600401610f819190612a18565b60405180910390fd5b508060055481108190610fd3576040517ff2b9c630000000000000000000000000000000000000000000000000000000008152600401610fca9190612a31565b60405180910390fd5b50815f6003811115610fe857610fe7612c0a565b5b610ff1826111bc565b600381111561100357611002612c0a565b5b148161100e5f612690565b9091611051576040517fc7af9e5d0000000000000000000000000000000000000000000000000000000081526004016110489291906134c7565b60405180910390fd5b505060025f8481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16833390916110f1576040517f24789aae0000000000000000000000000000000000000000000000000000000081526004016110e89291906134ee565b60405180910390fd5b50505f60025f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16837f7f8ce8e4f5a5b480ff78c18404639350996fd63efc83ace55b1d6a3e12158e2460405160405180910390a3505050565b6003602052805f5260405f205f915054906101000a900460ff1681565b5f5f60015f8481526020019081526020015f205490505f81036111e2575f91505061120c565b600181036111f457600391505061120c565b4281111561120657600191505061120c565b60029150505b919050565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16339061129d576040517f0b104a5b0000000000000000000000000000000000000000000000000000000081526004016112949190612a18565b60405180910390fd5b5080600554811081906112e6576040517ff2b9c6300000000000000000000000000000000000000000000000000000000081526004016112dd9190612a31565b60405180910390fd5b50816112f1816116b1565b8190611333576040517f6fc639ef00000000000000000000000000000000000000000000000000000000815260040161132a9190612a31565b60405180910390fd5b505f5f5f8581526020019081526020015f2090505f816001015490505f479050818110158183909161139c576040517f8f0f420600000000000000000000000000000000000000000000000000000000815260040161139392919061294c565b60405180910390fd5b50506113a7866126b4565b5f5f845f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684866003016040516113f491906135b1565b5f6040518083038185875af1925050503d805f811461142e576040519150601f19603f3d011682016040523d82523d5f602084013e611433565b606091505b50915091508161144557805160208201fd5b61144e88612710565b3373ffffffffffffffffffffffffffffffffffffffff16887fd4e99b6d5236f3c2f82c63c57342d13eb032719450bf3ca7680839cc7fdc24c960405160405180910390a35050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614339061150d576040517f84fa6f710000000000000000000000000000000000000000000000000000000081526004016115049190612a18565b60405180910390fd5b508060055481108190611556576040517ff2b9c63000000000000000000000000000000000000000000000000000000000815260040161154d9190612a31565b60405180910390fd5b5061156082612659565b158261156c6002612690565b6115766001612690565b61157f5f612690565b171790916115c4576040517fc7af9e5d0000000000000000000000000000000000000000000000000000000081526004016115bb9291906134c7565b60405180910390fd5b50505f5f8381526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f9055600382015f61161991906128dc565b50506001805f8481526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff16827fe0246fa20caffde99aa81aaa27d0eb4993a6e5caae34ac12c7e513aed1ae0abe60405160405180910390a35050565b5f6002600381111561168e5761168d612c0a565b5b611697836111bc565b60038111156116a9576116a8612c0a565b5b149050919050565b5f5f5f90505f60048054905090505f5f90505b818110156117975760025f8681526020019081526020015f205f600483815481106116f2576116f1613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156117755760018361177291906133bf565b92505b600654830361178a576001935050505061179e565b80806001019150506116c4565b505f925050505b919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390611814576040517f84fa6f7100000000000000000000000000000000000000000000000000000000815260040161180b9190612a18565b60405180910390fd5b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187a576040517ff6b2911f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158190611907576040517f2029bc650000000000000000000000000000000000000000000000000000000081526004016118fe9190612a18565b60405180910390fd5b50600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fac1e9ef41b54c676ccf449d83ae6f2624bcdce8f5b93a6b48ce95874c332693d60405160405180910390a250565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff163390611a8f576040517f0b104a5b000000000000000000000000000000000000000000000000000000008152600401611a869190612a18565b60405180910390fd5b508060055481108190611ad8576040517ff2b9c630000000000000000000000000000000000000000000000000000000008152600401611acf9190612a31565b60405180910390fd5b508160025f8281526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161581339091611b79576040517f140415cb000000000000000000000000000000000000000000000000000000008152600401611b709291906134ee565b60405180910390fd5b5050825f6003811115611b8f57611b8e612c0a565b5b611b98826111bc565b6003811115611baa57611ba9612c0a565b5b1481611bb55f612690565b9091611bf8576040517fc7af9e5d000000000000000000000000000000000000000000000000000000008152600401611bef9291906134c7565b60405180910390fd5b5050611c0384612782565b611c0c846116b1565b15611c1b57611c1a8461282d565b5b50505050565b5f5f611c2c836111bc565b905060016003811115611c4257611c41612c0a565b5b816003811115611c5557611c54612c0a565b5b1480611c85575060026003811115611c7057611c6f612c0a565b5b816003811115611c8357611c82612c0a565b5b145b915050919050565b6002602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60065481565b6001602052805f5260405f205f915090505481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390611d43576040517f84fa6f71000000000000000000000000000000000000000000000000000000008152600401611d3a9190612a18565b60405180910390fd5b50806007819055507f0c5ff76c31d24175d9e84ef46e328eafbcaeb2aa67a2333035eb082dd34324f160075482604051611d7e92919061294c565b60405180910390a150565b5f602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003018054611dd89061341f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e049061341f565b8015611e4f5780601f10611e2657610100808354040283529160200191611e4f565b820191905f5260205f20905b815481529060010190602001808311611e3257829003601f168201915b5050505050905084565b60606004805480602002602001604051908101604052809291908181526020018280548015611eda57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611e91575b5050505050905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390611f55576040517f84fa6f71000000000000000000000000000000000000000000000000000000008152600401611f4c9190612a18565b60405180910390fd5b505f60048054905090505f8260ff16118015611f745750808260ff1611155b82829091611fb9576040517fe2689b04000000000000000000000000000000000000000000000000000000008152600401611fb0929190613600565b60405180910390fd5b50508160ff166006819055507f588dc25a3a4ef20c1e02fa5c2a887c852caf685c49563793b7b4bef9a5a169a182604051611ff49190613636565b60405180910390a15050565b60055481565b60075481565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff163390612098576040517f0b104a5b00000000000000000000000000000000000000000000000000000000815260040161208f9190612a18565b60405180910390fd5b506007548110158160075490916120e6576040517f48b6d3db0000000000000000000000000000000000000000000000000000000081526004016120dd92919061294c565b60405180910390fd5b50505f600554905060405180608001604052808773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200183815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508152505f5f8381526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030190816121e591906137d4565b5090505060055f8154809291906121fb906138a3565b91905055503373ffffffffffffffffffffffffffffffffffffffff16817fd5e71018e2b150e81bc29178fcd2d986031492eb90f4f87287c251f3c41aea7260405160405180910390a361224d81612782565b600160065403612261576122608161282d565b5b505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161433906122da576040517f84fa6f710000000000000000000000000000000000000000000000000000000081526004016122d19190612a18565b60405180910390fd5b5060035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168290612367576040517fa5a3ffb900000000000000000000000000000000000000000000000000000000815260040161235e9190612a18565b60405180910390fd5b5060035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161581906123f5576040517f2029bc650000000000000000000000000000000000000000000000000000000081526004016123ec9190612a18565b60405180910390fd5b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361245b576040517ff6b2911f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60048054905090505f5f90505b818110156125f4578373ffffffffffffffffffffffffffffffffffffffff166004828154811061254557612544613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125e757826004828154811061259d5761259c613365565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125f4565b8080600101915050612512565b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9aecf86140d81442289f667eb72e1202a8fbb3478a686659952e145e8531965660405160405180910390a3505050565b600181565b5f60038081111561266d5761266c612c0a565b5b612676836111bc565b600381111561268857612687612c0a565b5b149050919050565b5f8160038111156126a4576126a3612c0a565b5b60ff166001901b5f1b9050919050565b6126bd81611679565b816126c86002612690565b909161270b576040517fc7af9e5d0000000000000000000000000000000000000000000000000000000081526004016127029291906134c7565b60405180910390fd5b505050565b61271981611679565b816127246002612690565b9091612767576040517fc7af9e5d00000000000000000000000000000000000000000000000000000000815260040161275e9291906134c7565b60405180910390fd5b50506001805f8381526020019081526020015f208190555050565b600160025f8381526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16817f6e5d64ddafdd31fc9a91822d05f1eaa7b8cefdd22ecca7786b2132dac74edf1960405160405180910390a350565b5f5f5f8381526020019081526020015f20600201544261284d91906133bf565b90508060015f8481526020019081526020015f2081905550817f193d02e3f35c67d210003621d4b64601dc382c6a91d9b6430109303b540fb9af826040516128959190612a31565b60405180910390a25050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f8152602001606081525090565b5080546128e89061341f565b5f825580601f106128f95750612916565b601f0160209004905f5260205f20908101906129159190612919565b5b50565b5b80821115612930575f815f90555060010161291a565b5090565b5f819050919050565b61294681612934565b82525050565b5f60408201905061295f5f83018561293d565b61296c602083018461293d565b9392505050565b5f604051905090565b5f5ffd5b5f5ffd5b61298d81612934565b8114612997575f5ffd5b50565b5f813590506129a881612984565b92915050565b5f602082840312156129c3576129c261297c565b5b5f6129d08482850161299a565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a02826129d9565b9050919050565b612a12816129f8565b82525050565b5f602082019050612a2b5f830184612a09565b92915050565b5f602082019050612a445f83018461293d565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612a9482612a4e565b810181811067ffffffffffffffff82111715612ab357612ab2612a5e565b5b80604052505050565b5f612ac5612973565b9050612ad18282612a8b565b919050565b5f67ffffffffffffffff821115612af057612aef612a5e565b5b602082029050602081019050919050565b5f5ffd5b5f612b17612b1284612ad6565b612abc565b90508083825260208201905060208402830185811115612b3a57612b39612b01565b5b835b81811015612b635780612b4f888261299a565b845260208401935050602081019050612b3c565b5050509392505050565b5f82601f830112612b8157612b80612a4a565b5b8135612b91848260208601612b05565b91505092915050565b5f60208284031215612baf57612bae61297c565b5b5f82013567ffffffffffffffff811115612bcc57612bcb612980565b5b612bd884828501612b6d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60048110612c4857612c47612c0a565b5b50565b5f819050612c5882612c37565b919050565b5f612c6782612c4b565b9050919050565b612c7781612c5d565b82525050565b5f612c888383612c6e565b60208301905092915050565b5f602082019050919050565b5f612caa82612be1565b612cb48185612beb565b9350612cbf83612bfb565b805f5b83811015612cef578151612cd68882612c7d565b9750612ce183612c94565b925050600181019050612cc2565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d2e81612934565b82525050565b5f612d3f8383612d25565b60208301905092915050565b5f602082019050919050565b5f612d6182612cfc565b612d6b8185612d06565b9350612d7683612d16565b805f5b83811015612da6578151612d8d8882612d34565b9750612d9883612d4b565b925050600181019050612d79565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612de5816129f8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e22578082015181840152602081019050612e07565b5f8484015250505050565b5f612e3782612deb565b612e418185612df5565b9350612e51818560208601612e05565b612e5a81612a4e565b840191505092915050565b5f608083015f830151612e7a5f860182612ddc565b506020830151612e8d6020860182612d25565b506040830151612ea06040860182612d25565b5060608301518482036060860152612eb88282612e2d565b9150508091505092915050565b5f612ed08383612e65565b905092915050565b5f602082019050919050565b5f612eee82612db3565b612ef88185612dbd565b935083602082028501612f0a85612dcd565b805f5b85811015612f455784840389528151612f268582612ec5565b9450612f3183612ed8565b925060208a01995050600181019050612f0d565b50829750879550505050505092915050565b5f6060820190508181035f830152612f6f8186612ca0565b90508181036020830152612f838185612d57565b90508181036040830152612f978184612ee4565b9050949350505050565b612faa816129f8565b8114612fb4575f5ffd5b50565b5f81359050612fc581612fa1565b92915050565b5f60208284031215612fe057612fdf61297c565b5b5f612fed84828501612fb7565b91505092915050565b5f8115159050919050565b61300a81612ff6565b82525050565b5f6020820190506130235f830184613001565b92915050565b61303281612c5d565b82525050565b5f60208201905061304b5f830184613029565b92915050565b5f5f604083850312156130675761306661297c565b5b5f6130748582860161299a565b925050602061308585828601612fb7565b9150509250929050565b5f82825260208201905092915050565b5f6130a982612deb565b6130b3818561308f565b93506130c3818560208601612e05565b6130cc81612a4e565b840191505092915050565b5f6080820190506130ea5f830187612a09565b6130f7602083018661293d565b613104604083018561293d565b8181036060830152613116818461309f565b905095945050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6131558383612ddc565b60208301905092915050565b5f602082019050919050565b5f61317782613121565b613181818561312b565b935061318c8361313b565b805f5b838110156131bc5781516131a3888261314a565b97506131ae83613161565b92505060018101905061318f565b5085935050505092915050565b5f6020820190508181035f8301526131e1818461316d565b905092915050565b5f60ff82169050919050565b6131fe816131e9565b8114613208575f5ffd5b50565b5f81359050613219816131f5565b92915050565b5f602082840312156132345761323361297c565b5b5f6132418482850161320b565b91505092915050565b5f5ffd5b5f5f83601f84011261326357613262612a4a565b5b8235905067ffffffffffffffff8111156132805761327f61324a565b5b60208301915083600182028301111561329c5761329b612b01565b5b9250929050565b5f5f5f5f5f608086880312156132bc576132bb61297c565b5b5f6132c988828901612fb7565b95505060206132da8882890161299a565b945050604086013567ffffffffffffffff8111156132fb576132fa612980565b5b6133078882890161324e565b9350935050606061331a8882890161299a565b9150509295509295909350565b5f5f6040838503121561333d5761333c61297c565b5b5f61334a85828601612fb7565b925050602061335b85828601612fb7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c982612934565b91506133d483612934565b92508282019050808211156133ec576133eb613392565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061343657607f821691505b602082108103613449576134486133f2565b5b50919050565b5f61345982612934565b915061346483612934565b925082820390508181111561347c5761347b613392565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f819050919050565b6134c1816134af565b82525050565b5f6040820190506134da5f83018561293d565b6134e760208301846134b8565b9392505050565b5f6040820190506135015f83018561293d565b61350e6020830184612a09565b9392505050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815461353d8161341f565b6135478186613515565b9450600182165f81146135615760018114613576576135a8565b60ff19831686528115158202860193506135a8565b61357f8561351f565b5f5b838110156135a057815481890152600182019150602081019050613581565b838801955050505b50505092915050565b5f6135bc8284613531565b915081905092915050565b5f819050919050565b5f6135ea6135e56135e0846131e9565b6135c7565b612934565b9050919050565b6135fa816135d0565b82525050565b5f6040820190506136135f8301856135f1565b613620602083018461293d565b9392505050565b613630816131e9565b82525050565b5f6020820190506136495f830184613627565b92915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261365e565b6136a3868361365e565b95508019841693508086168417925050509392505050565b5f6136d56136d06136cb84612934565b6135c7565b612934565b9050919050565b5f819050919050565b6136ee836136bb565b6137026136fa826136dc565b84845461366a565b825550505050565b5f5f905090565b61371961370a565b6137248184846136e5565b505050565b5b818110156137475761373c5f82613711565b60018101905061372a565b5050565b601f82111561378c5761375d8161351f565b6137668461364f565b81016020851015613775578190505b6137896137818561364f565b830182613729565b50505b505050565b5f82821c905092915050565b5f6137ac5f1984600802613791565b1980831691505092915050565b5f6137c4838361379d565b9150826002028217905092915050565b6137dd82612deb565b67ffffffffffffffff8111156137f6576137f5612a5e565b5b613800825461341f565b61380b82828561374b565b5f60209050601f83116001811461383c575f841561382a578287015190505b61383485826137b9565b86555061389b565b601f19841661384a8661351f565b5f5b828110156138715784890151825560018201915060208501945060208101905061384c565b8683101561388e578489015161388a601f89168261379d565b8355505b6001600288020188555050505b505050505050565b5f6138ad82612934565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138df576138de613392565b5b60018201905091905056fea26469706673582212208aef71fc9bc74eac75f5668bbba1a8aea5f92f961d3ceb3e33f7aba83442182264736f6c634300081c0033000000000000000000000000000000000000000000000000000000000000006000000000000000000000000000000000000000000000000000000000000000010000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000100000000000000000000000095c1d550108e5e4e00f6db0fc6b95f4197461800
Deployed Bytecode
0x6080604052600436106101ba575f3560e01c806380be9696116100eb578063a452304211610089578063d0b6a17d11610063578063d0b6a17d146106c0578063f00d4b5d146106e8578063f079630414610710578063fc5616f81461073a57610211565b8063a452304214610644578063b77bf6001461066c578063c63c4e9b1461069657610211565b80638bc33af3116100c55780638bc33af3146105775780639749b368146105b35780639ace38c2146105db578063a0e67e2b1461061a57610211565b806380be9696146104d557806380f59a651461051157806382e717f71461054d57610211565b80634d07ffd11161015857806366670bc91161013257806366670bc91461040d5780636e7afa34146104495780637065cb4814610485578063801be060146104ad57610211565b80634d07ffd11461038157806354b5fe80146103bd57806357b055bc146103e557610211565b8063173825d911610194578063173825d9146102cb57806319089490146102f357806320ea8d861461031d5780632f54bf6e1461034557610211565b8063025e7c2714610215578063088440bf1461025157806309a3c0781461028d57610211565b36610211573373ffffffffffffffffffffffffffffffffffffffff167f90890809c654f11d6e72a28fa60149770a0d11ec6c92319d6ceb2bb0a4ea1a15344760405161020792919061294c565b60405180910390a2005b5f5ffd5b348015610220575f5ffd5b5061023b600480360381019061023691906129ae565b610776565b6040516102489190612a18565b60405180910390f35b34801561025c575f5ffd5b50610277600480360381019061027291906129ae565b6107b1565b6040516102849190612a31565b60405180910390f35b348015610298575f5ffd5b506102b360048036038101906102ae9190612b9a565b61088d565b6040516102c293929190612f57565b60405180910390f35b3480156102d6575f5ffd5b506102f160048036038101906102ec9190612fcb565b610b77565b005b3480156102fe575f5ffd5b50610307610ef2565b6040516103149190612a31565b60405180910390f35b348015610328575f5ffd5b50610343600480360381019061033e91906129ae565b610efe565b005b348015610350575f5ffd5b5061036b60048036038101906103669190612fcb565b61119f565b6040516103789190613010565b60405180910390f35b34801561038c575f5ffd5b506103a760048036038101906103a291906129ae565b6111bc565b6040516103b49190613038565b60405180910390f35b3480156103c8575f5ffd5b506103e360048036038101906103de91906129ae565b611211565b005b3480156103f0575f5ffd5b5061040b600480360381019061040691906129ae565b61149c565b005b348015610418575f5ffd5b50610433600480360381019061042e91906129ae565b611679565b6040516104409190613010565b60405180910390f35b348015610454575f5ffd5b5061046f600480360381019061046a91906129ae565b6116b1565b60405161047c9190613010565b60405180910390f35b348015610490575f5ffd5b506104ab60048036038101906104a69190612fcb565b6117a3565b005b3480156104b8575f5ffd5b506104d360048036038101906104ce91906129ae565b611a03565b005b3480156104e0575f5ffd5b506104fb60048036038101906104f691906129ae565b611c21565b6040516105089190613010565b60405180910390f35b34801561051c575f5ffd5b5061053760048036038101906105329190613051565b611c8d565b6040516105449190613010565b60405180910390f35b348015610558575f5ffd5b50610561611cb7565b60405161056e9190612a31565b60405180910390f35b348015610582575f5ffd5b5061059d600480360381019061059891906129ae565b611cbd565b6040516105aa9190612a31565b60405180910390f35b3480156105be575f5ffd5b506105d960048036038101906105d491906129ae565b611cd2565b005b3480156105e6575f5ffd5b5061060160048036038101906105fc91906129ae565b611d89565b60405161061194939291906130d7565b60405180910390f35b348015610625575f5ffd5b5061062e611e59565b60405161063b91906131c9565b60405180910390f35b34801561064f575f5ffd5b5061066a6004803603810190610665919061321f565b611ee4565b005b348015610677575f5ffd5b50610680612000565b60405161068d9190612a31565b60405180910390f35b3480156106a1575f5ffd5b506106aa612006565b6040516106b79190612a31565b60405180910390f35b3480156106cb575f5ffd5b506106e660048036038101906106e191906132a3565b61200c565b005b3480156106f3575f5ffd5b5061070e60048036038101906107099190613327565b612269565b005b34801561071b575f5ffd5b50610724612654565b6040516107319190612a31565b60405180910390f35b348015610745575f5ffd5b50610760600480360381019061075b91906129ae565b612659565b60405161076d9190613010565b60405180910390f35b60048181548110610785575f80fd5b905f5260205f20015f915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b5f5f5f90505f60048054905090505f5f90505b818110156108825760025f8681526020019081526020015f205f600483815481106107f2576107f1613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156108755760018361087291906133bf565b92505b80806001019150506107c4565b508192505050919050565b60608060605f845190505f81116108a2575f5ffd5b8067ffffffffffffffff8111156108bc576108bb612a5e565b5b6040519080825280602002602001820160405280156108ea5781602001602082028036833780820191505090505b5093508067ffffffffffffffff81111561090757610906612a5e565b5b6040519080825280602002602001820160405280156109355781602001602082028036833780820191505090505b5092508067ffffffffffffffff81111561095257610951612a5e565b5b60405190808252806020026020018201604052801561098b57816020015b6109786128a1565b8152602001906001900390816109705790505b5091505f5f90505b81811015610b6e575f8682815181106109af576109ae613365565b5b602002602001015190506109c2816111bc565b8683815181106109d5576109d4613365565b5b602002602001019060038111156109ef576109ee612c0a565b5b90816003811115610a0357610a02612c0a565b5b81525050610a10816107b1565b858381518110610a2357610a22613365565b5b6020026020010181815250505f5f8281526020019081526020015f206040518060800160405290815f82015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016001820154815260200160028201548152602001600382018054610ac29061341f565b80601f0160208091040260200160405190810160405280929190818152602001828054610aee9061341f565b8015610b395780601f10610b1057610100808354040283529160200191610b39565b820191905f5260205f20905b815481529060010190602001808311610b1c57829003601f168201915b505050505081525050848381518110610b5557610b54613365565b5b6020026020010181905250508080600101915050610993565b50509193909250565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390610be8576040517f84fa6f71000000000000000000000000000000000000000000000000000000008152600401610bdf9190612a18565b60405180910390fd5b5060035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168190610c75576040517fa5a3ffb9000000000000000000000000000000000000000000000000000000008152600401610c6c9190612a18565b60405180910390fd5b505f6001600480549050610c89919061344f565b9050600654811015816006549091610cd8576040517f5138739c000000000000000000000000000000000000000000000000000000008152600401610ccf92919061294c565b60405180910390fd5b50505f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60048054905090505f5f90505b81811015610ea9578373ffffffffffffffffffffffffffffffffffffffff1660048281548110610d6f57610d6e613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1603610e9c576004600183610dc1919061344f565b81548110610dd257610dd1613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1660048281548110610e0e57610e0d613365565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506004805480610e6557610e64613482565b5b600190038181905f5260205f20015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690559055610ea9565b8080600101915050610d3c565b508273ffffffffffffffffffffffffffffffffffffffff167fac6e8398676cf37429d530b81144d7079e99f4fe9d28b0d88c4a749ceccbe8cd60405160405180910390a2505050565b5f600480549050905090565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff163390610f8a576040517f0b104a5b000000000000000000000000000000000000000000000000000000008152600401610f819190612a18565b60405180910390fd5b508060055481108190610fd3576040517ff2b9c630000000000000000000000000000000000000000000000000000000008152600401610fca9190612a31565b60405180910390fd5b50815f6003811115610fe857610fe7612c0a565b5b610ff1826111bc565b600381111561100357611002612c0a565b5b148161100e5f612690565b9091611051576040517fc7af9e5d0000000000000000000000000000000000000000000000000000000081526004016110489291906134c7565b60405180910390fd5b505060025f8481526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16833390916110f1576040517f24789aae0000000000000000000000000000000000000000000000000000000081526004016110e89291906134ee565b60405180910390fd5b50505f60025f8581526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16837f7f8ce8e4f5a5b480ff78c18404639350996fd63efc83ace55b1d6a3e12158e2460405160405180910390a3505050565b6003602052805f5260405f205f915054906101000a900460ff1681565b5f5f60015f8481526020019081526020015f205490505f81036111e2575f91505061120c565b600181036111f457600391505061120c565b4281111561120657600191505061120c565b60029150505b919050565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16339061129d576040517f0b104a5b0000000000000000000000000000000000000000000000000000000081526004016112949190612a18565b60405180910390fd5b5080600554811081906112e6576040517ff2b9c6300000000000000000000000000000000000000000000000000000000081526004016112dd9190612a31565b60405180910390fd5b50816112f1816116b1565b8190611333576040517f6fc639ef00000000000000000000000000000000000000000000000000000000815260040161132a9190612a31565b60405180910390fd5b505f5f5f8581526020019081526020015f2090505f816001015490505f479050818110158183909161139c576040517f8f0f420600000000000000000000000000000000000000000000000000000000815260040161139392919061294c565b60405180910390fd5b50506113a7866126b4565b5f5f845f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1684866003016040516113f491906135b1565b5f6040518083038185875af1925050503d805f811461142e576040519150601f19603f3d011682016040523d82523d5f602084013e611433565b606091505b50915091508161144557805160208201fd5b61144e88612710565b3373ffffffffffffffffffffffffffffffffffffffff16887fd4e99b6d5236f3c2f82c63c57342d13eb032719450bf3ca7680839cc7fdc24c960405160405180910390a35050505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614339061150d576040517f84fa6f710000000000000000000000000000000000000000000000000000000081526004016115049190612a18565b60405180910390fd5b508060055481108190611556576040517ff2b9c63000000000000000000000000000000000000000000000000000000000815260040161154d9190612a31565b60405180910390fd5b5061156082612659565b158261156c6002612690565b6115766001612690565b61157f5f612690565b171790916115c4576040517fc7af9e5d0000000000000000000000000000000000000000000000000000000081526004016115bb9291906134c7565b60405180910390fd5b50505f5f8381526020019081526020015f205f5f82015f6101000a81549073ffffffffffffffffffffffffffffffffffffffff0219169055600182015f9055600282015f9055600382015f61161991906128dc565b50506001805f8481526020019081526020015f20819055503373ffffffffffffffffffffffffffffffffffffffff16827fe0246fa20caffde99aa81aaa27d0eb4993a6e5caae34ac12c7e513aed1ae0abe60405160405180910390a35050565b5f6002600381111561168e5761168d612c0a565b5b611697836111bc565b60038111156116a9576116a8612c0a565b5b149050919050565b5f5f5f90505f60048054905090505f5f90505b818110156117975760025f8681526020019081526020015f205f600483815481106116f2576116f1613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16156117755760018361177291906133bf565b92505b600654830361178a576001935050505061179e565b80806001019150506116c4565b505f925050505b919050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390611814576040517f84fa6f7100000000000000000000000000000000000000000000000000000000815260040161180b9190612a18565b60405180910390fd5b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361187a576040517ff6b2911f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff16158190611907576040517f2029bc650000000000000000000000000000000000000000000000000000000081526004016118fe9190612a18565b60405180910390fd5b50600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600481908060018154018082558091505060019003905f5260205f20015f9091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff167fac1e9ef41b54c676ccf449d83ae6f2624bcdce8f5b93a6b48ce95874c332693d60405160405180910390a250565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff163390611a8f576040517f0b104a5b000000000000000000000000000000000000000000000000000000008152600401611a869190612a18565b60405180910390fd5b508060055481108190611ad8576040517ff2b9c630000000000000000000000000000000000000000000000000000000008152600401611acf9190612a31565b60405180910390fd5b508160025f8281526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161581339091611b79576040517f140415cb000000000000000000000000000000000000000000000000000000008152600401611b709291906134ee565b60405180910390fd5b5050825f6003811115611b8f57611b8e612c0a565b5b611b98826111bc565b6003811115611baa57611ba9612c0a565b5b1481611bb55f612690565b9091611bf8576040517fc7af9e5d000000000000000000000000000000000000000000000000000000008152600401611bef9291906134c7565b60405180910390fd5b5050611c0384612782565b611c0c846116b1565b15611c1b57611c1a8461282d565b5b50505050565b5f5f611c2c836111bc565b905060016003811115611c4257611c41612c0a565b5b816003811115611c5557611c54612c0a565b5b1480611c85575060026003811115611c7057611c6f612c0a565b5b816003811115611c8357611c82612c0a565b5b145b915050919050565b6002602052815f5260405f20602052805f5260405f205f915091509054906101000a900460ff1681565b60065481565b6001602052805f5260405f205f915090505481565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390611d43576040517f84fa6f71000000000000000000000000000000000000000000000000000000008152600401611d3a9190612a18565b60405180910390fd5b50806007819055507f0c5ff76c31d24175d9e84ef46e328eafbcaeb2aa67a2333035eb082dd34324f160075482604051611d7e92919061294c565b60405180910390a150565b5f602052805f5260405f205f91509050805f015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690806001015490806002015490806003018054611dd89061341f565b80601f0160208091040260200160405190810160405280929190818152602001828054611e049061341f565b8015611e4f5780601f10611e2657610100808354040283529160200191611e4f565b820191905f5260205f20905b815481529060010190602001808311611e3257829003601f168201915b5050505050905084565b60606004805480602002602001604051908101604052809291908181526020018280548015611eda57602002820191905f5260205f20905b815f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019060010190808311611e91575b5050505050905090565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16143390611f55576040517f84fa6f71000000000000000000000000000000000000000000000000000000008152600401611f4c9190612a18565b60405180910390fd5b505f60048054905090505f8260ff16118015611f745750808260ff1611155b82829091611fb9576040517fe2689b04000000000000000000000000000000000000000000000000000000008152600401611fb0929190613600565b60405180910390fd5b50508160ff166006819055507f588dc25a3a4ef20c1e02fa5c2a887c852caf685c49563793b7b4bef9a5a169a182604051611ff49190613636565b60405180910390a15050565b60055481565b60075481565b60035f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff163390612098576040517f0b104a5b00000000000000000000000000000000000000000000000000000000815260040161208f9190612a18565b60405180910390fd5b506007548110158160075490916120e6576040517f48b6d3db0000000000000000000000000000000000000000000000000000000081526004016120dd92919061294c565b60405180910390fd5b50505f600554905060405180608001604052808773ffffffffffffffffffffffffffffffffffffffff16815260200186815260200183815260200185858080601f0160208091040260200160405190810160405280939291908181526020018383808284375f81840152601f19601f820116905080830192505050505050508152505f5f8381526020019081526020015f205f820151815f015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550602082015181600101556040820151816002015560608201518160030190816121e591906137d4565b5090505060055f8154809291906121fb906138a3565b91905055503373ffffffffffffffffffffffffffffffffffffffff16817fd5e71018e2b150e81bc29178fcd2d986031492eb90f4f87287c251f3c41aea7260405160405180910390a361224d81612782565b600160065403612261576122608161282d565b5b505050505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161433906122da576040517f84fa6f710000000000000000000000000000000000000000000000000000000081526004016122d19190612a18565b60405180910390fd5b5060035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff168290612367576040517fa5a3ffb900000000000000000000000000000000000000000000000000000000815260040161235e9190612a18565b60405180910390fd5b5060035f8273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f9054906101000a900460ff161581906123f5576040517f2029bc650000000000000000000000000000000000000000000000000000000081526004016123ec9190612a18565b60405180910390fd5b505f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff160361245b576040517ff6b2911f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b5f60035f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff021916908315150217905550600160035f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055505f60048054905090505f5f90505b818110156125f4578373ffffffffffffffffffffffffffffffffffffffff166004828154811061254557612544613365565b5b905f5260205f20015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036125e757826004828154811061259d5761259c613365565b5b905f5260205f20015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506125f4565b8080600101915050612512565b508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f9aecf86140d81442289f667eb72e1202a8fbb3478a686659952e145e8531965660405160405180910390a3505050565b600181565b5f60038081111561266d5761266c612c0a565b5b612676836111bc565b600381111561268857612687612c0a565b5b149050919050565b5f8160038111156126a4576126a3612c0a565b5b60ff166001901b5f1b9050919050565b6126bd81611679565b816126c86002612690565b909161270b576040517fc7af9e5d0000000000000000000000000000000000000000000000000000000081526004016127029291906134c7565b60405180910390fd5b505050565b61271981611679565b816127246002612690565b9091612767576040517fc7af9e5d00000000000000000000000000000000000000000000000000000000815260040161275e9291906134c7565b60405180910390fd5b50506001805f8381526020019081526020015f208190555050565b600160025f8381526020019081526020015f205f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f6101000a81548160ff0219169083151502179055503373ffffffffffffffffffffffffffffffffffffffff16817f6e5d64ddafdd31fc9a91822d05f1eaa7b8cefdd22ecca7786b2132dac74edf1960405160405180910390a350565b5f5f5f8381526020019081526020015f20600201544261284d91906133bf565b90508060015f8481526020019081526020015f2081905550817f193d02e3f35c67d210003621d4b64601dc382c6a91d9b6430109303b540fb9af826040516128959190612a31565b60405180910390a25050565b60405180608001604052805f73ffffffffffffffffffffffffffffffffffffffff1681526020015f81526020015f8152602001606081525090565b5080546128e89061341f565b5f825580601f106128f95750612916565b601f0160209004905f5260205f20908101906129159190612919565b5b50565b5b80821115612930575f815f90555060010161291a565b5090565b5f819050919050565b61294681612934565b82525050565b5f60408201905061295f5f83018561293d565b61296c602083018461293d565b9392505050565b5f604051905090565b5f5ffd5b5f5ffd5b61298d81612934565b8114612997575f5ffd5b50565b5f813590506129a881612984565b92915050565b5f602082840312156129c3576129c261297c565b5b5f6129d08482850161299a565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f612a02826129d9565b9050919050565b612a12816129f8565b82525050565b5f602082019050612a2b5f830184612a09565b92915050565b5f602082019050612a445f83018461293d565b92915050565b5f5ffd5b5f601f19601f8301169050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b612a9482612a4e565b810181811067ffffffffffffffff82111715612ab357612ab2612a5e565b5b80604052505050565b5f612ac5612973565b9050612ad18282612a8b565b919050565b5f67ffffffffffffffff821115612af057612aef612a5e565b5b602082029050602081019050919050565b5f5ffd5b5f612b17612b1284612ad6565b612abc565b90508083825260208201905060208402830185811115612b3a57612b39612b01565b5b835b81811015612b635780612b4f888261299a565b845260208401935050602081019050612b3c565b5050509392505050565b5f82601f830112612b8157612b80612a4a565b5b8135612b91848260208601612b05565b91505092915050565b5f60208284031215612baf57612bae61297c565b5b5f82013567ffffffffffffffff811115612bcc57612bcb612980565b5b612bd884828501612b6d565b91505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602160045260245ffd5b60048110612c4857612c47612c0a565b5b50565b5f819050612c5882612c37565b919050565b5f612c6782612c4b565b9050919050565b612c7781612c5d565b82525050565b5f612c888383612c6e565b60208301905092915050565b5f602082019050919050565b5f612caa82612be1565b612cb48185612beb565b9350612cbf83612bfb565b805f5b83811015612cef578151612cd68882612c7d565b9750612ce183612c94565b925050600181019050612cc2565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612d2e81612934565b82525050565b5f612d3f8383612d25565b60208301905092915050565b5f602082019050919050565b5f612d6182612cfc565b612d6b8185612d06565b9350612d7683612d16565b805f5b83811015612da6578151612d8d8882612d34565b9750612d9883612d4b565b925050600181019050612d79565b5085935050505092915050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b612de5816129f8565b82525050565b5f81519050919050565b5f82825260208201905092915050565b5f5b83811015612e22578082015181840152602081019050612e07565b5f8484015250505050565b5f612e3782612deb565b612e418185612df5565b9350612e51818560208601612e05565b612e5a81612a4e565b840191505092915050565b5f608083015f830151612e7a5f860182612ddc565b506020830151612e8d6020860182612d25565b506040830151612ea06040860182612d25565b5060608301518482036060860152612eb88282612e2d565b9150508091505092915050565b5f612ed08383612e65565b905092915050565b5f602082019050919050565b5f612eee82612db3565b612ef88185612dbd565b935083602082028501612f0a85612dcd565b805f5b85811015612f455784840389528151612f268582612ec5565b9450612f3183612ed8565b925060208a01995050600181019050612f0d565b50829750879550505050505092915050565b5f6060820190508181035f830152612f6f8186612ca0565b90508181036020830152612f838185612d57565b90508181036040830152612f978184612ee4565b9050949350505050565b612faa816129f8565b8114612fb4575f5ffd5b50565b5f81359050612fc581612fa1565b92915050565b5f60208284031215612fe057612fdf61297c565b5b5f612fed84828501612fb7565b91505092915050565b5f8115159050919050565b61300a81612ff6565b82525050565b5f6020820190506130235f830184613001565b92915050565b61303281612c5d565b82525050565b5f60208201905061304b5f830184613029565b92915050565b5f5f604083850312156130675761306661297c565b5b5f6130748582860161299a565b925050602061308585828601612fb7565b9150509250929050565b5f82825260208201905092915050565b5f6130a982612deb565b6130b3818561308f565b93506130c3818560208601612e05565b6130cc81612a4e565b840191505092915050565b5f6080820190506130ea5f830187612a09565b6130f7602083018661293d565b613104604083018561293d565b8181036060830152613116818461309f565b905095945050505050565b5f81519050919050565b5f82825260208201905092915050565b5f819050602082019050919050565b5f6131558383612ddc565b60208301905092915050565b5f602082019050919050565b5f61317782613121565b613181818561312b565b935061318c8361313b565b805f5b838110156131bc5781516131a3888261314a565b97506131ae83613161565b92505060018101905061318f565b5085935050505092915050565b5f6020820190508181035f8301526131e1818461316d565b905092915050565b5f60ff82169050919050565b6131fe816131e9565b8114613208575f5ffd5b50565b5f81359050613219816131f5565b92915050565b5f602082840312156132345761323361297c565b5b5f6132418482850161320b565b91505092915050565b5f5ffd5b5f5f83601f84011261326357613262612a4a565b5b8235905067ffffffffffffffff8111156132805761327f61324a565b5b60208301915083600182028301111561329c5761329b612b01565b5b9250929050565b5f5f5f5f5f608086880312156132bc576132bb61297c565b5b5f6132c988828901612fb7565b95505060206132da8882890161299a565b945050604086013567ffffffffffffffff8111156132fb576132fa612980565b5b6133078882890161324e565b9350935050606061331a8882890161299a565b9150509295509295909350565b5f5f6040838503121561333d5761333c61297c565b5b5f61334a85828601612fb7565b925050602061335b85828601612fb7565b9150509250929050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6133c982612934565b91506133d483612934565b92508282019050808211156133ec576133eb613392565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52602260045260245ffd5b5f600282049050600182168061343657607f821691505b602082108103613449576134486133f2565b5b50919050565b5f61345982612934565b915061346483612934565b925082820390508181111561347c5761347b613392565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603160045260245ffd5b5f819050919050565b6134c1816134af565b82525050565b5f6040820190506134da5f83018561293d565b6134e760208301846134b8565b9392505050565b5f6040820190506135015f83018561293d565b61350e6020830184612a09565b9392505050565b5f81905092915050565b5f819050815f5260205f209050919050565b5f815461353d8161341f565b6135478186613515565b9450600182165f81146135615760018114613576576135a8565b60ff19831686528115158202860193506135a8565b61357f8561351f565b5f5b838110156135a057815481890152600182019150602081019050613581565b838801955050505b50505092915050565b5f6135bc8284613531565b915081905092915050565b5f819050919050565b5f6135ea6135e56135e0846131e9565b6135c7565b612934565b9050919050565b6135fa816135d0565b82525050565b5f6040820190506136135f8301856135f1565b613620602083018461293d565b9392505050565b613630816131e9565b82525050565b5f6020820190506136495f830184613627565b92915050565b5f6020601f8301049050919050565b5f82821b905092915050565b5f600883026136997fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8261365e565b6136a3868361365e565b95508019841693508086168417925050509392505050565b5f6136d56136d06136cb84612934565b6135c7565b612934565b9050919050565b5f819050919050565b6136ee836136bb565b6137026136fa826136dc565b84845461366a565b825550505050565b5f5f905090565b61371961370a565b6137248184846136e5565b505050565b5b818110156137475761373c5f82613711565b60018101905061372a565b5050565b601f82111561378c5761375d8161351f565b6137668461364f565b81016020851015613775578190505b6137896137818561364f565b830182613729565b50505b505050565b5f82821c905092915050565b5f6137ac5f1984600802613791565b1980831691505092915050565b5f6137c4838361379d565b9150826002028217905092915050565b6137dd82612deb565b67ffffffffffffffff8111156137f6576137f5612a5e565b5b613800825461341f565b61380b82828561374b565b5f60209050601f83116001811461383c575f841561382a578287015190505b61383485826137b9565b86555061389b565b601f19841661384a8661351f565b5f5b828110156138715784890151825560018201915060208501945060208101905061384c565b8683101561388e578489015161388a601f89168261379d565b8355505b6001600288020188555050505b505050505050565b5f6138ad82612934565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82036138df576138de613392565b5b60018201905091905056fea26469706673582212208aef71fc9bc74eac75f5668bbba1a8aea5f92f961d3ceb3e33f7aba83442182264736f6c634300081c0033
Loading...
Loading
Loading...
Loading
Loading...
Loading
Net Worth in USD
$48,797.43
Net Worth in M
Token Allocations
MEME
100.00%
Multichain Portfolio | 35 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| MEMECORE | 100.00% | $1.63 | 29,847.6679 | $48,797.43 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.