Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 274 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Configure Blocke... | 19755803 | 198 days ago | IN | 0 ETH | 0.00459693 | ||||
Configure Blocke... | 19755794 | 198 days ago | IN | 0 ETH | 0.00432765 | ||||
Configure Blocke... | 19755722 | 198 days ago | IN | 0 ETH | 0.00407851 | ||||
Configure Blocke... | 19755580 | 198 days ago | IN | 0 ETH | 0.00067493 | ||||
Configure Blocke... | 19755564 | 198 days ago | IN | 0 ETH | 0.00077887 | ||||
Configure Blocke... | 19100737 | 290 days ago | IN | 0 ETH | 0.00509035 | ||||
Configure Blocke... | 19088713 | 292 days ago | IN | 0 ETH | 0.00977155 | ||||
Configure Blocke... | 19088683 | 292 days ago | IN | 0 ETH | 0.00930072 | ||||
Configure Blocke... | 18923614 | 315 days ago | IN | 0 ETH | 0.00185199 | ||||
Configure Blocke... | 18923610 | 315 days ago | IN | 0 ETH | 0.00192408 | ||||
Configure Blocke... | 18923608 | 315 days ago | IN | 0 ETH | 0.00179681 | ||||
Configure Blocke... | 18921294 | 315 days ago | IN | 0 ETH | 0.00206767 | ||||
Configure Blocke... | 18921285 | 315 days ago | IN | 0 ETH | 0.01330808 | ||||
Configure Blocke... | 18921254 | 315 days ago | IN | 0 ETH | 0.01318592 | ||||
Configure Blocke... | 18731493 | 342 days ago | IN | 0 ETH | 0.01930084 | ||||
Configure Blocke... | 18714424 | 344 days ago | IN | 0 ETH | 0.0054986 | ||||
Configure Blocke... | 18612238 | 359 days ago | IN | 0 ETH | 0.00327248 | ||||
Configure Blocke... | 18373933 | 392 days ago | IN | 0 ETH | 0.0051687 | ||||
Configure Blocke... | 18343485 | 396 days ago | IN | 0 ETH | 0.0054926 | ||||
Configure Blocke... | 18251795 | 409 days ago | IN | 0 ETH | 0.00081544 | ||||
Configure Blocke... | 18223563 | 413 days ago | IN | 0 ETH | 0.00336134 | ||||
Configure Blocke... | 18223472 | 413 days ago | IN | 0 ETH | 0.00077106 | ||||
Configure Blocke... | 18206110 | 415 days ago | IN | 0 ETH | 0.00035425 | ||||
Configure Blocke... | 18176033 | 420 days ago | IN | 0 ETH | 0.00134041 | ||||
Configure Blocke... | 18173959 | 420 days ago | IN | 0 ETH | 0.00462689 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
CreatorOperatorFilterer
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.17; import "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC721/IERC721CreatorExtensionApproveTransfer.sol"; import "@manifoldxyz/creator-core-solidity/contracts/extensions/ERC1155/IERC1155CreatorExtensionApproveTransfer.sol"; import "@manifoldxyz/libraries-solidity/contracts/access/IAdminControl.sol"; import "@openzeppelin/contracts/utils/structs/EnumerableSet.sol"; /// @author: manifold.xyz /** * Creator controlled Operator Filter for Manifold Creator contracts */ contract CreatorOperatorFilterer is IERC165 { using EnumerableSet for EnumerableSet.AddressSet; using EnumerableSet for EnumerableSet.Bytes32Set; error OperatorNotAllowed(address operator); error CodeHashFiltered(address account, bytes32 codeHash); event OperatorUpdated(address indexed registrant, address indexed operator, bool indexed filtered); event CodeHashUpdated(address indexed registrant, bytes32 indexed codeHash, bool indexed filtered); mapping(address => EnumerableSet.AddressSet) private _creatorBlockedOperators; mapping(address => EnumerableSet.Bytes32Set) private _creatorFilteredCodeHashes; modifier creatorAdminRequired(address creatorContractAddress) { require(IAdminControl(creatorContractAddress).isAdmin(msg.sender), "Wallet is not an admin"); _; } /** * @dev Get list of blocked operator addresses for a given creator contract */ function getBlockedOperators(address creatorContractAddress) external view returns (address[] memory result) { EnumerableSet.AddressSet storage set = _creatorBlockedOperators[creatorContractAddress]; result = new address[](set.length()); for (uint i; i < set.length(); ++i) { result[i] = set.at(i); } } /** * @dev Get list of blocked operator code hashes for a given creator contract */ function getBlockedOperatorHashes(address creatorContractAddress) external view returns (bytes32[] memory result) { EnumerableSet.Bytes32Set storage set = _creatorFilteredCodeHashes[creatorContractAddress]; result = new bytes32[](set.length()); for (uint i; i < set.length(); ++i) { result[i] = set.at(i); } } /** * @dev Configure list of operator addresses for a given creator contract * Only an admin of the creator contract can make this call */ function configureBlockedOperators(address creator, address[] memory operators, bool[] memory blocked) public creatorAdminRequired(creator) { require(operators.length == blocked.length, "Mismatch input length"); for (uint i; i < operators.length; ++i) { address operator = operators[i]; bool blockedValue = blocked[i]; if (blockedValue) { _creatorBlockedOperators[creator].add(operator); } else { _creatorBlockedOperators[creator].remove(operator); } emit OperatorUpdated(creator, operator, blockedValue); } } /** * @dev Configure list of operator code hashes for a given creator contract * Only an admin of the creator contract can make this call */ function configureBlockedOperatorHashes(address creator, bytes32[] memory hashes, bool[] memory blocked) public creatorAdminRequired(creator) { require(hashes.length == blocked.length, "Mismatch input length"); for (uint i; i < hashes.length; ++i) { bytes32 hash_ = hashes[i]; bool blockedValue = blocked[i]; if (blockedValue) { _creatorFilteredCodeHashes[creator].add(hash_); } else { _creatorFilteredCodeHashes[creator].remove(hash_); } emit CodeHashUpdated(creator, hash_, blockedValue); } } /** * @dev Configure list of operator addresses and code hashes for a given creator contract * Only an admin of the creator contract can make this call */ function configureBlockedOperatorsAndHashes(address creator, address[] memory operators, bool[] memory blockedOperators, bytes32[] memory hashes, bool[] memory blockedHashes) public creatorAdminRequired(creator) { configureBlockedOperators(creator, operators, blockedOperators); configureBlockedOperatorHashes(creator, hashes, blockedHashes); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override (IERC165) returns (bool) { return interfaceId == type(IERC721CreatorExtensionApproveTransfer).interfaceId || interfaceId == type(IERC1155CreatorExtensionApproveTransfer).interfaceId || interfaceId == type(IERC165).interfaceId; } /** * @dev ERC1155: Called by creator contract to approve a transfer */ function approveTransfer(address operator, address from, address, uint256[] calldata, uint256[] calldata) external view returns (bool) { return isOperatorAllowed(operator, from); } /** * @dev ERC721: Called by creator contract to approve a transfer */ function approveTransfer(address operator, address from, address, uint256) external view returns (bool) { return isOperatorAllowed(operator, from); } /** * @dev Check OperatorFiltererRegistry to see if operator is approved */ function isOperatorAllowed(address operator, address from) internal view returns (bool) { if (from != operator) { if (_creatorBlockedOperators[msg.sender].contains(operator)) { revert OperatorNotAllowed(operator); } if (operator.code.length > 0) { bytes32 codeHash = operator.codehash; if (_creatorFilteredCodeHashes[msg.sender].contains(codeHash)) { revert CodeHashFiltered(operator, codeHash); } } } return true; } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * Implement this if you want your extension to approve a transfer */ interface IERC1155CreatorExtensionApproveTransfer is IERC165 { /** * @dev Set whether or not the creator contract will check the extension for approval of token transfer */ function setApproveTransfer(address creator, bool enabled) external; /** * @dev Called by creator contract to approve a transfer */ function approveTransfer(address operator, address from, address to, uint256[] calldata tokenIds, uint256[] calldata amounts) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * Implement this if you want your extension to approve a transfer */ interface IERC721CreatorExtensionApproveTransfer is IERC165 { /** * @dev Set whether or not the creator will check the extension for approval of token transfer */ function setApproveTransfer(address creator, bool enabled) external; /** * @dev Called by creator contract to approve a transfer */ function approveTransfer(address operator, address from, address to, uint256 tokenId) external returns (bool); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /// @author: manifold.xyz import "@openzeppelin/contracts/utils/introspection/IERC165.sol"; /** * @dev Interface for admin control */ interface IAdminControl is IERC165 { event AdminApproved(address indexed account, address indexed sender); event AdminRevoked(address indexed account, address indexed sender); /** * @dev gets address of all admins */ function getAdmins() external view returns (address[] memory); /** * @dev add an admin. Can only be called by contract owner. */ function approveAdmin(address admin) external; /** * @dev remove an admin. Can only be called by contract owner. */ function revokeAdmin(address admin) external; /** * @dev checks whether or not given address is an admin * Returns True if they are */ function isAdmin(address admin) 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 (last updated v4.7.0) (utils/structs/EnumerableSet.sol) pragma solidity ^0.8.0; /** * @dev Library for managing * https://en.wikipedia.org/wiki/Set_(abstract_data_type)[sets] of primitive * types. * * Sets have the following properties: * * - Elements are added, removed, and checked for existence in constant time * (O(1)). * - Elements are enumerated in O(n). No guarantees are made on the ordering. * * ``` * contract Example { * // Add the library methods * using EnumerableSet for EnumerableSet.AddressSet; * * // Declare a set state variable * EnumerableSet.AddressSet private mySet; * } * ``` * * As of v3.3.0, sets of type `bytes32` (`Bytes32Set`), `address` (`AddressSet`) * and `uint256` (`UintSet`) are supported. * * [WARNING] * ==== * Trying to delete such a structure from storage will likely result in data corruption, rendering the structure unusable. * See https://github.com/ethereum/solidity/pull/11843[ethereum/solidity#11843] for more info. * * In order to clean an EnumerableSet, you can either remove all elements one by one or create a fresh instance using an array of EnumerableSet. * ==== */ library EnumerableSet { // To implement this library for multiple types with as little code // repetition as possible, we write it in terms of a generic Set type with // bytes32 values. // The Set implementation uses private functions, and user-facing // implementations (such as AddressSet) are just wrappers around the // underlying Set. // This means that we can only create new EnumerableSets for types that fit // in bytes32. struct Set { // Storage of set values bytes32[] _values; // Position of the value in the `values` array, plus 1 because index 0 // means a value is not in the set. mapping(bytes32 => uint256) _indexes; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function _add(Set storage set, bytes32 value) private returns (bool) { if (!_contains(set, value)) { set._values.push(value); // The value is stored at length-1, but we add 1 to all indexes // and use 0 as a sentinel value set._indexes[value] = set._values.length; return true; } else { return false; } } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function _remove(Set storage set, bytes32 value) private returns (bool) { // We read and store the value's index to prevent multiple reads from the same storage slot uint256 valueIndex = set._indexes[value]; if (valueIndex != 0) { // Equivalent to contains(set, value) // To delete an element from the _values array in O(1), we swap the element to delete with the last one in // the array, and then remove the last element (sometimes called as 'swap and pop'). // This modifies the order of the array, as noted in {at}. uint256 toDeleteIndex = valueIndex - 1; uint256 lastIndex = set._values.length - 1; if (lastIndex != toDeleteIndex) { bytes32 lastValue = set._values[lastIndex]; // Move the last value to the index where the value to delete is set._values[toDeleteIndex] = lastValue; // Update the index for the moved value set._indexes[lastValue] = valueIndex; // Replace lastValue's index to valueIndex } // Delete the slot where the moved value was stored set._values.pop(); // Delete the index for the deleted slot delete set._indexes[value]; return true; } else { return false; } } /** * @dev Returns true if the value is in the set. O(1). */ function _contains(Set storage set, bytes32 value) private view returns (bool) { return set._indexes[value] != 0; } /** * @dev Returns the number of values on the set. O(1). */ function _length(Set storage set) private view returns (uint256) { return set._values.length; } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function _at(Set storage set, uint256 index) private view returns (bytes32) { return set._values[index]; } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function _values(Set storage set) private view returns (bytes32[] memory) { return set._values; } // Bytes32Set struct Bytes32Set { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _add(set._inner, value); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(Bytes32Set storage set, bytes32 value) internal returns (bool) { return _remove(set._inner, value); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(Bytes32Set storage set, bytes32 value) internal view returns (bool) { return _contains(set._inner, value); } /** * @dev Returns the number of values in the set. O(1). */ function length(Bytes32Set storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(Bytes32Set storage set, uint256 index) internal view returns (bytes32) { return _at(set._inner, index); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(Bytes32Set storage set) internal view returns (bytes32[] memory) { return _values(set._inner); } // AddressSet struct AddressSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(AddressSet storage set, address value) internal returns (bool) { return _add(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(AddressSet storage set, address value) internal returns (bool) { return _remove(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(AddressSet storage set, address value) internal view returns (bool) { return _contains(set._inner, bytes32(uint256(uint160(value)))); } /** * @dev Returns the number of values in the set. O(1). */ function length(AddressSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(AddressSet storage set, uint256 index) internal view returns (address) { return address(uint160(uint256(_at(set._inner, index)))); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(AddressSet storage set) internal view returns (address[] memory) { bytes32[] memory store = _values(set._inner); address[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } // UintSet struct UintSet { Set _inner; } /** * @dev Add a value to a set. O(1). * * Returns true if the value was added to the set, that is if it was not * already present. */ function add(UintSet storage set, uint256 value) internal returns (bool) { return _add(set._inner, bytes32(value)); } /** * @dev Removes a value from a set. O(1). * * Returns true if the value was removed from the set, that is if it was * present. */ function remove(UintSet storage set, uint256 value) internal returns (bool) { return _remove(set._inner, bytes32(value)); } /** * @dev Returns true if the value is in the set. O(1). */ function contains(UintSet storage set, uint256 value) internal view returns (bool) { return _contains(set._inner, bytes32(value)); } /** * @dev Returns the number of values on the set. O(1). */ function length(UintSet storage set) internal view returns (uint256) { return _length(set._inner); } /** * @dev Returns the value stored at position `index` in the set. O(1). * * Note that there are no guarantees on the ordering of values inside the * array, and it may change when more values are added or removed. * * Requirements: * * - `index` must be strictly less than {length}. */ function at(UintSet storage set, uint256 index) internal view returns (uint256) { return uint256(_at(set._inner, index)); } /** * @dev Return the entire set in an array * * WARNING: This operation will copy the entire storage to memory, which can be quite expensive. This is designed * to mostly be used by view accessors that are queried without any gas fees. Developers should keep in mind that * this function has an unbounded cost, and using it as part of a state-changing function may render the function * uncallable if the set grows to a point where copying to memory consumes too much gas to fit in a block. */ function values(UintSet storage set) internal view returns (uint256[] memory) { bytes32[] memory store = _values(set._inner); uint256[] memory result; /// @solidity memory-safe-assembly assembly { result := store } return result; } }
{ "viaIR": true, "optimizer": { "enabled": true, "runs": 1000 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "abi" ] } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"bytes32","name":"codeHash","type":"bytes32"}],"name":"CodeHashFiltered","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"OperatorNotAllowed","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registrant","type":"address"},{"indexed":true,"internalType":"bytes32","name":"codeHash","type":"bytes32"},{"indexed":true,"internalType":"bool","name":"filtered","type":"bool"}],"name":"CodeHashUpdated","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"registrant","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"bool","name":"filtered","type":"bool"}],"name":"OperatorUpdated","type":"event"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"approveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"","type":"address"},{"internalType":"uint256[]","name":"","type":"uint256[]"},{"internalType":"uint256[]","name":"","type":"uint256[]"}],"name":"approveTransfer","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"},{"internalType":"bool[]","name":"blocked","type":"bool[]"}],"name":"configureBlockedOperatorHashes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address[]","name":"operators","type":"address[]"},{"internalType":"bool[]","name":"blocked","type":"bool[]"}],"name":"configureBlockedOperators","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creator","type":"address"},{"internalType":"address[]","name":"operators","type":"address[]"},{"internalType":"bool[]","name":"blockedOperators","type":"bool[]"},{"internalType":"bytes32[]","name":"hashes","type":"bytes32[]"},{"internalType":"bool[]","name":"blockedHashes","type":"bool[]"}],"name":"configureBlockedOperatorsAndHashes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"creatorContractAddress","type":"address"}],"name":"getBlockedOperatorHashes","outputs":[{"internalType":"bytes32[]","name":"result","type":"bytes32[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"creatorContractAddress","type":"address"}],"name":"getBlockedOperators","outputs":[{"internalType":"address[]","name":"result","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080806040523461001657610e17908161001c8239f35b600080fdfe6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146107b957508063225d0f94146106e55780635e6a6f8a146106ad5780637215c202146105ee5780639401d61c1461049c5780639fde10aa146101db578063b1b84ee2146101045763e48351771461007b57600080fd5b346101005760a036600319011261010057610094610889565b9061009d6108a4565b936100a66108ba565b5067ffffffffffffffff906064358281116100fc576100c89036908501610a53565b50506084359182116100f95750916100e9602095926100f094369101610a53565b5050610cfe565b90519015158152f35b80fd5b5080fd5b8280fd5b5050346100fc57602080600319360112610100576001600160a01b03928361012a610889565b1681528082528281209182549061014082610908565b9161014d865193846108d0565b80835261015981610908565b8383019590601f1901368737845b8281106101a7575050508451948186019282875251809352850193925b8281106101915785850386f35b8351871685529381019392810192600101610184565b80896101ba6101d2938599979899610ad3565b90549060031b1c166101cc8289610aa9565b52610a84565b94939294610167565b5090346101005760a0366003190112610100576101f6610889565b67ffffffffffffffff906024358281116104985761021790369086016109e5565b906044358381116104945761022f903690870161097e565b90606435848111610490576102479036908801610920565b936084359081116104905761025f903690880161097e565b926001600160a01b0380921694865194630935e01b60e21b808752338a88015260209687816024818c5afa90811561048657906102a3918d9161046f575b50610b03565b8851818152338b82015287816024818c5afa90811561048657906102cd918d9161046f5750610b03565b6102da8451875114610b4e565b8a5b8b855182101561036957908a818b7f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a61034f958d8d61032a8e6103208f8990610aa9565b5116968792610aa9565b5115159683886000146103545761034693878252528320610b99565b505b80a4610a84565b6102dc565b61036393878252528320610c0e565b50610348565b505093509350969050855191825233908201528281602481875afa908115610465579061039c9188916104385750610b03565b6103a98551825114610b4e565b855b855181101561043457806103c26104169288610aa9565b516103cd8285610aa9565b51158015919061041b57868a52600186526103ea81898c20610b99565b505b867fb8036058bafea884aabc446ca15619fd86f5464a4ad96f64164ad6f77444354d8b80a4610a84565b6103ab565b868a526001865261042e81898c20610c0e565b506103ec565b8680f35b6104589150843d861161045e575b61045081836108d0565b810190610aeb565b3861029d565b503d610446565b85513d89823e3d90fd5b6104589150893d8b1161045e5761045081836108d0565b8a513d8e823e3d90fd5b8780fd5b8680fd5b8580fd5b509034610100576060366003190112610100576104b7610889565b67ffffffffffffffff92602435848111610498576104d890369083016109e5565b93604435908111610498576104f0903690830161097e565b6001600160a01b0380931692845192630935e01b60e21b845233908401526020928381602481885afa9081156105e457906105319189916105cd5750610b03565b61053e8651835114610b4e565b865b86518110156105c95780826105586105ac938a610aa9565b51166105648286610aa9565b5115801591906105b157878b528a8752610580818a8d20610b99565b505b877f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a8c80a4610a84565b610540565b878b528a87526105c3818a8d20610c0e565b50610582565b8780f35b6104589150853d871161045e5761045081836108d0565b86513d8a823e3d90fd5b50903461010057606036600319011261010057610609610889565b67ffffffffffffffff926024358481116104985761062a9036908301610920565b936044359081116104985761064a6001600160a01b03913690840161097e565b921691835191630935e01b60e21b835233908301526020918281602481875afa90811561046557906106829188916104385750610b03565b61068f8551825114610b4e565b855b855181101561043457806103c26106a89288610aa9565b610691565b5050346100fc5760803660031901126100fc576020906100f06106ce610889565b6106d66108a4565b906106df6108ba565b50610cfe565b5050346100fc5760208060031936011261010057916001600160a01b0361070a610889565b1681526001908184528281209384549061072382610908565b91610730865193846108d0565b80835261073c81610908565b8383019790601f1901368937845b828110610787575050508451948186019282875251809352850195925b8281106107745785870386f35b8351875295810195928101928401610767565b8061079c6107ad92849b999b98969798610ad3565b90549060031b1c6101cc8289610aa9565b9795979493929461074a565b9250503461010057602036600319011261010057357fffffffff00000000000000000000000000000000000000000000000000000000811680910361010057602092507f45ffcdad00000000000000000000000000000000000000000000000000000000811490811561085f575b8115610835575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861082e565b7fff16f3500000000000000000000000000000000000000000000000000000000081149150610827565b600435906001600160a01b038216820361089f57565b600080fd5b602435906001600160a01b038216820361089f57565b604435906001600160a01b038216820361089f57565b90601f8019910116810190811067ffffffffffffffff8211176108f257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116108f25760051b60200190565b81601f8201121561089f5780359161093783610908565b9261094560405194856108d0565b808452602092838086019260051b82010192831161089f578301905b82821061096f575050505090565b81358152908301908301610961565b81601f8201121561089f5780359161099583610908565b926109a360405194856108d0565b808452602092838086019260051b82010192831161089f578301905b8282106109cd575050505090565b8135801515810361089f5781529083019083016109bf565b81601f8201121561089f578035916109fc83610908565b92610a0a60405194856108d0565b808452602092838086019260051b82010192831161089f578301905b828210610a34575050505090565b81356001600160a01b038116810361089f578152908301908301610a26565b9181601f8401121561089f5782359167ffffffffffffffff831161089f576020808501948460051b01011161089f57565b6000198114610a935760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610abd5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b8054821015610abd5760005260206000200190600090565b9081602091031261089f5751801515810361089f5790565b15610b0a57565b606460405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973206e6f7420616e2061646d696e000000000000000000006044820152fd5b15610b5557565b606460405162461bcd60e51b815260206004820152601560248201527f4d69736d6174636820696e707574206c656e67746800000000000000000000006044820152fd5b6000828152600182016020526040902054610c0757805490680100000000000000008210156108f25782610bf0610bd7846001809601855584610ad3565b819391549060031b600019811b9283911b169119161790565b905580549260005201602052604060002055600190565b5050600090565b90600182019060009281845282602052604084205490811515600014610cf75760001991808301818111610ce357825490848201918211610ccf57808203610c9a575b50505080548015610c8657820191610c698383610ad3565b909182549160031b1b191690555582526020526040812055600190565b602486634e487b7160e01b81526031600452fd5b610cba610caa610bd79386610ad3565b90549060031b1c92839286610ad3565b90558652846020526040862055388080610c51565b602488634e487b7160e01b81526011600452fd5b602487634e487b7160e01b81526011600452fd5b5050505090565b6001600160a01b038181169216829003610d1a575b5050600190565b336000526000602052610d4182604060002060019160005201602052604060002054151590565b610db057803b15610d13573f336000526001602052610d7481604060002060019160005201602052604060002054151590565b15610d135760449250604051917f5f3853a900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b602482604051907fede71dcc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212209670fb08f11534cf6c451eb1fbfa2c4bc8c4378c65967845422b6782a304e29f64736f6c63430008110033
Deployed Bytecode
0x6080604081815260048036101561001557600080fd5b600092833560e01c90816301ffc9a7146107b957508063225d0f94146106e55780635e6a6f8a146106ad5780637215c202146105ee5780639401d61c1461049c5780639fde10aa146101db578063b1b84ee2146101045763e48351771461007b57600080fd5b346101005760a036600319011261010057610094610889565b9061009d6108a4565b936100a66108ba565b5067ffffffffffffffff906064358281116100fc576100c89036908501610a53565b50506084359182116100f95750916100e9602095926100f094369101610a53565b5050610cfe565b90519015158152f35b80fd5b5080fd5b8280fd5b5050346100fc57602080600319360112610100576001600160a01b03928361012a610889565b1681528082528281209182549061014082610908565b9161014d865193846108d0565b80835261015981610908565b8383019590601f1901368737845b8281106101a7575050508451948186019282875251809352850193925b8281106101915785850386f35b8351871685529381019392810192600101610184565b80896101ba6101d2938599979899610ad3565b90549060031b1c166101cc8289610aa9565b52610a84565b94939294610167565b5090346101005760a0366003190112610100576101f6610889565b67ffffffffffffffff906024358281116104985761021790369086016109e5565b906044358381116104945761022f903690870161097e565b90606435848111610490576102479036908801610920565b936084359081116104905761025f903690880161097e565b926001600160a01b0380921694865194630935e01b60e21b808752338a88015260209687816024818c5afa90811561048657906102a3918d9161046f575b50610b03565b8851818152338b82015287816024818c5afa90811561048657906102cd918d9161046f5750610b03565b6102da8451875114610b4e565b8a5b8b855182101561036957908a818b7f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a61034f958d8d61032a8e6103208f8990610aa9565b5116968792610aa9565b5115159683886000146103545761034693878252528320610b99565b505b80a4610a84565b6102dc565b61036393878252528320610c0e565b50610348565b505093509350969050855191825233908201528281602481875afa908115610465579061039c9188916104385750610b03565b6103a98551825114610b4e565b855b855181101561043457806103c26104169288610aa9565b516103cd8285610aa9565b51158015919061041b57868a52600186526103ea81898c20610b99565b505b867fb8036058bafea884aabc446ca15619fd86f5464a4ad96f64164ad6f77444354d8b80a4610a84565b6103ab565b868a526001865261042e81898c20610c0e565b506103ec565b8680f35b6104589150843d861161045e575b61045081836108d0565b810190610aeb565b3861029d565b503d610446565b85513d89823e3d90fd5b6104589150893d8b1161045e5761045081836108d0565b8a513d8e823e3d90fd5b8780fd5b8680fd5b8580fd5b509034610100576060366003190112610100576104b7610889565b67ffffffffffffffff92602435848111610498576104d890369083016109e5565b93604435908111610498576104f0903690830161097e565b6001600160a01b0380931692845192630935e01b60e21b845233908401526020928381602481885afa9081156105e457906105319189916105cd5750610b03565b61053e8651835114610b4e565b865b86518110156105c95780826105586105ac938a610aa9565b51166105648286610aa9565b5115801591906105b157878b528a8752610580818a8d20610b99565b505b877f2738289d9deecdc30eb8ffc42876633caecca1ffa166e4efa89f408e17373a1a8c80a4610a84565b610540565b878b528a87526105c3818a8d20610c0e565b50610582565b8780f35b6104589150853d871161045e5761045081836108d0565b86513d8a823e3d90fd5b50903461010057606036600319011261010057610609610889565b67ffffffffffffffff926024358481116104985761062a9036908301610920565b936044359081116104985761064a6001600160a01b03913690840161097e565b921691835191630935e01b60e21b835233908301526020918281602481875afa90811561046557906106829188916104385750610b03565b61068f8551825114610b4e565b855b855181101561043457806103c26106a89288610aa9565b610691565b5050346100fc5760803660031901126100fc576020906100f06106ce610889565b6106d66108a4565b906106df6108ba565b50610cfe565b5050346100fc5760208060031936011261010057916001600160a01b0361070a610889565b1681526001908184528281209384549061072382610908565b91610730865193846108d0565b80835261073c81610908565b8383019790601f1901368937845b828110610787575050508451948186019282875251809352850195925b8281106107745785870386f35b8351875295810195928101928401610767565b8061079c6107ad92849b999b98969798610ad3565b90549060031b1c6101cc8289610aa9565b9795979493929461074a565b9250503461010057602036600319011261010057357fffffffff00000000000000000000000000000000000000000000000000000000811680910361010057602092507f45ffcdad00000000000000000000000000000000000000000000000000000000811490811561085f575b8115610835575b5015158152f35b7f01ffc9a7000000000000000000000000000000000000000000000000000000009150143861082e565b7fff16f3500000000000000000000000000000000000000000000000000000000081149150610827565b600435906001600160a01b038216820361089f57565b600080fd5b602435906001600160a01b038216820361089f57565b604435906001600160a01b038216820361089f57565b90601f8019910116810190811067ffffffffffffffff8211176108f257604052565b634e487b7160e01b600052604160045260246000fd5b67ffffffffffffffff81116108f25760051b60200190565b81601f8201121561089f5780359161093783610908565b9261094560405194856108d0565b808452602092838086019260051b82010192831161089f578301905b82821061096f575050505090565b81358152908301908301610961565b81601f8201121561089f5780359161099583610908565b926109a360405194856108d0565b808452602092838086019260051b82010192831161089f578301905b8282106109cd575050505090565b8135801515810361089f5781529083019083016109bf565b81601f8201121561089f578035916109fc83610908565b92610a0a60405194856108d0565b808452602092838086019260051b82010192831161089f578301905b828210610a34575050505090565b81356001600160a01b038116810361089f578152908301908301610a26565b9181601f8401121561089f5782359167ffffffffffffffff831161089f576020808501948460051b01011161089f57565b6000198114610a935760010190565b634e487b7160e01b600052601160045260246000fd5b8051821015610abd5760209160051b010190565b634e487b7160e01b600052603260045260246000fd5b8054821015610abd5760005260206000200190600090565b9081602091031261089f5751801515810361089f5790565b15610b0a57565b606460405162461bcd60e51b815260206004820152601660248201527f57616c6c6574206973206e6f7420616e2061646d696e000000000000000000006044820152fd5b15610b5557565b606460405162461bcd60e51b815260206004820152601560248201527f4d69736d6174636820696e707574206c656e67746800000000000000000000006044820152fd5b6000828152600182016020526040902054610c0757805490680100000000000000008210156108f25782610bf0610bd7846001809601855584610ad3565b819391549060031b600019811b9283911b169119161790565b905580549260005201602052604060002055600190565b5050600090565b90600182019060009281845282602052604084205490811515600014610cf75760001991808301818111610ce357825490848201918211610ccf57808203610c9a575b50505080548015610c8657820191610c698383610ad3565b909182549160031b1b191690555582526020526040812055600190565b602486634e487b7160e01b81526031600452fd5b610cba610caa610bd79386610ad3565b90549060031b1c92839286610ad3565b90558652846020526040862055388080610c51565b602488634e487b7160e01b81526011600452fd5b602487634e487b7160e01b81526011600452fd5b5050505090565b6001600160a01b038181169216829003610d1a575b5050600190565b336000526000602052610d4182604060002060019160005201602052604060002054151590565b610db057803b15610d13573f336000526001602052610d7481604060002060019160005201602052604060002054151590565b15610d135760449250604051917f5f3853a900000000000000000000000000000000000000000000000000000000835260048301526024820152fd5b602482604051907fede71dcc0000000000000000000000000000000000000000000000000000000082526004820152fdfea26469706673582212209670fb08f11534cf6c451eb1fbfa2c4bc8c4378c65967845422b6782a304e29f64736f6c63430008110033
Deployed Bytecode Sourcemap
540:5556:5:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;:::i;:::-;;;;:::i;:::-;-1:-1:-1;540:5556:5;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;5128:33;540:5556;;;;;:::i;:::-;5128:33;;;:::i;:::-;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:5556:5;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;540:5556:5;;;;1739:6;1747:16;;;;;;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1765:3;4904:18:4;;;1765:3:5;4904:18:4;;;;;;;:::i;:::-;540:5556:5;;;;;;;1784:21;;;;:::i;:::-;540:5556;1765:3;:::i;:::-;1739:6;;;;;;540:5556;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;;-1:-1:-1;;;;;540:5556:5;;;;;;;-1:-1:-1;;;1268:57:5;;;1314:10;1268:57;;;540:5556;;1268:57;;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;540:5556;1260:92;;:::i;:::-;540:5556;;1268:57;;;1314:10;1268:57;;;540:5556;1268:57;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;2602:68;540:5556;;;;2610:34;2602:68;:::i;:::-;2686:6;2716:3;540:5556;;;2694:20;;;;;2754:12;;;;3029:48;2716:3;2754:12;;;2800:10;2754:12;;;;;;:::i;:::-;540:5556;;2800:10;;;;:::i;:::-;540:5556;;;2824:187;;;;;;;8121:50:4;540:5556:5;;;;;;;8121:50:4;:::i;:::-;;2824:187:5;3029:48;;2716:3;:::i;:::-;2686:6;;2824:187;8442:53:4;540:5556:5;;;;;;;8442:53:4;:::i;:::-;;2824:187:5;;2694:20;;;;;;;;;;540:5556;;1268:57;;;1314:10;1268:57;;;540:5556;1268:57;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;3417:65;540:5556;;;;3425:31;3417:65;:::i;:::-;3506:6;3533:3;540:5556;;3514:17;;;;;3568:9;;3533:3;3568:9;;;:::i;:::-;540:5556;3611:10;;;;:::i;:::-;540:5556;;;;;3635:185;;;540:5556;;;3671:26;540:5556;;5911:23:4;540:5556:5;;;;5911:23:4;:::i;:::-;;3635:185:5;3838:45;;;;;3533:3;:::i;:::-;3506:6;;3635:185;540:5556;;;3756:26;540:5556;;6205:26:4;540:5556:5;;;;6205:26:4;:::i;:::-;;3635:185:5;;3514:17;;540:5556;;1268:57;;;;;;;;;;;;;;;:::i;:::-;;;;;:::i;:::-;;;;;;;;;;540:5556;;;;;;;;;1268:57;;;;;;;;;;;;;;:::i;:::-;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;;;;;540:5556:5;;;;;;1268:57;-1:-1:-1;;;1268:57:5;;1314:10;1268:57;;;540:5556;;1268:57;;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;2602:68;540:5556;;;;2610:34;2602:68;:::i;:::-;2686:6;2716:3;540:5556;;2694:20;;;;;2754:12;;;2716:3;2754:12;;;:::i;:::-;540:5556;;2800:10;;;;:::i;:::-;540:5556;;;;;2824:187;;;540:5556;;;;;;8121:50:4;540:5556:5;;;;8121:50:4;:::i;:::-;;2824:187:5;3029:48;;;;;2716:3;:::i;:::-;2686:6;;2824:187;540:5556;;;;;;8442:53:4;540:5556:5;;;;8442:53:4;:::i;:::-;;2824:187:5;;2694:20;;540:5556;;1268:57;;;;;;;;;;;;;;:::i;:::-;540:5556;;;;;;;;;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::i;:::-;;;;;;1268:57;-1:-1:-1;;;1268:57:5;;1314:10;1268:57;;;540:5556;;1268:57;;;540:5556;1268:57;;;;;;;;;;1260:92;1268:57;;;;;1260:92;;:::i;:::-;3417:65;540:5556;;;;3425:31;3417:65;:::i;:::-;3506:6;3533:3;540:5556;;3514:17;;;;;3568:9;;3533:3;3568:9;;;:::i;3533:3::-;3506:6;;540:5556;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;5380:33;540:5556;;:::i;:::-;;;:::i;:::-;;;;:::i;:::-;;5380:33;:::i;540:5556::-;;;;;;;;;;;;;;;;-1:-1:-1;;;;;540:5556:5;;:::i;:::-;;;;2089:26;540:5556;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;-1:-1:-1;;540:5556:5;;;;2200:6;2208:16;;;;;;540:5556;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2226:3;4904:18:4;;2226:3:5;4904:18:4;;;;;;;;;;:::i;:::-;540:5556:5;;;;;;2245:21;;;;:::i;2226:3::-;2200:6;;;;;;;;;540:5556;;;;;;;;;-1:-1:-1;;540:5556:5;;;;;;;;;;;;;;4634:71;;4649:56;4634:71;;:159;;;;;540:5556;4634:215;;;;540:5556;;;;;;;4634:215;4824:25;4809:40;;;4634:215;;;:159;4736:57;4721:72;;;-1:-1:-1;4634:159:5;;540:5556;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::o;:::-;;;;;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::o;:::-;;;;-1:-1:-1;;;;;540:5556:5;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;-1:-1:-1;;;;;540:5556:5;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;540:5556:5;;;;;;;:::o;:::-;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;-1:-1:-1;540:5556:5;;-1:-1:-1;540:5556:5;;;-1:-1:-1;540:5556:5;:::o;:::-;;;;;;;;;;;;;;;;;;:::o;:::-;;;;:::o;:::-;;;;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;-1:-1:-1;;;540:5556:5;;;;;;;;;;;;;;;;;;2113:404:4;-1:-1:-1;540:5556:5;;;4250:12:4;;;540:5556:5;;;;;;2197:21:4;;540:5556:5;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;540:5556:5;2392:12:4;540:5556:5;;;-1:-1:-1;540:5556:5;;;2446:11:4;:::o;2192:319::-;2488:12;;-1:-1:-1;2488:12:4;:::o;2685:1388::-;;2888:12;;;-1:-1:-1;;540:5556:5;;;;;;;;;;;2922:15:4;;;;2918:1149;2922:15;;;-1:-1:-1;;540:5556:5;;;;;;;;;;;;;;;;;;;;3404:26:4;;;3400:398;;2918:1149;540:5556:5;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;2888:12:4;4002:11;:::o;540:5556:5:-;;;-1:-1:-1;;;540:5556:5;;;;;;3400:398:4;540:5556:5;3470:22:4;3592:26;3470:22;;;:::i;:::-;540:5556:5;;;;;;3592:26:4;;;;;:::i;540:5556:5:-;;;;;;;;;;;;3400:398:4;;;;;540:5556:5;;;-1:-1:-1;;;540:5556:5;;;;;;;;;-1:-1:-1;;;540:5556:5;;;;;;2918:1149:4;4044:12;;;;;:::o;5516:578:5:-;-1:-1:-1;;;;;540:5556:5;;;;;5618:16;;;5614:452;;5516:578;6076:11;;6083:4;5516:578;:::o;5614:452::-;5679:10;5654:24;540:5556;5654:24;540:5556;;8686:55:4;540:5556:5;;5654:24;540:5556;4250:12:4;4154:127;-1:-1:-1;540:5556:5;4250:12:4;540:5556:5;;;-1:-1:-1;540:5556:5;;4250:24:4;;4154:127;;8686:55;5650:129:5;;5797:20;;5793:263;5614:452;5793:263;5860:17;5679:10;5654:24;540:5556;5899:26;540:5556;;6422:28:4;540:5556:5;;5654:24;540:5556;4250:12:4;4154:127;-1:-1:-1;540:5556:5;4250:12:4;540:5556:5;;;-1:-1:-1;540:5556:5;;4250:24:4;;4154:127;;6422:28;5895:147:5;5614:452;5895:147;540:5556;;;;;5987:36;;;;;;;540:5556;;;;;5987:36;5650:129;540:5556;;;;5736:28;;;;;;;540:5556;5736:28
Swarm Source
ipfs://9670fb08f11534cf6c451eb1fbfa2c4bc8c4378c65967845422b6782a304e29f
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.