Source Code
Overview
ETH Balance
0 ETH
Eth Value
$0.00Latest 25 from a total of 192 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Drop | 18967688 | 797 days ago | IN | 0 ETH | 0.00084784 | ||||
| Pause Claims | 18939565 | 800 days ago | IN | 0 ETH | 0.00053181 | ||||
| Quick Add List | 18939461 | 801 days ago | IN | 0 ETH | 0.00112225 | ||||
| Quick Add List | 18939460 | 801 days ago | IN | 0 ETH | 0.00114646 | ||||
| Quick Add List | 18939459 | 801 days ago | IN | 0 ETH | 0.00118761 | ||||
| Quick Add List | 18939458 | 801 days ago | IN | 0 ETH | 0.00116895 | ||||
| Quick Add List | 18939455 | 801 days ago | IN | 0 ETH | 0.00115125 | ||||
| Quick Add List | 18939454 | 801 days ago | IN | 0 ETH | 0.00119437 | ||||
| Quick Add List | 18939453 | 801 days ago | IN | 0 ETH | 0.00125794 | ||||
| Quick Add List | 18939451 | 801 days ago | IN | 0 ETH | 0.00111237 | ||||
| Quick Add List | 18939450 | 801 days ago | IN | 0 ETH | 0.001158 | ||||
| Quick Add List | 18939448 | 801 days ago | IN | 0 ETH | 0.00123115 | ||||
| Quick Add List | 18939446 | 801 days ago | IN | 0 ETH | 0.00115931 | ||||
| Quick Add List | 18939444 | 801 days ago | IN | 0 ETH | 0.00110514 | ||||
| Quick Add List | 18939441 | 801 days ago | IN | 0 ETH | 0.00120707 | ||||
| Quick Add List | 18939436 | 801 days ago | IN | 0 ETH | 0.00115801 | ||||
| Disable All List... | 18939414 | 801 days ago | IN | 0 ETH | 0.00128791 | ||||
| Drop | 18939357 | 801 days ago | IN | 0 ETH | 0.00080785 | ||||
| Claim | 18939356 | 801 days ago | IN | 0 ETH | 0.00926184 | ||||
| Drop | 18939343 | 801 days ago | IN | 0 ETH | 0.00084402 | ||||
| Claim | 18930780 | 802 days ago | IN | 0 ETH | 0.03531399 | ||||
| Drop | 18930678 | 802 days ago | IN | 0 ETH | 0.00197378 | ||||
| Quick Drop | 18921041 | 803 days ago | IN | 0 ETH | 0.00152879 | ||||
| Quick Drop | 18907566 | 805 days ago | IN | 0 ETH | 0.00083676 | ||||
| Claim | 18850854 | 813 days ago | IN | 0 ETH | 0.01301307 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SkeleDropV2
Compiler Version
v0.8.21+commit.d9974bed
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// * ————————————————————————————————————————————————————————————————————————————————— *
// | |
// | SSSSS K K EEEEEE L EEEEEE PPPPP H H U U N N K K SSSSS |
// | S K K E L E P P H H U U N N N K K S |
// | SSSS KKKK EEE L EEE PPPPP HHHHHH U U N N N KKKK SSSS |
// | S K K E L E P H H U U N N N K K S |
// | SSSSS K K EEEEEE LLLLLL EEEEEE P H H UUUU N N K K SSSSS |
// | |
// | * AN ETHEREUM-BASED INDENTITY PLATFORM BROUGHT TO YOU BY NEUROMANTIC INDUSTRIES * |
// | |
// | @@@@@@@@@@@@@@@@@@@@@@@@ |
// | @@@@@@@@@@@@@@@@@@@@@@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@@@@@@@@,,,,,,,,,,@@@@@@,,,,,,,@@@ |
// | @@@@@@@@@@,,,,,,,,,,@@@@@@,,,,,,,@@@ |
// | @@@@@@@@@@,,,,,,,,,,@@@@@@,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,@@@@@@,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,@@@@@@,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,,,,,,,,,,,@@@@@@@ |
// | @@@@@@@@@@@@@@@@@@@@@@@@@@@ |
// | @@@@@@@@@@@@@@@@@@@@@@@@@@@ |
// | @@@@,,,,,,,,,,,,,,,,@@@@,,,@@@ |
// | @@@@@@@@@@@@@@@@,,,,@@@ |
// | @@@,,,,,,,,,,@@@ |
// | @@@,,,,,,,,,,@@@ |
// | @@@,,,,@@@ |
// | @@@,,,,,,,,,,@@@ |
// | |
// | |
// | for more information visit skelephunks.com | follow @skelephunks on twitter |
// | |
// * ————————————————————————————————————————————————————————————————————————————————— *
////////////////////////////////////////////////////////////////////////////////////////////////////////
// | //
// The SkeleDrop Contract | SkeleDrop is a way to manually airdrop crypt mints //
// By Autopsyop,for Neuromantic Industries | The tokens will be randomly selected from whats left //
// Part of the Skelephunks Platform | Only the owner of this contract can airdrop tokens //
// | //
////////////////////////////////////////////////////////////////////////////////////////////////////////
// CHANGELOG
// V2: Fixes an issue where remaining claims for a wallet could be calculated incorrectly
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
import "@openzeppelin/contracts/token/ERC721/IERC721.sol";
import "@openzeppelin/contracts/token/ERC721/IERC721Receiver.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
import "./MerkleProof.sol";
interface ISkelephunks is IERC721{
function mintedAt(uint256 tokenId) external view returns (uint256);
function minterOf(uint256 tokenId) external view returns (address);
function getGenderAndDirection(uint256 tokenId) external view returns (uint256);
function tokenOfOwnerByIndex( address owner, uint256 index) external view returns (uint256);
function numMintedReserve() external view returns (uint256);
function maxReserveSupply() external view returns (uint256);
function mintReserve(address to, uint256 quantity, uint256 genderDirection) external;
function mintPrice () external view returns (uint256);
}
contract SkeleDropV2 is Ownable {
constructor () {
transferOwnership( msg.sender );
setSkelephunksContract(0x7db8cD89308A295bb2D7F809B05DB6389e9a6d88);// MAINNET
}
/**
Math
**/
function max(
uint256 a,
uint256 b
) private pure returns (uint256){
if(a > b)return a;
return b;
}
function min(
uint256 a,
uint256 b
) private pure returns (uint256){
if(a < b)return a;
return b;
}
/**
The skele contract
**/
ISkelephunks public skelephunksContract;
function setSkelephunksContract(
address addr
) public onlyOwner {
skelephunksContract = ISkelephunks( addr );
}
/**
function requires the skele contract
**/
modifier requiresSkelephunks {
require( ISkelephunks(address(0)) != skelephunksContract, "No Skelephunks contract linked" );
_;
}
/**
SkeleDrop requires the crypt to have supply
**/
function maxCryptMints(
) private view returns (uint256){
return skelephunksContract.maxReserveSupply() - skelephunksContract.numMintedReserve() - 666;
}
function cryptHasMints(
) private view returns (bool){
return 0 < maxCryptMints() ;
}
// ALL DROPS
uint256 public maxDrops = 666;
uint256 public totalDrops;//number of explicit walletDrops (per-address) allocated
function setMaxDrops(
uint256 maximum
) public onlyOwner {
require(totalDrops < maximum , "Already dropped more than that" );
require(maximum - totalDrops < maxCryptMints() , "Not enough mints in crypt" );//new max cant be supported by crypt
maxDrops = maximum;
}
function remainingDrops(
) public view returns (uint256) {
if (!cryptHasMints() ){
return 0;
}
return maxDrops - totalDrops;
}
function unclaimedListDrops(
) public view returns (uint256){
uint256 count = 0;
for(uint256 i = 0; i < lists.length; i++){
count+=lists[i].remain;
}
return count;
}
function unclaimedDrops(
)public view returns (uint256){
return totalDrops - totalClaims;
}
modifier needsRemainingDrops{
require(0 < remainingDrops());
_;
}
// WALLET DROPS
mapping( address=>uint256) walletDrops;
function dropsForWallet(
address wallet
) public view returns (uint256){
return walletDrops[wallet];
}
function listDropsForWallet(
address wallet,
bytes32[][] calldata proofs
) private view returns (uint256){
uint256 count = 0;
bool[] memory used = new bool[](lists.length);
for(uint256 p = 0; p < proofs.length; p++){
for(uint256 l = 0; l < lists.length; l++){
if(!used[l] && lists[l].remain > count && isMember(wallet,lists[l].root,proofs[p])){
used[l] = true;
count+=remainingDropsFromListForWallet(l,wallet);
}
}
}
return count;
}
function remainingDropsFromListForWallet(
uint256 index,
address wallet
)private view returns(uint256){
return min(lists[index].maxPer - claimedFromList[wallet][index],lists[index].remain);
}
function isMember(
address wallet,
bytes32 root,
bytes32[] calldata proof
)private pure returns (bool){
return MerkleProof.verifyCalldata(proof,root,keccak256(abi.encodePacked(wallet)));
}
function totalDropsForWallet(
address wallet,
bytes32[][] calldata proofs
)public view returns (uint256){
return listDropsForWallet(wallet,proofs) + walletDrops[wallet];
}
function unclaimedDropsForWallet(
address wallet,
bytes32[][] calldata proofs
)public view returns (uint256){
return claimsPaused ? 0 : totalDropsForWallet(wallet,proofs) - claimsForWallet(wallet);
}
// ALL CLAIMS
uint256 public totalClaims;//number of walletDrops that have been claimed (from any source)
// WALLET CLAIMS
mapping( address=>uint256 ) claims;
mapping( address=>mapping( uint256=>uint256 ) ) claimedFromList;
function listClaimsForWallet(
address wallet
) private view returns (uint256){
uint256 count = 0;
for(uint256 i = 0; i < lists.length; i++){
count+= claimedFromList[wallet][i];
}
return count;
}
function claimsForWallet(
address wallet
) public view returns (uint256){
return claims[wallet];
}
// CONTROLS
// sets the maximum to whats been allocated already to prevent future allocations
function freezeDrops(
) public onlyOwner {
setMaxDrops(totalDrops);
}
/**
claims can be paused
**/
bool claimsPaused;
function pauseClaims() public onlyOwner{ require(!claimsPaused,"claims already paused");claimsPaused = true;}
function unpauseClaims() public onlyOwner{ require(claimsPaused,"claims not paused");claimsPaused = false;}
modifier pauseable { require (!claimsPaused,"claimes are paused");_;}
/**
skeledrop enables an operator to allocate a free new mint claim to somebody from the crypt
**/
// LISTS
struct List {
bytes32 root;
uint256 remain;
uint256 maxPer;
}
List[] lists;
/**
skeledrop enables an operator to allocate create a list with access to an allocatoin of mints
**/
function addList(
bytes32 root,
uint256 amount,
uint256 maxPer
)public onlyOwner{
require(amount <= remainingDrops(),"cannot supply this many drops, please lower the amount");
totalDrops+=amount;
lists.push(List(root,amount,maxPer));
}
function quickAddList(
bytes32 root,
uint256 amount
)public onlyOwner{
addList(root,amount,1);
}
function remainingDropsForRoot(
bytes32 root
)public view returns (uint256){
uint256 remaining;
for(uint256 i = 0; i < lists.length; i++){//loop through all lists
if (lists[i].root == root){
remaining += lists[i].remain;
}
}
return remaining;
}
function disableList(
uint256 index
)private onlyOwner{
totalDrops -= lists[index].remain;
lists[index].remain = 0;
}
function disableAllLists(
) public onlyOwner{
require(lists.length > 0, "no lists to disable");
for(uint256 i = 0; i < lists.length; i++){//loop through all lists
disableList(i);
}
}
function disableAllListsForRoot(// it is possible to add a root more than once. disable all matches
bytes32 root
) public onlyOwner {
uint256 found;
for(uint256 i = 0; i < lists.length; i++){//loop through all lists
if (lists[i].root == root && lists[i].remain > 0){
found++;
totalDrops -= lists[i].remain;
lists[i].remain = 0;
}
}
require(found > 0, "no active lists with that root can be found");
}
function bulkDrop(
address[] calldata tos,
uint256 amount
) public onlyOwner needsRemainingDrops {
require(remainingDrops() >= tos.length ,"not enuff walletDrops for all that");
for( uint256 i = 0; i < tos.length; i++){
drop(tos[i],amount);
}
}
function quickDrop(
address to
) public onlyOwner needsRemainingDrops {
drop(to,1);
}
function drop(
address to,
uint256 amount
) public onlyOwner needsRemainingDrops {
require(to != owner(), "WTF scammer");
walletDrops[to]+=amount;
totalDrops+=amount;
}
function mintFromCrypt(
address to,
uint256 num,
uint256 gad
) private requiresSkelephunks {
skelephunksContract.mintReserve(to, num, gad);
}
function claimDrops (
uint256 gad
) public requiresSkelephunks pauseable {
require(gad >= 0 && gad < 4, "invalid gender and direction");
uint numDrops = walletDrops[msg.sender];
uint numClaims = claims[msg.sender];
uint256 dropsLeft = numDrops-numClaims ;// walletDrops left for wallet
uint256 claimsRequested = dropsLeft;
mintFromCrypt(msg.sender,claimsRequested,gad);// do the mint
claims[msg.sender] += claimsRequested;//register the claims for wallet
totalClaims += claimsRequested;//register claims to total
}
function claim (
uint256 quantity,
uint256 gad,
bytes32[][] calldata proofs
) public requiresSkelephunks pauseable {
require(gad >= 0 && gad < 4, "invalid gender and direction");
uint256 unclaimed = unclaimedDropsForWallet(msg.sender,proofs);// all drops left for wallet
require(quantity <= unclaimed, "not enough drops for this wallet to claim this quantity");
uint256 requested = quantity == 0 ? unclaimed : quantity; //amount claiming - 0 = claim all
uint requests = requested;
// claim from lists first, then walletDrops
for(uint256 i = 0; i < lists.length; i++){//loop through all lists
if( lists[i].remain > 0 && requests > 0 && claimedFromList[msg.sender][i] < lists[i].maxPer ){//claims remain, was list i max claimed by wallet?
uint256 listRemains = remainingDropsFromListForWallet(i,msg.sender);//dont claim more than max ever
uint256 listClaims = min(requests,listRemains);//we will claim no more than we're requesting from what remains
lists[i].remain-=listClaims;//list remains minus claiming amount
claimedFromList[msg.sender][i] += listClaims;// account for wallet claims from list
require(claimedFromList[msg.sender][i]<=lists[i].maxPer,"attempted to claim more than maxPer from list");//this shouln't be possible
requests-=listClaims;// requests less claiming amount
}
}
claims[msg.sender] += requested;//register the claims for wallet
totalClaims += requested;//register claims to total
mintFromCrypt(msg.sender,requested,gad);// do the mint
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.9.2) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.20;
/**
* @dev These functions deal with verification of Merkle Tree proofs.
*
* The tree and the proofs can be generated using our
* https://github.com/OpenZeppelin/merkle-tree[JavaScript library].
* You will find a quickstart guide in the readme.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the Merkle tree could be reinterpreted as a leaf value.
* OpenZeppelin's JavaScript library generates Merkle trees that are safe
* against this attack out of the box.
*/
library MerkleProof {
/**
*@dev The multiproof provided is not valid.
*/
error MerkleProofInvalidMultiproof();
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
function verify(bytes32[] memory proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
return processProof(proof, leaf) == root;
}
/**
* @dev Calldata version of {verify}
*/
function verifyCalldata(bytes32[] calldata proof, bytes32 root, bytes32 leaf) internal pure returns (bool) {
return processProofCalldata(proof, leaf) == root;
}
/**
* @dev Returns the rebuilt hash obtained by traversing a Merkle tree up
* from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt
* hash matches the root of the tree. When processing the proof, the pairs
* of leafs & pre-images are assumed to be sorted.
*/
function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Calldata version of {processProof}
*/
function processProofCalldata(bytes32[] calldata proof, bytes32 leaf) internal pure returns (bytes32) {
bytes32 computedHash = leaf;
for (uint256 i = 0; i < proof.length; i++) {
computedHash = _hashPair(computedHash, proof[i]);
}
return computedHash;
}
/**
* @dev Returns true if the `leaves` can be simultaneously proven to be a part of a Merkle tree defined by
* `root`, according to `proof` and `proofFlags` as described in {processMultiProof}.
*
* CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
*/
function multiProofVerify(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProof(proof, proofFlags, leaves) == root;
}
/**
* @dev Calldata version of {multiProofVerify}
*
* CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
*/
function multiProofVerifyCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32 root,
bytes32[] memory leaves
) internal pure returns (bool) {
return processMultiProofCalldata(proof, proofFlags, leaves) == root;
}
/**
* @dev Returns the root of a tree reconstructed from `leaves` and sibling nodes in `proof`. The reconstruction
* proceeds by incrementally reconstructing all inner nodes by combining a leaf/inner node with either another
* leaf/inner node or a proof sibling node, depending on whether each `proofFlags` item is true or false
* respectively.
*
* CAUTION: Not all Merkle trees admit multiproofs. To use multiproofs, it is sufficient to ensure that: 1) the tree
* is complete (but not necessarily perfect), 2) the leaves to be proven are in the opposite order they are in the
* tree (i.e., as seen from right to left starting at the deepest layer and continuing at the next layer).
*/
function processMultiProof(
bytes32[] memory proof,
bool[] memory proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the Merkle tree.
uint256 leavesLen = leaves.length;
uint256 proofLen = proof.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
if (leavesLen + proofLen != totalHashes + 1) {
revert MerkleProofInvalidMultiproof();
}
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i]
? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
: proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
if (proofPos != proofLen) {
revert MerkleProofInvalidMultiproof();
}
unchecked {
return hashes[totalHashes - 1];
}
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
/**
* @dev Calldata version of {processMultiProof}.
*
* CAUTION: Not all Merkle trees admit multiproofs. See {processMultiProof} for details.
*/
function processMultiProofCalldata(
bytes32[] calldata proof,
bool[] calldata proofFlags,
bytes32[] memory leaves
) internal pure returns (bytes32 merkleRoot) {
// This function rebuilds the root hash by traversing the tree up from the leaves. The root is rebuilt by
// consuming and producing values on a queue. The queue starts with the `leaves` array, then goes onto the
// `hashes` array. At the end of the process, the last hash in the `hashes` array should contain the root of
// the Merkle tree.
uint256 leavesLen = leaves.length;
uint256 proofLen = proof.length;
uint256 totalHashes = proofFlags.length;
// Check proof validity.
if (leavesLen + proofLen != totalHashes + 1) {
revert MerkleProofInvalidMultiproof();
}
// The xxxPos values are "pointers" to the next value to consume in each array. All accesses are done using
// `xxx[xxxPos++]`, which return the current value and increment the pointer, thus mimicking a queue's "pop".
bytes32[] memory hashes = new bytes32[](totalHashes);
uint256 leafPos = 0;
uint256 hashPos = 0;
uint256 proofPos = 0;
// At each step, we compute the next hash using two values:
// - a value from the "main queue". If not all leaves have been consumed, we get the next leaf, otherwise we
// get the next hash.
// - depending on the flag, either another value from the "main queue" (merging branches) or an element from the
// `proof` array.
for (uint256 i = 0; i < totalHashes; i++) {
bytes32 a = leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++];
bytes32 b = proofFlags[i]
? (leafPos < leavesLen ? leaves[leafPos++] : hashes[hashPos++])
: proof[proofPos++];
hashes[i] = _hashPair(a, b);
}
if (totalHashes > 0) {
if (proofPos != proofLen) {
revert MerkleProofInvalidMultiproof();
}
unchecked {
return hashes[totalHashes - 1];
}
} else if (leavesLen > 0) {
return leaves[0];
} else {
return proof[0];
}
}
/**
* @dev Sorts the pair (a, b) and hashes the result.
*/
function _hashPair(bytes32 a, bytes32 b) private pure returns (bytes32) {
return a < b ? _efficientHash(a, b) : _efficientHash(b, a);
}
/**
* @dev Implementation of keccak256(abi.encode(a, b)) that doesn't allocate or expand memory.
*/
function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) {
/// @solidity memory-safe-assembly
assembly {
mstore(0x00, a)
mstore(0x20, b)
value := keccak256(0x00, 0x40)
}
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_transferOwnership(_msgSender());
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
_checkOwner();
_;
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if the sender is not the owner.
*/
function _checkOwner() internal view virtual {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_transferOwnership(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(newOwner != address(0), "Ownable: new owner is the zero address");
_transferOwnership(newOwner);
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Internal function without access restriction.
*/
function _transferOwnership(address newOwner) internal virtual {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol)
pragma solidity ^0.8.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.8.0) (token/ERC721/IERC721.sol)
pragma solidity ^0.8.0;
import "../../utils/introspection/IERC165.sol";
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Note that the caller is responsible to confirm that the recipient is capable of receiving ERC721
* or else they may be permanently lost. Usage of {safeTransferFrom} prevents loss, though the caller must
* understand this adds an external call which potentially creates a reentrancy vulnerability.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId) external view returns (address operator);
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol)
pragma solidity ^0.8.0;
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (utils/Context.sol)
pragma solidity ^0.8.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}{
"optimizer": {
"enabled": false,
"runs": 200
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"uint256","name":"maxPer","type":"uint256"}],"name":"addList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"tos","type":"address[]"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"bulkDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity","type":"uint256"},{"internalType":"uint256","name":"gad","type":"uint256"},{"internalType":"bytes32[][]","name":"proofs","type":"bytes32[][]"}],"name":"claim","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"gad","type":"uint256"}],"name":"claimDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"claimsForWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"disableAllLists","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"disableAllListsForRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"drop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"dropsForWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"freezeDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"maxDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"pauseClaims","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"quickAddList","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"}],"name":"quickDrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"remainingDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32","name":"root","type":"bytes32"}],"name":"remainingDropsForRoot","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maximum","type":"uint256"}],"name":"setMaxDrops","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"setSkelephunksContract","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"skelephunksContract","outputs":[{"internalType":"contract ISkelephunks","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalClaims","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32[][]","name":"proofs","type":"bytes32[][]"}],"name":"totalDropsForWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unclaimedDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"bytes32[][]","name":"proofs","type":"bytes32[][]"}],"name":"unclaimedDropsForWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unclaimedListDrops","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"unpauseClaims","outputs":[],"stateMutability":"nonpayable","type":"function"}]Contract Creation Code
608060405261029a60025534801562000016575f80fd5b50620000376200002b6200007360201b60201c565b6200007a60201b60201c565b62000048336200013b60201b60201c565b6200006d737db8cd89308a295bb2d7f809b05db6389e9a6d88620001d060201b60201c565b620003ed565b5f33905090565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200014b6200022360201b60201c565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603620001bc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620001b3906200035f565b60405180910390fd5b620001cd816200007a60201b60201c565b50565b620001e06200022360201b60201c565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b620002336200007360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000259620002b460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a990620003cd565b60405180910390fd5b565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f82825260208201905092915050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f62000347602683620002db565b91506200035482620002eb565b604082019050919050565b5f6020820190508181035f830152620003788162000339565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f620003b5602083620002db565b9150620003c2826200037f565b602082019050919050565b5f6020820190508181035f830152620003e681620003a7565b9050919050565b612ba980620003fb5f395ff3fe608060405234801561000f575f80fd5b50600436106101cc575f3560e01c80637f7bcc4c11610102578063a4f48957116100a0578063eb1cfa821161006f578063eb1cfa82146104a4578063ee7113bb146104c0578063f2fde38b146104dc578063f6714013146104f8576101cc565b8063a4f489571461041e578063cd7e929d1461043a578063d42b7b8a1461046a578063defaee8c14610474576101cc565b80638d0f8cef116100dc5780638d0f8cef146103985780638da5cb5b146103b4578063908742a1146103d25780639e34b03714610402576101cc565b80637f7bcc4c146103445780638027bf63146103605780638c04f6a21461037c576101cc565b80634649a6ff1161016f578063555461e811610149578063555461e8146102d05780636a91c1a5146102ee5780636cf0887e1461030a578063715018a61461033a576101cc565b80634649a6ff1461027a57806349ab14d8146102965780634af4459c146102a0576101cc565b806338163f16116101ab57806338163f16146102165780633d8f6806146102345780633ee60bcf1461023e57806341c613831461025c576101cc565b80623e6597146101d05780630f3314e7146101ee5780631dfab086146101f8575b5f80fd5b6101d8610516565b6040516101e59190611ce8565b60405180910390f35b6101f661052c565b005b61020061059f565b60405161020d9190611ce8565b60405180910390f35b61021e6105ca565b60405161022b9190611ce8565b60405180910390f35b61023c6105d0565b005b610246610641565b6040516102539190611ce8565b60405180910390f35b610264610647565b6040516102719190611ce8565b60405180910390f35b610294600480360381019061028f9190611d33565b61064d565b005b61029e61088c565b005b6102ba60048036038101906102b59190611e19565b6108a1565b6040516102c79190611ce8565b60405180910390f35b6102d86108fe565b6040516102e59190611ce8565b60405180910390f35b61030860048036038101906103039190611e76565b61095e565b005b610324600480360381019061031f9190611f1a565b610dbc565b6040516103319190611ce8565b60405180910390f35b610342610e45565b005b61035e60048036038101906103599190611f1a565b610e58565b005b61037a60048036038101906103759190611f45565b610f97565b005b61039660048036038101906103919190611fea565b611067565b005b6103b260048036038101906103ad9190612047565b611125565b005b6103bc611223565b6040516103c99190612094565b60405180910390f35b6103ec60048036038101906103e79190611e19565b61124a565b6040516103f99190611ce8565b60405180910390f35b61041c600480360381019061041791906120ad565b61128c565b005b610438600480360381019061043391906120eb565b6112a4565b005b610454600480360381019061044f91906120eb565b6112cc565b6040516104619190611ce8565b60405180910390f35b610472611312565b005b61048e600480360381019061048991906120eb565b61138f565b60405161049b9190611ce8565b60405180910390f35b6104be60048036038101906104b99190611d33565b6113d5565b005b6104da60048036038101906104d591906120eb565b611481565b005b6104f660048036038101906104f191906120eb565b6114cc565b005b61050061154e565b60405161050d9190612171565b60405180910390f35b5f60055460035461052791906121b7565b905090565b610534611573565b60085f9054906101000a900460ff1615610583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057a90612244565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b5f6105a86115f1565b6105b4575f90506105c7565b6003546002546105c491906121b7565b90505b90565b60025481565b6105d8611573565b60085f9054906101000a900460ff16610626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061d906122ac565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b60035481565b60055481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16036106dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d390612314565b60405180910390fd5b60085f9054906101000a900460ff161561072b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107229061237c565b60405180910390fd5b5f811015801561073b5750600481105b61077a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610771906123e4565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f818361080991906121b7565b90505f81905061081a338287611601565b8060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108669190612402565b925050819055508060055f82825461087e9190612402565b925050819055505050505050565b610894611573565b61089f6003546113d5565b565b5f60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108eb858585611720565b6108f59190612402565b90509392505050565b5f805f90505f5b600980549050811015610956576009818154811061092657610925612435565b5b905f5260205f20906003020160010154826109419190612402565b9150808061094e90612462565b915050610905565b508091505090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16036109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612314565b60405180910390fd5b60085f9054906101000a900460ff1615610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a339061237c565b60405180910390fd5b5f8310158015610a4c5750600483105b610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906123e4565b60405180910390fd5b5f610a9733848461124a565b905080851115610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390612519565b60405180910390fd5b5f808614610aea5785610aec565b815b90505f8190505f5b600980549050811015610d3c575f60098281548110610b1657610b15612435565b5b905f5260205f20906003020160010154118015610b3257505f82115b8015610bac575060098181548110610b4d57610b4c612435565b5b905f5260205f2090600302016002015460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054105b15610d29575f610bbc82336118ad565b90505f610bc9848361195d565b90508060098481548110610be057610bdf612435565b5b905f5260205f2090600302016001015f828254610bfd91906121b7565b925050819055508060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f828254610c5f9190612402565b9250508190555060098381548110610c7a57610c79612435565b5b905f5260205f2090600302016002015460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20541115610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906125a7565b60405180910390fd5b8084610d2491906121b7565b935050505b8080610d3490612462565b915050610af4565b508160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d899190612402565b925050819055508160055f828254610da19190612402565b92505081905550610db3338388611601565b50505050505050565b5f805f5b600980549050811015610e3b578360098281548110610de257610de1612435565b5b905f5260205f2090600302015f015403610e285760098181548110610e0a57610e09612435565b5b905f5260205f2090600302016001015482610e259190612402565b91505b8080610e3390612462565b915050610dc0565b5080915050919050565b610e4d611573565b610e565f611978565b565b610e60611573565b5f805f90505b600980549050811015610f50578260098281548110610e8857610e87612435565b5b905f5260205f2090600302015f0154148015610ec657505f60098281548110610eb457610eb3612435565b5b905f5260205f20906003020160010154115b15610f3d578180610ed690612462565b92505060098181548110610eed57610eec612435565b5b905f5260205f2090600302016001015460035f828254610f0d91906121b7565b925050819055505f60098281548110610f2957610f28612435565b5b905f5260205f209060030201600101819055505b8080610f4890612462565b915050610e66565b505f8111610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90612635565b60405180910390fd5b5050565b610f9f611573565b610fa761059f565b821115610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe0906126c3565b60405180910390fd5b8160035f828254610ffa9190612402565b925050819055506009604051806060016040528085815260200184815260200183815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015560208201518160010155604082015181600201555050505050565b61106f611573565b61107761059f565b5f10611081575f80fd5b8282905061108d61059f565b10156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612751565b60405180910390fd5b5f5b8383905081101561111f5761110c8484838181106110f1576110f0612435565b5b905060200201602081019061110691906120eb565b83611125565b808061111790612462565b9150506110d0565b50505050565b61112d611573565b61113561059f565b5f1061113f575f80fd5b611147611223565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906127b9565b60405180910390fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546112009190612402565b925050819055508060035f8282546112189190612402565b925050819055505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60085f9054906101000a900460ff16611281576112678461138f565b6112728585856108a1565b61127c91906121b7565b611283565b5f5b90509392505050565b611294611573565b6112a082826001610f97565b5050565b6112ac611573565b6112b461059f565b5f106112be575f80fd5b6112c9816001611125565b50565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61131a611573565b5f60098054905011611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890612821565b60405180910390fd5b5f5b60098054905081101561138c5761137981611a39565b808061138490612462565b915050611363565b50565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113dd611573565b8060035410611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890612889565b60405180910390fd5b611429611aa7565b6003548261143791906121b7565b10611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906128f1565b60405180910390fd5b8060028190555050565b611489611573565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114d4611573565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115399061297f565b60405180910390fd5b61154b81611978565b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61157b611be0565b73ffffffffffffffffffffffffffffffffffffffff16611599611223565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906129e7565b60405180910390fd5b565b5f6115fa611aa7565b5f10905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff1603611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790612314565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330359e5f8484846040518463ffffffff1660e01b81526004016116ee93929190612a05565b5f604051808303815f87803b158015611705575f80fd5b505af1158015611717573d5f803e3d5ffd5b50505050505050565b5f805f90505f60098054905067ffffffffffffffff81111561174557611744612a3a565b5b6040519080825280602002602001820160405280156117735781602001602082028036833780820191505090505b5090505f5b858590508110156118a0575f5b60098054905081101561188c578281815181106117a5576117a4612435565b5b60200260200101511580156117dc575083600982815481106117ca576117c9612435565b5b905f5260205f20906003020160010154115b8015611835575061183488600983815481106117fb576117fa612435565b5b905f5260205f2090600302015f015489898681811061181d5761181c612435565b5b905060200281019061182f9190612a73565b611be7565b5b1561187957600183828151811061184f5761184e612435565b5b60200260200101901515908115158152505061186b81896118ad565b846118769190612402565b93505b808061188490612462565b915050611785565b50808061189890612462565b915050611778565b5081925050509392505050565b5f61195560075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20546009858154811061191257611911612435565b5b905f5260205f2090600302016002015461192c91906121b7565b600985815481106119405761193f612435565b5b905f5260205f2090600302016001015461195d565b905092915050565b5f8183101561196e57829050611972565b8190505b92915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a41611573565b60098181548110611a5557611a54612435565b5b905f5260205f2090600302016001015460035f828254611a7591906121b7565b925050819055505f60098281548110611a9157611a90612435565b5b905f5260205f2090600302016001018190555050565b5f61029a60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636095049a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b399190612ae9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cffb47cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc79190612ae9565b611bd191906121b7565b611bdb91906121b7565b905090565b5f33905090565b5f611c1a83838688604051602001611bff9190612b59565b60405160208183030381529060405280519060200120611c24565b9050949350505050565b5f82611c31868685611c3c565b149050949350505050565b5f808290505f5b85859050811015611c8657611c7182878784818110611c6557611c64612435565b5b90506020020135611c92565b91508080611c7e90612462565b915050611c43565b50809150509392505050565b5f818310611ca957611ca48284611cbc565b611cb4565b611cb38383611cbc565b5b905092915050565b5f825f528160205260405f20905092915050565b5f819050919050565b611ce281611cd0565b82525050565b5f602082019050611cfb5f830184611cd9565b92915050565b5f80fd5b5f80fd5b611d1281611cd0565b8114611d1c575f80fd5b50565b5f81359050611d2d81611d09565b92915050565b5f60208284031215611d4857611d47611d01565b5b5f611d5584828501611d1f565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611d8782611d5e565b9050919050565b611d9781611d7d565b8114611da1575f80fd5b50565b5f81359050611db281611d8e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611dd957611dd8611db8565b5b8235905067ffffffffffffffff811115611df657611df5611dbc565b5b602083019150836020820283011115611e1257611e11611dc0565b5b9250929050565b5f805f60408486031215611e3057611e2f611d01565b5b5f611e3d86828701611da4565b935050602084013567ffffffffffffffff811115611e5e57611e5d611d05565b5b611e6a86828701611dc4565b92509250509250925092565b5f805f8060608587031215611e8e57611e8d611d01565b5b5f611e9b87828801611d1f565b9450506020611eac87828801611d1f565b935050604085013567ffffffffffffffff811115611ecd57611ecc611d05565b5b611ed987828801611dc4565b925092505092959194509250565b5f819050919050565b611ef981611ee7565b8114611f03575f80fd5b50565b5f81359050611f1481611ef0565b92915050565b5f60208284031215611f2f57611f2e611d01565b5b5f611f3c84828501611f06565b91505092915050565b5f805f60608486031215611f5c57611f5b611d01565b5b5f611f6986828701611f06565b9350506020611f7a86828701611d1f565b9250506040611f8b86828701611d1f565b9150509250925092565b5f8083601f840112611faa57611fa9611db8565b5b8235905067ffffffffffffffff811115611fc757611fc6611dbc565b5b602083019150836020820283011115611fe357611fe2611dc0565b5b9250929050565b5f805f6040848603121561200157612000611d01565b5b5f84013567ffffffffffffffff81111561201e5761201d611d05565b5b61202a86828701611f95565b9350935050602061203d86828701611d1f565b9150509250925092565b5f806040838503121561205d5761205c611d01565b5b5f61206a85828601611da4565b925050602061207b85828601611d1f565b9150509250929050565b61208e81611d7d565b82525050565b5f6020820190506120a75f830184612085565b92915050565b5f80604083850312156120c3576120c2611d01565b5b5f6120d085828601611f06565b92505060206120e185828601611d1f565b9150509250929050565b5f60208284031215612100576120ff611d01565b5b5f61210d84828501611da4565b91505092915050565b5f819050919050565b5f61213961213461212f84611d5e565b612116565b611d5e565b9050919050565b5f61214a8261211f565b9050919050565b5f61215b82612140565b9050919050565b61216b81612151565b82525050565b5f6020820190506121845f830184612162565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6121c182611cd0565b91506121cc83611cd0565b92508282039050818111156121e4576121e361218a565b5b92915050565b5f82825260208201905092915050565b7f636c61696d7320616c72656164792070617573656400000000000000000000005f82015250565b5f61222e6015836121ea565b9150612239826121fa565b602082019050919050565b5f6020820190508181035f83015261225b81612222565b9050919050565b7f636c61696d73206e6f74207061757365640000000000000000000000000000005f82015250565b5f6122966011836121ea565b91506122a182612262565b602082019050919050565b5f6020820190508181035f8301526122c38161228a565b9050919050565b7f4e6f20536b656c657068756e6b7320636f6e7472616374206c696e6b656400005f82015250565b5f6122fe601e836121ea565b9150612309826122ca565b602082019050919050565b5f6020820190508181035f83015261232b816122f2565b9050919050565b7f636c61696d6573206172652070617573656400000000000000000000000000005f82015250565b5f6123666012836121ea565b915061237182612332565b602082019050919050565b5f6020820190508181035f8301526123938161235a565b9050919050565b7f696e76616c69642067656e64657220616e6420646972656374696f6e000000005f82015250565b5f6123ce601c836121ea565b91506123d98261239a565b602082019050919050565b5f6020820190508181035f8301526123fb816123c2565b9050919050565b5f61240c82611cd0565b915061241783611cd0565b925082820190508082111561242f5761242e61218a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61246c82611cd0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361249e5761249d61218a565b5b600182019050919050565b7f6e6f7420656e6f7567682064726f707320666f7220746869732077616c6c65745f8201527f20746f20636c61696d2074686973207175616e74697479000000000000000000602082015250565b5f6125036037836121ea565b915061250e826124a9565b604082019050919050565b5f6020820190508181035f830152612530816124f7565b9050919050565b7f617474656d7074656420746f20636c61696d206d6f7265207468616e206d61785f8201527f5065722066726f6d206c69737400000000000000000000000000000000000000602082015250565b5f612591602d836121ea565b915061259c82612537565b604082019050919050565b5f6020820190508181035f8301526125be81612585565b9050919050565b7f6e6f20616374697665206c697374732077697468207468617420726f6f7420635f8201527f616e20626520666f756e64000000000000000000000000000000000000000000602082015250565b5f61261f602b836121ea565b915061262a826125c5565b604082019050919050565b5f6020820190508181035f83015261264c81612613565b9050919050565b7f63616e6e6f7420737570706c792074686973206d616e792064726f70732c20705f8201527f6c65617365206c6f7765722074686520616d6f756e7400000000000000000000602082015250565b5f6126ad6036836121ea565b91506126b882612653565b604082019050919050565b5f6020820190508181035f8301526126da816126a1565b9050919050565b7f6e6f7420656e7566662077616c6c657444726f707320666f7220616c6c2074685f8201527f6174000000000000000000000000000000000000000000000000000000000000602082015250565b5f61273b6022836121ea565b9150612746826126e1565b604082019050919050565b5f6020820190508181035f8301526127688161272f565b9050919050565b7f575446207363616d6d65720000000000000000000000000000000000000000005f82015250565b5f6127a3600b836121ea565b91506127ae8261276f565b602082019050919050565b5f6020820190508181035f8301526127d081612797565b9050919050565b7f6e6f206c6973747320746f2064697361626c65000000000000000000000000005f82015250565b5f61280b6013836121ea565b9150612816826127d7565b602082019050919050565b5f6020820190508181035f830152612838816127ff565b9050919050565b7f416c72656164792064726f70706564206d6f7265207468616e207468617400005f82015250565b5f612873601e836121ea565b915061287e8261283f565b602082019050919050565b5f6020820190508181035f8301526128a081612867565b9050919050565b7f4e6f7420656e6f756768206d696e747320696e206372797074000000000000005f82015250565b5f6128db6019836121ea565b91506128e6826128a7565b602082019050919050565b5f6020820190508181035f830152612908816128cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6129696026836121ea565b91506129748261290f565b604082019050919050565b5f6020820190508181035f8301526129968161295d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6129d16020836121ea565b91506129dc8261299d565b602082019050919050565b5f6020820190508181035f8301526129fe816129c5565b9050919050565b5f606082019050612a185f830186612085565b612a256020830185611cd9565b612a326040830184611cd9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112612a8f57612a8e612a67565b5b80840192508235915067ffffffffffffffff821115612ab157612ab0612a6b565b5b602083019250602082023603831315612acd57612acc612a6f565b5b509250929050565b5f81519050612ae381611d09565b92915050565b5f60208284031215612afe57612afd611d01565b5b5f612b0b84828501612ad5565b91505092915050565b5f8160601b9050919050565b5f612b2a82612b14565b9050919050565b5f612b3b82612b20565b9050919050565b612b53612b4e82611d7d565b612b31565b82525050565b5f612b648284612b42565b6014820191508190509291505056fea26469706673582212202fbb6bec834e70b20badf0b0c2f275a0054ef3f4244998c576092d9062b5d85064736f6c63430008150033
Deployed Bytecode
0x608060405234801561000f575f80fd5b50600436106101cc575f3560e01c80637f7bcc4c11610102578063a4f48957116100a0578063eb1cfa821161006f578063eb1cfa82146104a4578063ee7113bb146104c0578063f2fde38b146104dc578063f6714013146104f8576101cc565b8063a4f489571461041e578063cd7e929d1461043a578063d42b7b8a1461046a578063defaee8c14610474576101cc565b80638d0f8cef116100dc5780638d0f8cef146103985780638da5cb5b146103b4578063908742a1146103d25780639e34b03714610402576101cc565b80637f7bcc4c146103445780638027bf63146103605780638c04f6a21461037c576101cc565b80634649a6ff1161016f578063555461e811610149578063555461e8146102d05780636a91c1a5146102ee5780636cf0887e1461030a578063715018a61461033a576101cc565b80634649a6ff1461027a57806349ab14d8146102965780634af4459c146102a0576101cc565b806338163f16116101ab57806338163f16146102165780633d8f6806146102345780633ee60bcf1461023e57806341c613831461025c576101cc565b80623e6597146101d05780630f3314e7146101ee5780631dfab086146101f8575b5f80fd5b6101d8610516565b6040516101e59190611ce8565b60405180910390f35b6101f661052c565b005b61020061059f565b60405161020d9190611ce8565b60405180910390f35b61021e6105ca565b60405161022b9190611ce8565b60405180910390f35b61023c6105d0565b005b610246610641565b6040516102539190611ce8565b60405180910390f35b610264610647565b6040516102719190611ce8565b60405180910390f35b610294600480360381019061028f9190611d33565b61064d565b005b61029e61088c565b005b6102ba60048036038101906102b59190611e19565b6108a1565b6040516102c79190611ce8565b60405180910390f35b6102d86108fe565b6040516102e59190611ce8565b60405180910390f35b61030860048036038101906103039190611e76565b61095e565b005b610324600480360381019061031f9190611f1a565b610dbc565b6040516103319190611ce8565b60405180910390f35b610342610e45565b005b61035e60048036038101906103599190611f1a565b610e58565b005b61037a60048036038101906103759190611f45565b610f97565b005b61039660048036038101906103919190611fea565b611067565b005b6103b260048036038101906103ad9190612047565b611125565b005b6103bc611223565b6040516103c99190612094565b60405180910390f35b6103ec60048036038101906103e79190611e19565b61124a565b6040516103f99190611ce8565b60405180910390f35b61041c600480360381019061041791906120ad565b61128c565b005b610438600480360381019061043391906120eb565b6112a4565b005b610454600480360381019061044f91906120eb565b6112cc565b6040516104619190611ce8565b60405180910390f35b610472611312565b005b61048e600480360381019061048991906120eb565b61138f565b60405161049b9190611ce8565b60405180910390f35b6104be60048036038101906104b99190611d33565b6113d5565b005b6104da60048036038101906104d591906120eb565b611481565b005b6104f660048036038101906104f191906120eb565b6114cc565b005b61050061154e565b60405161050d9190612171565b60405180910390f35b5f60055460035461052791906121b7565b905090565b610534611573565b60085f9054906101000a900460ff1615610583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161057a90612244565b60405180910390fd5b600160085f6101000a81548160ff021916908315150217905550565b5f6105a86115f1565b6105b4575f90506105c7565b6003546002546105c491906121b7565b90505b90565b60025481565b6105d8611573565b60085f9054906101000a900460ff16610626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161061d906122ac565b60405180910390fd5b5f60085f6101000a81548160ff021916908315150217905550565b60035481565b60055481565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16036106dc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d390612314565b60405180910390fd5b60085f9054906101000a900460ff161561072b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107229061237c565b60405180910390fd5b5f811015801561073b5750600481105b61077a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610771906123e4565b60405180910390fd5b5f60045f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f60065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205490505f818361080991906121b7565b90505f81905061081a338287611601565b8060065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546108669190612402565b925050819055508060055f82825461087e9190612402565b925050819055505050505050565b610894611573565b61089f6003546113d5565b565b5f60045f8573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20546108eb858585611720565b6108f59190612402565b90509392505050565b5f805f90505f5b600980549050811015610956576009818154811061092657610925612435565b5b905f5260205f20906003020160010154826109419190612402565b9150808061094e90612462565b915050610905565b508091505090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff16036109ed576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e490612314565b60405180910390fd5b60085f9054906101000a900460ff1615610a3c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a339061237c565b60405180910390fd5b5f8310158015610a4c5750600483105b610a8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a82906123e4565b60405180910390fd5b5f610a9733848461124a565b905080851115610adc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ad390612519565b60405180910390fd5b5f808614610aea5785610aec565b815b90505f8190505f5b600980549050811015610d3c575f60098281548110610b1657610b15612435565b5b905f5260205f20906003020160010154118015610b3257505f82115b8015610bac575060098181548110610b4d57610b4c612435565b5b905f5260205f2090600302016002015460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8381526020019081526020015f2054105b15610d29575f610bbc82336118ad565b90505f610bc9848361195d565b90508060098481548110610be057610bdf612435565b5b905f5260205f2090600302016001015f828254610bfd91906121b7565b925050819055508060075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f205f828254610c5f9190612402565b9250508190555060098381548110610c7a57610c79612435565b5b905f5260205f2090600302016002015460075f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20541115610d18576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0f906125a7565b60405180910390fd5b8084610d2491906121b7565b935050505b8080610d3490612462565b915050610af4565b508160065f3373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f828254610d899190612402565b925050819055508160055f828254610da19190612402565b92505081905550610db3338388611601565b50505050505050565b5f805f5b600980549050811015610e3b578360098281548110610de257610de1612435565b5b905f5260205f2090600302015f015403610e285760098181548110610e0a57610e09612435565b5b905f5260205f2090600302016001015482610e259190612402565b91505b8080610e3390612462565b915050610dc0565b5080915050919050565b610e4d611573565b610e565f611978565b565b610e60611573565b5f805f90505b600980549050811015610f50578260098281548110610e8857610e87612435565b5b905f5260205f2090600302015f0154148015610ec657505f60098281548110610eb457610eb3612435565b5b905f5260205f20906003020160010154115b15610f3d578180610ed690612462565b92505060098181548110610eed57610eec612435565b5b905f5260205f2090600302016001015460035f828254610f0d91906121b7565b925050819055505f60098281548110610f2957610f28612435565b5b905f5260205f209060030201600101819055505b8080610f4890612462565b915050610e66565b505f8111610f93576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8a90612635565b60405180910390fd5b5050565b610f9f611573565b610fa761059f565b821115610fe9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe0906126c3565b60405180910390fd5b8160035f828254610ffa9190612402565b925050819055506009604051806060016040528085815260200184815260200183815250908060018154018082558091505060019003905f5260205f2090600302015f909190919091505f820151815f015560208201518160010155604082015181600201555050505050565b61106f611573565b61107761059f565b5f10611081575f80fd5b8282905061108d61059f565b10156110ce576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c590612751565b60405180910390fd5b5f5b8383905081101561111f5761110c8484838181106110f1576110f0612435565b5b905060200201602081019061110691906120eb565b83611125565b808061111790612462565b9150506110d0565b50505050565b61112d611573565b61113561059f565b5f1061113f575f80fd5b611147611223565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16036111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab906127b9565b60405180910390fd5b8060045f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8282546112009190612402565b925050819055508060035f8282546112189190612402565b925050819055505050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b5f60085f9054906101000a900460ff16611281576112678461138f565b6112728585856108a1565b61127c91906121b7565b611283565b5f5b90509392505050565b611294611573565b6112a082826001610f97565b5050565b6112ac611573565b6112b461059f565b5f106112be575f80fd5b6112c9816001611125565b50565b5f60045f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b61131a611573565b5f60098054905011611361576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135890612821565b60405180910390fd5b5f5b60098054905081101561138c5761137981611a39565b808061138490612462565b915050611363565b50565b5f60065f8373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f20549050919050565b6113dd611573565b8060035410611421576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141890612889565b60405180910390fd5b611429611aa7565b6003548261143791906121b7565b10611477576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146e906128f1565b60405180910390fd5b8060028190555050565b611489611573565b8060015f6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b6114d4611573565b5f73ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603611542576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115399061297f565b60405180910390fd5b61154b81611978565b50565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61157b611be0565b73ffffffffffffffffffffffffffffffffffffffff16611599611223565b73ffffffffffffffffffffffffffffffffffffffff16146115ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115e6906129e7565b60405180910390fd5b565b5f6115fa611aa7565b5f10905090565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff165f73ffffffffffffffffffffffffffffffffffffffff1603611690576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161168790612314565b60405180910390fd5b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166330359e5f8484846040518463ffffffff1660e01b81526004016116ee93929190612a05565b5f604051808303815f87803b158015611705575f80fd5b505af1158015611717573d5f803e3d5ffd5b50505050505050565b5f805f90505f60098054905067ffffffffffffffff81111561174557611744612a3a565b5b6040519080825280602002602001820160405280156117735781602001602082028036833780820191505090505b5090505f5b858590508110156118a0575f5b60098054905081101561188c578281815181106117a5576117a4612435565b5b60200260200101511580156117dc575083600982815481106117ca576117c9612435565b5b905f5260205f20906003020160010154115b8015611835575061183488600983815481106117fb576117fa612435565b5b905f5260205f2090600302015f015489898681811061181d5761181c612435565b5b905060200281019061182f9190612a73565b611be7565b5b1561187957600183828151811061184f5761184e612435565b5b60200260200101901515908115158152505061186b81896118ad565b846118769190612402565b93505b808061188490612462565b915050611785565b50808061189890612462565b915050611778565b5081925050509392505050565b5f61195560075f8473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020015f205f8581526020019081526020015f20546009858154811061191257611911612435565b5b905f5260205f2090600302016002015461192c91906121b7565b600985815481106119405761193f612435565b5b905f5260205f2090600302016001015461195d565b905092915050565b5f8183101561196e57829050611972565b8190505b92915050565b5f805f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050815f806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611a41611573565b60098181548110611a5557611a54612435565b5b905f5260205f2090600302016001015460035f828254611a7591906121b7565b925050819055505f60098281548110611a9157611a90612435565b5b905f5260205f2090600302016001018190555050565b5f61029a60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16636095049a6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611b15573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611b399190612ae9565b60015f9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663cffb47cf6040518163ffffffff1660e01b8152600401602060405180830381865afa158015611ba3573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611bc79190612ae9565b611bd191906121b7565b611bdb91906121b7565b905090565b5f33905090565b5f611c1a83838688604051602001611bff9190612b59565b60405160208183030381529060405280519060200120611c24565b9050949350505050565b5f82611c31868685611c3c565b149050949350505050565b5f808290505f5b85859050811015611c8657611c7182878784818110611c6557611c64612435565b5b90506020020135611c92565b91508080611c7e90612462565b915050611c43565b50809150509392505050565b5f818310611ca957611ca48284611cbc565b611cb4565b611cb38383611cbc565b5b905092915050565b5f825f528160205260405f20905092915050565b5f819050919050565b611ce281611cd0565b82525050565b5f602082019050611cfb5f830184611cd9565b92915050565b5f80fd5b5f80fd5b611d1281611cd0565b8114611d1c575f80fd5b50565b5f81359050611d2d81611d09565b92915050565b5f60208284031215611d4857611d47611d01565b5b5f611d5584828501611d1f565b91505092915050565b5f73ffffffffffffffffffffffffffffffffffffffff82169050919050565b5f611d8782611d5e565b9050919050565b611d9781611d7d565b8114611da1575f80fd5b50565b5f81359050611db281611d8e565b92915050565b5f80fd5b5f80fd5b5f80fd5b5f8083601f840112611dd957611dd8611db8565b5b8235905067ffffffffffffffff811115611df657611df5611dbc565b5b602083019150836020820283011115611e1257611e11611dc0565b5b9250929050565b5f805f60408486031215611e3057611e2f611d01565b5b5f611e3d86828701611da4565b935050602084013567ffffffffffffffff811115611e5e57611e5d611d05565b5b611e6a86828701611dc4565b92509250509250925092565b5f805f8060608587031215611e8e57611e8d611d01565b5b5f611e9b87828801611d1f565b9450506020611eac87828801611d1f565b935050604085013567ffffffffffffffff811115611ecd57611ecc611d05565b5b611ed987828801611dc4565b925092505092959194509250565b5f819050919050565b611ef981611ee7565b8114611f03575f80fd5b50565b5f81359050611f1481611ef0565b92915050565b5f60208284031215611f2f57611f2e611d01565b5b5f611f3c84828501611f06565b91505092915050565b5f805f60608486031215611f5c57611f5b611d01565b5b5f611f6986828701611f06565b9350506020611f7a86828701611d1f565b9250506040611f8b86828701611d1f565b9150509250925092565b5f8083601f840112611faa57611fa9611db8565b5b8235905067ffffffffffffffff811115611fc757611fc6611dbc565b5b602083019150836020820283011115611fe357611fe2611dc0565b5b9250929050565b5f805f6040848603121561200157612000611d01565b5b5f84013567ffffffffffffffff81111561201e5761201d611d05565b5b61202a86828701611f95565b9350935050602061203d86828701611d1f565b9150509250925092565b5f806040838503121561205d5761205c611d01565b5b5f61206a85828601611da4565b925050602061207b85828601611d1f565b9150509250929050565b61208e81611d7d565b82525050565b5f6020820190506120a75f830184612085565b92915050565b5f80604083850312156120c3576120c2611d01565b5b5f6120d085828601611f06565b92505060206120e185828601611d1f565b9150509250929050565b5f60208284031215612100576120ff611d01565b5b5f61210d84828501611da4565b91505092915050565b5f819050919050565b5f61213961213461212f84611d5e565b612116565b611d5e565b9050919050565b5f61214a8261211f565b9050919050565b5f61215b82612140565b9050919050565b61216b81612151565b82525050565b5f6020820190506121845f830184612162565b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52601160045260245ffd5b5f6121c182611cd0565b91506121cc83611cd0565b92508282039050818111156121e4576121e361218a565b5b92915050565b5f82825260208201905092915050565b7f636c61696d7320616c72656164792070617573656400000000000000000000005f82015250565b5f61222e6015836121ea565b9150612239826121fa565b602082019050919050565b5f6020820190508181035f83015261225b81612222565b9050919050565b7f636c61696d73206e6f74207061757365640000000000000000000000000000005f82015250565b5f6122966011836121ea565b91506122a182612262565b602082019050919050565b5f6020820190508181035f8301526122c38161228a565b9050919050565b7f4e6f20536b656c657068756e6b7320636f6e7472616374206c696e6b656400005f82015250565b5f6122fe601e836121ea565b9150612309826122ca565b602082019050919050565b5f6020820190508181035f83015261232b816122f2565b9050919050565b7f636c61696d6573206172652070617573656400000000000000000000000000005f82015250565b5f6123666012836121ea565b915061237182612332565b602082019050919050565b5f6020820190508181035f8301526123938161235a565b9050919050565b7f696e76616c69642067656e64657220616e6420646972656374696f6e000000005f82015250565b5f6123ce601c836121ea565b91506123d98261239a565b602082019050919050565b5f6020820190508181035f8301526123fb816123c2565b9050919050565b5f61240c82611cd0565b915061241783611cd0565b925082820190508082111561242f5761242e61218a565b5b92915050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52603260045260245ffd5b5f61246c82611cd0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361249e5761249d61218a565b5b600182019050919050565b7f6e6f7420656e6f7567682064726f707320666f7220746869732077616c6c65745f8201527f20746f20636c61696d2074686973207175616e74697479000000000000000000602082015250565b5f6125036037836121ea565b915061250e826124a9565b604082019050919050565b5f6020820190508181035f830152612530816124f7565b9050919050565b7f617474656d7074656420746f20636c61696d206d6f7265207468616e206d61785f8201527f5065722066726f6d206c69737400000000000000000000000000000000000000602082015250565b5f612591602d836121ea565b915061259c82612537565b604082019050919050565b5f6020820190508181035f8301526125be81612585565b9050919050565b7f6e6f20616374697665206c697374732077697468207468617420726f6f7420635f8201527f616e20626520666f756e64000000000000000000000000000000000000000000602082015250565b5f61261f602b836121ea565b915061262a826125c5565b604082019050919050565b5f6020820190508181035f83015261264c81612613565b9050919050565b7f63616e6e6f7420737570706c792074686973206d616e792064726f70732c20705f8201527f6c65617365206c6f7765722074686520616d6f756e7400000000000000000000602082015250565b5f6126ad6036836121ea565b91506126b882612653565b604082019050919050565b5f6020820190508181035f8301526126da816126a1565b9050919050565b7f6e6f7420656e7566662077616c6c657444726f707320666f7220616c6c2074685f8201527f6174000000000000000000000000000000000000000000000000000000000000602082015250565b5f61273b6022836121ea565b9150612746826126e1565b604082019050919050565b5f6020820190508181035f8301526127688161272f565b9050919050565b7f575446207363616d6d65720000000000000000000000000000000000000000005f82015250565b5f6127a3600b836121ea565b91506127ae8261276f565b602082019050919050565b5f6020820190508181035f8301526127d081612797565b9050919050565b7f6e6f206c6973747320746f2064697361626c65000000000000000000000000005f82015250565b5f61280b6013836121ea565b9150612816826127d7565b602082019050919050565b5f6020820190508181035f830152612838816127ff565b9050919050565b7f416c72656164792064726f70706564206d6f7265207468616e207468617400005f82015250565b5f612873601e836121ea565b915061287e8261283f565b602082019050919050565b5f6020820190508181035f8301526128a081612867565b9050919050565b7f4e6f7420656e6f756768206d696e747320696e206372797074000000000000005f82015250565b5f6128db6019836121ea565b91506128e6826128a7565b602082019050919050565b5f6020820190508181035f830152612908816128cf565b9050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f20615f8201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b5f6129696026836121ea565b91506129748261290f565b604082019050919050565b5f6020820190508181035f8301526129968161295d565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65725f82015250565b5f6129d16020836121ea565b91506129dc8261299d565b602082019050919050565b5f6020820190508181035f8301526129fe816129c5565b9050919050565b5f606082019050612a185f830186612085565b612a256020830185611cd9565b612a326040830184611cd9565b949350505050565b7f4e487b71000000000000000000000000000000000000000000000000000000005f52604160045260245ffd5b5f80fd5b5f80fd5b5f80fd5b5f8083356001602003843603038112612a8f57612a8e612a67565b5b80840192508235915067ffffffffffffffff821115612ab157612ab0612a6b565b5b602083019250602082023603831315612acd57612acc612a6f565b5b509250929050565b5f81519050612ae381611d09565b92915050565b5f60208284031215612afe57612afd611d01565b5b5f612b0b84828501612ad5565b91505092915050565b5f8160601b9050919050565b5f612b2a82612b14565b9050919050565b5f612b3b82612b20565b9050919050565b612b53612b4e82611d7d565b612b31565b82525050565b5f612b648284612b42565b6014820191508190509291505056fea26469706673582212202fbb6bec834e70b20badf0b0c2f275a0054ef3f4244998c576092d9062b5d85064736f6c63430008150033
Loading...
Loading
Loading...
Loading
Net Worth in USD
$0.00
Net Worth in ETH
0
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.