ERC-721
Overview
Max Total Supply
3,000 Diamond
Holders
1,150
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 DiamondLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Diamond
Compiler Version
v0.8.6+commit.11564f7e
Optimization Enabled:
No with 200 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 * * Implementation of a diamond. /******************************************************************************/ import { LibDiamond } from "./libraries/LibDiamond.sol"; import { IDiamondCut } from "./interfaces/IDiamondCut.sol"; import { ICustomToken } from "./interfaces/ICustomToken.sol"; import { AppStorage } from "./libraries/LibAppStorage.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol"; import "@openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol"; import "@openzeppelin/contracts/interfaces/IERC165.sol"; import "@solidstate/contracts/access/IERC173.sol"; contract Diamond { AppStorage internal s; constructor(address _contractOwner, address _diamondCutFacet, address _diamondLoupeFacet) payable { LibDiamond.setContractOwner(_contractOwner); LibDiamond.DiamondStorage storage ds = LibDiamond.diamondStorage(); ds.supportedInterfaces[type(IERC721).interfaceId] = true; ds.supportedInterfaces[type(IERC173).interfaceId] = true; ds.supportedInterfaces[type(IERC721Enumerable).interfaceId] = true; ds.supportedInterfaces[type(IERC721Metadata).interfaceId] = true; ds.supportedInterfaces[type(ICustomToken).interfaceId] = true; // Add the diamondCut external function from the diamondCutFacet IDiamondCut.FacetCut[] memory cut = new IDiamondCut.FacetCut[](2); bytes4[] memory functionSelectors = new bytes4[](1); functionSelectors[0] = IDiamondCut.diamondCut.selector; cut[0] = IDiamondCut.FacetCut({ facetAddress: _diamondCutFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: functionSelectors }); // Add the IERC165.supportsInterface function bytes4[] memory erc165functionSelectors = new bytes4[](1); erc165functionSelectors[0] = IERC165.supportsInterface.selector; cut[1] = IDiamondCut.FacetCut({ facetAddress: _diamondLoupeFacet, action: IDiamondCut.FacetCutAction.Add, functionSelectors: erc165functionSelectors }); LibDiamond.diamondCut(cut, address(0), ""); } // Find facet for function that is called and execute the // function if a facet is found and return any value. fallback() external payable { LibDiamond.DiamondStorage storage ds; bytes32 position = LibDiamond.DIAMOND_STORAGE_POSITION; // get diamond storage assembly { ds.slot := position } // get facet from function selector address facet = ds.selectorToFacetAndPosition[msg.sig].facetAddress; require(facet != address(0), "Diamond: Function does not exist"); // Execute external function from facet using delegatecall and return any value. assembly { // copy function selector and any arguments calldatacopy(0, 0, calldatasize()) // execute function call using the facet let result := delegatecall(gas(), facet, 0, calldatasize(), 0, 0) // get any return value returndatacopy(0, 0, returndatasize()) // return any return value or error back to the caller switch result case 0 { revert(0, returndatasize()) } default { return(0, returndatasize()) } } } receive() external payable {} }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ import { IDiamondCut } from "../interfaces/IDiamondCut.sol"; library LibDiamond { bytes32 constant DIAMOND_STORAGE_POSITION = keccak256("diamond.standard.diamond.storage"); struct FacetAddressAndPosition { address facetAddress; uint96 functionSelectorPosition; // position in facetFunctionSelectors.functionSelectors array } struct FacetFunctionSelectors { bytes4[] functionSelectors; uint256 facetAddressPosition; // position of facetAddress in facetAddresses array } struct DiamondStorage { // maps function selector to the facet address and // the position of the selector in the facetFunctionSelectors.selectors array mapping(bytes4 => FacetAddressAndPosition) selectorToFacetAndPosition; // maps facet addresses to function selectors mapping(address => FacetFunctionSelectors) facetFunctionSelectors; // facet addresses address[] facetAddresses; // Used to query if a contract implements an interface. // Used to implement ERC-165. mapping(bytes4 => bool) supportedInterfaces; // owner of the contract address contractOwner; } function diamondStorage() internal pure returns (DiamondStorage storage ds) { bytes32 position = DIAMOND_STORAGE_POSITION; assembly { ds.slot := position } } event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); function setContractOwner(address _newOwner) internal { DiamondStorage storage ds = diamondStorage(); address previousOwner = ds.contractOwner; ds.contractOwner = _newOwner; emit OwnershipTransferred(previousOwner, _newOwner); } function contractOwner() internal view returns (address contractOwner_) { contractOwner_ = diamondStorage().contractOwner; } function enforceIsContractOwner() internal view { require(msg.sender == diamondStorage().contractOwner, "LibDiamond: Must be contract owner"); } event DiamondCut(IDiamondCut.FacetCut[] _diamondCut, address _init, bytes _calldata); // Internal function version of diamondCut function diamondCut( IDiamondCut.FacetCut[] memory _diamondCut, address _init, bytes memory _calldata ) internal { for (uint256 facetIndex; facetIndex < _diamondCut.length; facetIndex++) { IDiamondCut.FacetCutAction action = _diamondCut[facetIndex].action; if (action == IDiamondCut.FacetCutAction.Add) { addFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Replace) { replaceFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else if (action == IDiamondCut.FacetCutAction.Remove) { removeFunctions(_diamondCut[facetIndex].facetAddress, _diamondCut[facetIndex].functionSelectors); } else { revert("LibDiamondCut: Incorrect FacetCutAction"); } } emit DiamondCut(_diamondCut, _init, _calldata); initializeDiamondCut(_init, _calldata); } function addFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress == address(0), "LibDiamondCut: Can't add function that already exists"); addFunction(ds, selector, selectorPosition, _facetAddress); selectorPosition++; } } function replaceFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); require(_facetAddress != address(0), "LibDiamondCut: Add facet can't be address(0)"); uint96 selectorPosition = uint96(ds.facetFunctionSelectors[_facetAddress].functionSelectors.length); // add new facet address if it does not exist if (selectorPosition == 0) { addFacet(ds, _facetAddress); } for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; require(oldFacetAddress != _facetAddress, "LibDiamondCut: Can't replace function with same function"); removeFunction(ds, oldFacetAddress, selector); addFunction(ds, selector, selectorPosition, _facetAddress); selectorPosition++; } } function removeFunctions(address _facetAddress, bytes4[] memory _functionSelectors) internal { require(_functionSelectors.length > 0, "LibDiamondCut: No selectors in facet to cut"); DiamondStorage storage ds = diamondStorage(); // if function does not exist then do nothing and return require(_facetAddress == address(0), "LibDiamondCut: Remove facet address must be address(0)"); for (uint256 selectorIndex; selectorIndex < _functionSelectors.length; selectorIndex++) { bytes4 selector = _functionSelectors[selectorIndex]; address oldFacetAddress = ds.selectorToFacetAndPosition[selector].facetAddress; removeFunction(ds, oldFacetAddress, selector); } } function addFacet(DiamondStorage storage ds, address _facetAddress) internal { enforceHasContractCode(_facetAddress, "LibDiamondCut: New facet has no code"); ds.facetFunctionSelectors[_facetAddress].facetAddressPosition = ds.facetAddresses.length; ds.facetAddresses.push(_facetAddress); } function addFunction(DiamondStorage storage ds, bytes4 _selector, uint96 _selectorPosition, address _facetAddress) internal { ds.selectorToFacetAndPosition[_selector].functionSelectorPosition = _selectorPosition; ds.facetFunctionSelectors[_facetAddress].functionSelectors.push(_selector); ds.selectorToFacetAndPosition[_selector].facetAddress = _facetAddress; } function removeFunction(DiamondStorage storage ds, address _facetAddress, bytes4 _selector) internal { require(_facetAddress != address(0), "LibDiamondCut: Can't remove function that doesn't exist"); // an immutable function is a function defined directly in a diamond require(_facetAddress != address(this), "LibDiamondCut: Can't remove immutable function"); // replace selector with last selector, then delete last selector uint256 selectorPosition = ds.selectorToFacetAndPosition[_selector].functionSelectorPosition; uint256 lastSelectorPosition = ds.facetFunctionSelectors[_facetAddress].functionSelectors.length - 1; // if not the same then replace _selector with lastSelector if (selectorPosition != lastSelectorPosition) { bytes4 lastSelector = ds.facetFunctionSelectors[_facetAddress].functionSelectors[lastSelectorPosition]; ds.facetFunctionSelectors[_facetAddress].functionSelectors[selectorPosition] = lastSelector; ds.selectorToFacetAndPosition[lastSelector].functionSelectorPosition = uint96(selectorPosition); } // delete the last selector ds.facetFunctionSelectors[_facetAddress].functionSelectors.pop(); delete ds.selectorToFacetAndPosition[_selector]; // if no more selectors for facet address then delete the facet address if (lastSelectorPosition == 0) { // replace facet address with last facet address and delete last facet address uint256 lastFacetAddressPosition = ds.facetAddresses.length - 1; uint256 facetAddressPosition = ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; if (facetAddressPosition != lastFacetAddressPosition) { address lastFacetAddress = ds.facetAddresses[lastFacetAddressPosition]; ds.facetAddresses[facetAddressPosition] = lastFacetAddress; ds.facetFunctionSelectors[lastFacetAddress].facetAddressPosition = facetAddressPosition; } ds.facetAddresses.pop(); delete ds.facetFunctionSelectors[_facetAddress].facetAddressPosition; } } function initializeDiamondCut(address _init, bytes memory _calldata) internal { if (_init == address(0)) { require(_calldata.length == 0, "LibDiamondCut: _init is address(0) but_calldata is not empty"); } else { require(_calldata.length > 0, "LibDiamondCut: _calldata is empty but _init is not address(0)"); if (_init != address(this)) { enforceHasContractCode(_init, "LibDiamondCut: _init address has no code"); } (bool success, bytes memory error) = _init.delegatecall(_calldata); if (!success) { if (error.length > 0) { // bubble up the error revert(string(error)); } else { revert("LibDiamondCut: _init function reverted"); } } } } function enforceHasContractCode(address _contract, string memory _errorMessage) internal view { uint256 contractSize; assembly { contractSize := extcodesize(_contract) } require(contractSize > 0, _errorMessage); } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /******************************************************************************\ * Author: Nick Mudge <[email protected]> (https://twitter.com/mudgen) * EIP-2535 Diamonds: https://eips.ethereum.org/EIPS/eip-2535 /******************************************************************************/ interface IDiamondCut { enum FacetCutAction {Add, Replace, Remove} // Add=0, Replace=1, Remove=2 struct FacetCut { address facetAddress; FacetCutAction action; bytes4[] functionSelectors; } /// @notice Add/replace/remove any number of functions and optionally execute /// a function with delegatecall /// @param _diamondCut Contains the facet addresses and function selectors /// @param _init The address of the contract or facet to execute _calldata /// @param _calldata A function call, including function selector and arguments /// _calldata is executed with delegatecall on _init function diamondCut( FacetCut[] calldata _diamondCut, address _init, bytes calldata _calldata ) external; event DiamondCut(FacetCut[] _diamondCut, address _init, bytes _calldata); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import { Trait } from "../libraries/LibAppStorage.sol"; interface ICustomToken { function addTraitType(uint256 _traitTypeIndex, Trait[] memory traits) external; function walletOfOwner(address _wallet) external view returns (uint256[] memory); function hashToMetadata(string memory _hash, uint256 _tokenId) external view returns (string memory); function hashToSVG(string memory _hash) external view returns (string memory); function contractURI() external view returns (string memory); function clearTraits() external; function mint() external; }
pragma solidity ^0.8.0; struct Trait { string traitName; string traitType; string[] pixels; uint256[] pixelCount; } struct AppStorage { mapping(uint256 => Trait[]) traitTypes; mapping(string => bool) hashToMinted; mapping(uint256 => string) tokenIdToHash; mapping(uint256 => string) tokenIdToName; mapping(uint256 => string) tokenIdToBio; mapping(uint256 => uint256) tokenIdToLevel; mapping (string => bool) nameReserved; uint256 LAST_MINT_TIME; uint256 MAX_SUPPLY; uint256 SEED_NONCE; uint16[][20] TIERS; string name; string[] LETTERS; address _owner; } library LibAppStorage { function diamondStorage() internal pure returns (AppStorage storage ds) { assembly { ds.slot := 0 } } function abs(int256 x) internal pure returns (uint256) { return uint256(x >= 0 ? x : -x); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (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`, 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 be 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: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * 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 Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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 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); /** * @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; }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (interfaces/IERC165.sol) pragma solidity ^0.8.0; import "../utils/introspection/IERC165.sol";
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @title Contract ownership standard interface * @dev see https://eips.ethereum.org/EIPS/eip-173 */ interface IERC173 { event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @notice get the ERC173 contract owner * @return conract owner */ function owner() external view returns (address); /** * @notice transfer contract ownership to new account * @param account address of new owner */ function transferOwnership(address account) external; }
// 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); }
{ "optimizer": { "enabled": false, "runs": 200 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"address","name":"_contractOwner","type":"address"},{"internalType":"address","name":"_diamondCutFacet","type":"address"},{"internalType":"address","name":"_diamondLoupeFacet","type":"address"}],"stateMutability":"payable","type":"constructor"},{"stateMutability":"payable","type":"fallback"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
608060405260405162004dc038038062004dc0833981810160405281019062000029919062001c87565b6200003f83620005f560201b620001681760201c565b600062000056620006d460201b6200023f1760201c565b905060018160030160007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f7f5828d0000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff02191690831515021790555060018160030160007f022df852000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060006101000a81548160ff0219169083151502179055506000600267ffffffffffffffff81111562000334576200033362002611565b5b6040519080825280602002602001820160405280156200037157816020015b6200035d62001c24565b815260200190600190039081620003535790505b5090506000600167ffffffffffffffff81111562000394576200039362002611565b5b604051908082528060200260200182016040528015620003c35781602001602082028036833780820191505090505b509050631f931c1c60e01b81600081518110620003e557620003e4620025e2565b5b60200260200101907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff168152602001600060028111156200046f576200046e62002584565b5b815260200182815250826000815181106200048f576200048e620025e2565b5b60200260200101819052506000600167ffffffffffffffff811115620004ba57620004b962002611565b5b604051908082528060200260200182016040528015620004e95781602001602082028036833780820191505090505b5090506301ffc9a760e01b816000815181106200050b576200050a620025e2565b5b60200260200101907bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191690817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152505060405180606001604052808673ffffffffffffffffffffffffffffffffffffffff1681526020016000600281111562000595576200059462002584565b5b81526020018281525083600181518110620005b557620005b4620025e2565b5b6020026020010181905250620005e8836000604051806020016040528060008152506200070160201b6200026c1760201c565b50505050505050620029ec565b600062000607620006d460201b60201c565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60005b835181101562000933576000848281518110620007265762000725620025e2565b5b6020026020010151602001519050600060028111156200074b576200074a62002584565b5b81600281111562000761576200076062002584565b5b1415620007c257620007bc858381518110620007825762000781620025e2565b5b602002602001015160000151868481518110620007a457620007a3620025e2565b5b6020026020010151604001516200098860201b60201c565b6200091c565b60016002811115620007d957620007d862002584565b5b816002811115620007ef57620007ee62002584565b5b141562000850576200084a85838151811062000810576200080f620025e2565b5b602002602001015160000151868481518110620008325762000831620025e2565b5b60200260200101516040015162000c2c60201b60201c565b6200091b565b60028081111562000866576200086562002584565b5b8160028111156200087c576200087b62002584565b5b1415620008dd57620008d78583815181106200089d576200089c620025e2565b5b602002602001015160000151868481518110620008bf57620008be620025e2565b5b60200260200101516040015162000ee360201b60201c565b6200091a565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000911906200220e565b60405180910390fd5b5b5b5080806200092a90620024cd565b91505062000704565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb673838383604051620009699392919062002117565b60405180910390a16200098382826200108b60201b60201c565b505050565b6000815111620009cf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620009c690620021ca565b60405180910390fd5b6000620009e1620006d460201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000a56576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000a4d9062002230565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff16141562000acd5762000acc8285620012ba60201b60201c565b5b60005b835181101562000c2557600084828151811062000af25762000af1620025e2565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161462000be9576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000be09062002296565b60405180910390fd5b62000bfd8583868a6200139e60201b60201c565b838062000c0a906200251b565b9450505050808062000c1c90620024cd565b91505062000ad0565b5050505050565b600081511162000c73576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000c6a90620021ca565b60405180910390fd5b600062000c85620006d460201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141562000cfa576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000cf19062002230565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff16141562000d715762000d708285620012ba60201b60201c565b5b60005b835181101562000edc57600084828151811062000d965762000d95620025e2565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141562000e8d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000e8490620022b8565b60405180910390fd5b62000ea08582846200154b60201b60201c565b62000eb48583868a6200139e60201b60201c565b838062000ec1906200251b565b9450505050808062000ed390620024cd565b91505062000d74565b5050505050565b600081511162000f2a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000f2190620021ca565b60405180910390fd5b600062000f3c620006d460201b60201c565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161462000fb0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000fa790620022da565b60405180910390fd5b60005b82518110156200108557600083828151811062000fd55762000fd4620025e2565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690506200106d8482846200154b60201b60201c565b505080806200107c90620024cd565b91505062000fb3565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200110e57600081511462001108576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620010ff9062002186565b60405180910390fd5b620012b6565b600081511162001155576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200114c9062002252565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620011b557620011b48260405180606001604052806028815260200162004d746028913962001bcf60201b60201c565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051620011df9190620020fe565b600060405180830381855af49150503d80600081146200121c576040519150601f19603f3d011682016040523d82523d6000602084013e62001221565b606091505b509150915081620012b3576000815111156200127657806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200126d919062002162565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620012aa90620021a8565b60405180910390fd5b50505b5050565b620012e58160405180606001604052806024815260200162004d9c6024913962001bcf60201b60201c565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415620015be576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620015b590620021ec565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562001630576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620016279062002274565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180549050620017099190620023b1565b9050808214620018a45760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106200176e576200176d620025e2565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018481548110620017ed57620017ec620025e2565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805480620018fb57620018fa620025b3565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050600081141562001bc857600060018660020180549050620019e99190620023b1565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811462001b3157600087600201838154811062001a575762001a56620025e2565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508088600201838154811062001a9e5762001a9d620025e2565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b8660020180548062001b485762001b47620025b3565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b905060008111829062001c1e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162001c15919062002162565b60405180910390fd5b50505050565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff1681526020016000600281111562001c635762001c6262002584565b5b8152602001606081525090565b60008151905062001c8181620029d2565b92915050565b60008060006060848603121562001ca35762001ca262002640565b5b600062001cb38682870162001c70565b935050602062001cc68682870162001c70565b925050604062001cd98682870162001c70565b9150509250925092565b600062001cf1838362001e20565b60208301905092915050565b600062001d0b8383620020a8565b905092915050565b62001d1e81620023ec565b82525050565b62001d2f81620023ec565b82525050565b600062001d42826200231c565b62001d4e818562002362565b935062001d5b83620022fc565b8060005b8381101562001d9257815162001d76888262001ce3565b975062001d838362002348565b92505060018101905062001d5f565b5085935050505092915050565b600062001dac8262002327565b62001db8818562002373565b93508360208202850162001dcc856200230c565b8060005b8581101562001e0e578484038952815162001dec858262001cfd565b945062001df98362002355565b925060208a0199505060018101905062001dd0565b50829750879550505050505092915050565b62001e2b8162002400565b82525050565b600062001e3e8262002332565b62001e4a818562002384565b935062001e5c81856020860162002497565b62001e678162002645565b840191505092915050565b600062001e7f8262002332565b62001e8b818562002395565b935062001e9d81856020860162002497565b80840191505092915050565b62001eb48162002483565b82525050565b600062001ec7826200233d565b62001ed38185620023a0565b935062001ee581856020860162002497565b62001ef08162002645565b840191505092915050565b600062001f0a603c83620023a0565b915062001f178262002656565b604082019050919050565b600062001f31602683620023a0565b915062001f3e82620026a5565b604082019050919050565b600062001f58602b83620023a0565b915062001f6582620026f4565b604082019050919050565b600062001f7f603783620023a0565b915062001f8c8262002743565b604082019050919050565b600062001fa6602783620023a0565b915062001fb38262002792565b604082019050919050565b600062001fcd602c83620023a0565b915062001fda82620027e1565b604082019050919050565b600062001ff4603d83620023a0565b9150620020018262002830565b604082019050919050565b60006200201b602e83620023a0565b915062002028826200287f565b604082019050919050565b600062002042603583620023a0565b91506200204f82620028ce565b604082019050919050565b600062002069603883620023a0565b915062002076826200291d565b604082019050919050565b600062002090603683620023a0565b91506200209d826200296c565b604082019050919050565b6000606083016000830151620020c2600086018262001d13565b506020830151620020d7602086018262001ea9565b5060408301518482036040860152620020f1828262001d35565b9150508091505092915050565b60006200210c828462001e72565b915081905092915050565b6000606082019050818103600083015262002133818662001d9f565b905062002144602083018562001d24565b818103604083015262002158818462001e31565b9050949350505050565b600060208201905081810360008301526200217e818462001eba565b905092915050565b60006020820190508181036000830152620021a18162001efb565b9050919050565b60006020820190508181036000830152620021c38162001f22565b9050919050565b60006020820190508181036000830152620021e58162001f49565b9050919050565b60006020820190508181036000830152620022078162001f70565b9050919050565b60006020820190508181036000830152620022298162001f97565b9050919050565b600060208201905081810360008301526200224b8162001fbe565b9050919050565b600060208201905081810360008301526200226d8162001fe5565b9050919050565b600060208201905081810360008301526200228f816200200c565b9050919050565b60006020820190508181036000830152620022b18162002033565b9050919050565b60006020820190508181036000830152620022d3816200205a565b9050919050565b60006020820190508181036000830152620022f58162002081565b9050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000620023be8262002461565b9150620023cb8362002461565b925082821015620023e157620023e062002555565b5b828203905092915050565b6000620023f98262002441565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b60008190506200243c82620029bb565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b600062002490826200242c565b9050919050565b60005b83811015620024b75780820151818401526020810190506200249a565b83811115620024c7576000848401525b50505050565b6000620024da8262002461565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141562002510576200250f62002555565b5b600182019050919050565b600062002528826200246b565b91506bffffffffffffffffffffffff8214156200254a576200254962002555565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b60038110620029cf57620029ce62002584565b5b50565b620029dd81620023ec565b8114620029e957600080fd5b50565b61237880620029fc6000396000f3fe60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013990611b88565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610163573d6000f35b3d6000fd5b600061017261023f565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60005b835181101561045357600084828151811061028d5761028c611f14565b5b6020026020010151602001519050600060028111156102af576102ae611eb6565b5b8160028111156102c2576102c1611eb6565b5b14156103135761030e8583815181106102de576102dd611f14565b5b6020026020010151600001518684815181106102fd576102fc611f14565b5b60200260200101516040015161049e565b61043f565b6001600281111561032757610326611eb6565b5b81600281111561033a57610339611eb6565b5b141561038b5761038685838151811061035657610355611f14565b5b60200260200101516000015186848151811061037557610374611f14565b5b602002602001015160400151610717565b61043e565b60028081111561039e5761039d611eb6565b5b8160028111156103b1576103b0611eb6565b5b1415610402576103fd8583815181106103cd576103cc611f14565b5b6020026020010151600001518684815181106103ec576103eb611f14565b5b60200260200101516040015161099b565b61043d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043490611b48565b60405180910390fd5b5b5b50808061044b90611e09565b91505061026f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161048793929190611a61565b60405180910390a16104998282610b26565b505050565b60008151116104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d990611b08565b60405180910390fd5b60006104ec61023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156105cc576105cb8285610d39565b5b60005b83518110156107105760008482815181106105ed576105ec611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611be8565b60405180910390fd5b6106ed8583868a610e14565b83806106f890611e52565b9450505050808061070890611e09565b9150506105cf565b5050505050565b600081511161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611b08565b60405180910390fd5b600061076561023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610845576108448285610d39565b5b60005b835181101561099457600084828151811061086657610865611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611c08565b60405180910390fd5b610965858284610fc1565b6109718583868a610e14565b838061097c90611e52565b9450505050808061098c90611e09565b915050610848565b5050505050565b60008151116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611b08565b60405180910390fd5b60006109e961023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190611c28565b60405180910390fd5b60005b8251811015610b20576000838281518110610a7b57610a7a611f14565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b0b848284610fc1565b50508080610b1890611e09565b915050610a5d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ba4576000815114610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611ac8565b60405180910390fd5b610d35565b6000815111610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90611ba8565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c3e57610c3d826040518060600160405280602881526020016122f760289139611626565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c669190611a4a565b600060405180830381855af49150503d8060008114610ca1576040519150601f19603f3d011682016040523d82523d6000602084013e610ca6565b606091505b509150915081610d3257600081511115610cf757806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9190611aa6565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990611ae8565b60405180910390fd5b50505b5050565b610d5b8160405180606001604052806024815260200161231f60249139611626565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890611b28565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790611bc8565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490506111779190611cfd565b905080821461130b5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106111d8576111d7611f14565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061125457611253611f14565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180548061135f5761135e611ee5565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050600081141561161f5760006001866002018054905061144a9190611cfd565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461158b5760008760020183815481106114b4576114b3611f14565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808860020183815481106114f8576114f7611f14565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b8660020180548061159f5761159e611ee5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699190611aa6565b60405180910390fd5b50505050565b60006116848383611795565b60208301905092915050565b600061169c83836119fa565b905092915050565b6116ad81611d31565b82525050565b6116bc81611d31565b82525050565b60006116cd82611c68565b6116d78185611cae565b93506116e283611c48565b8060005b838110156117135781516116fa8882611678565b975061170583611c94565b9250506001810190506116e6565b5085935050505092915050565b600061172b82611c73565b6117358185611cbf565b93508360208202850161174785611c58565b8060005b8581101561178357848403895281516117648582611690565b945061176f83611ca1565b925060208a0199505060018101905061174b565b50829750879550505050505092915050565b61179e81611d43565b82525050565b60006117af82611c7e565b6117b98185611cd0565b93506117c9818560208601611dd6565b6117d281611f43565b840191505092915050565b60006117e882611c7e565b6117f28185611ce1565b9350611802818560208601611dd6565b80840191505092915050565b61181781611dc4565b82525050565b600061182882611c89565b6118328185611cec565b9350611842818560208601611dd6565b61184b81611f43565b840191505092915050565b6000611863603c83611cec565b915061186e82611f54565b604082019050919050565b6000611886602683611cec565b915061189182611fa3565b604082019050919050565b60006118a9602b83611cec565b91506118b482611ff2565b604082019050919050565b60006118cc603783611cec565b91506118d782612041565b604082019050919050565b60006118ef602783611cec565b91506118fa82612090565b604082019050919050565b6000611912602c83611cec565b915061191d826120df565b604082019050919050565b6000611935602083611cec565b91506119408261212e565b602082019050919050565b6000611958603d83611cec565b915061196382612157565b604082019050919050565b600061197b602e83611cec565b9150611986826121a6565b604082019050919050565b600061199e603583611cec565b91506119a9826121f5565b604082019050919050565b60006119c1603883611cec565b91506119cc82612244565b604082019050919050565b60006119e4603683611cec565b91506119ef82612293565b604082019050919050565b6000606083016000830151611a1260008601826116a4565b506020830151611a25602086018261180e565b5060408301518482036040860152611a3d82826116c2565b9150508091505092915050565b6000611a5682846117dd565b915081905092915050565b60006060820190508181036000830152611a7b8186611720565b9050611a8a60208301856116b3565b8181036040830152611a9c81846117a4565b9050949350505050565b60006020820190508181036000830152611ac0818461181d565b905092915050565b60006020820190508181036000830152611ae181611856565b9050919050565b60006020820190508181036000830152611b0181611879565b9050919050565b60006020820190508181036000830152611b218161189c565b9050919050565b60006020820190508181036000830152611b41816118bf565b9050919050565b60006020820190508181036000830152611b61816118e2565b9050919050565b60006020820190508181036000830152611b8181611905565b9050919050565b60006020820190508181036000830152611ba181611928565b9050919050565b60006020820190508181036000830152611bc18161194b565b9050919050565b60006020820190508181036000830152611be18161196e565b9050919050565b60006020820190508181036000830152611c0181611991565b9050919050565b60006020820190508181036000830152611c21816119b4565b9050919050565b60006020820190508181036000830152611c41816119d7565b9050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611d0882611da2565b9150611d1383611da2565b925082821015611d2657611d25611e87565b5b828203905092915050565b6000611d3c82611d82565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050611d7d826122e2565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b6000611dcf82611d6f565b9050919050565b60005b83811015611df4578082015181840152602081019050611dd9565b83811115611e03576000848401525b50505050565b6000611e1482611da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e4757611e46611e87565b5b600182019050919050565b6000611e5d82611dac565b91506bffffffffffffffffffffffff821415611e7c57611e7b611e87565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374600082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b600381106122f3576122f2611eb6565b5b5056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220ea9a76729266365343bb9b118ec2ca4ca49c28c23a767dc82fde3d9b31ed47a164736f6c634300080600334c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465000000000000000000000000aefacf945a5986f864585a4851293d9f4a14da9b0000000000000000000000002ea87b3ad4a9f9c015a28c7927ba8499534720dc0000000000000000000000009c0f0bd38a1fb5de569f3f937e11f1e39c16e999
Deployed Bytecode
0x60806040523661000b57005b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c9050809150600082600001600080357fffffffff00000000000000000000000000000000000000000000000000000000167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610142576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161013990611b88565b60405180910390fd5b3660008037600080366000845af43d6000803e8060008114610163573d6000f35b3d6000fd5b600061017261023f565b905060008160040160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050828260040160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508273ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a3505050565b6000807fc8fcad8db84d3cc18b4c41d551ea0ee66dd599cde068d998e57d5e09332c131c90508091505090565b60005b835181101561045357600084828151811061028d5761028c611f14565b5b6020026020010151602001519050600060028111156102af576102ae611eb6565b5b8160028111156102c2576102c1611eb6565b5b14156103135761030e8583815181106102de576102dd611f14565b5b6020026020010151600001518684815181106102fd576102fc611f14565b5b60200260200101516040015161049e565b61043f565b6001600281111561032757610326611eb6565b5b81600281111561033a57610339611eb6565b5b141561038b5761038685838151811061035657610355611f14565b5b60200260200101516000015186848151811061037557610374611f14565b5b602002602001015160400151610717565b61043e565b60028081111561039e5761039d611eb6565b5b8160028111156103b1576103b0611eb6565b5b1415610402576103fd8583815181106103cd576103cc611f14565b5b6020026020010151600001518684815181106103ec576103eb611f14565b5b60200260200101516040015161099b565b61043d565b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161043490611b48565b60405180910390fd5b5b5b50808061044b90611e09565b91505061026f565b507f8faa70878671ccd212d20771b795c50af8fd3ff6cf27f4bde57e5d4de0aeb67383838360405161048793929190611a61565b60405180910390a16104998282610b26565b505050565b60008151116104e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016104d990611b08565b60405180910390fd5b60006104ec61023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561055e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161055590611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff1614156105cc576105cb8285610d39565b5b60005b83518110156107105760008482815181106105ed576105ec611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16146106e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106d890611be8565b60405180910390fd5b6106ed8583868a610e14565b83806106f890611e52565b9450505050808061070890611e09565b9150506105cf565b5050505050565b600081511161075b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075290611b08565b60405180910390fd5b600061076561023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156107d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107ce90611b68565b60405180910390fd5b60008160010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018054905090506000816bffffffffffffffffffffffff161415610845576108448285610d39565b5b60005b835181101561099457600084828151811061086657610865611f14565b5b602002602001015190506000846000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1690508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561095a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161095190611c08565b60405180910390fd5b610965858284610fc1565b6109718583868a610e14565b838061097c90611e52565b9450505050808061098c90611e09565b915050610848565b5050505050565b60008151116109df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d690611b08565b60405180910390fd5b60006109e961023f565b9050600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614610a5a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a5190611c28565b60405180910390fd5b60005b8251811015610b20576000838281518110610a7b57610a7a611f14565b5b602002602001015190506000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050610b0b848284610fc1565b50508080610b1890611e09565b915050610a5d565b50505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ba4576000815114610b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9690611ac8565b60405180910390fd5b610d35565b6000815111610be8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bdf90611ba8565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614610c3e57610c3d826040518060600160405280602881526020016122f760289139611626565b5b6000808373ffffffffffffffffffffffffffffffffffffffff1683604051610c669190611a4a565b600060405180830381855af49150503d8060008114610ca1576040519150601f19603f3d011682016040523d82523d6000602084013e610ca6565b606091505b509150915081610d3257600081511115610cf757806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cee9190611aa6565b60405180910390fd5b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2990611ae8565b60405180910390fd5b50505b5050565b610d5b8160405180606001604052806024815260200161231f60249139611626565b81600201805490508260010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555081600201819080600181540180825580915050600190039060005260206000200160009091909190916101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055505050565b81846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055508360010160008273ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000018390806001815401808255809150506001900390600052602060002090600891828204019190066004029091909190916101000a81548163ffffffff021916908360e01c021790555080846000016000857bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611031576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102890611b28565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109790611bc8565b60405180910390fd5b6000836000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160149054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff169050600060018560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001805490506111779190611cfd565b905080821461130b5760008560010160008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000182815481106111d8576111d7611f14565b5b90600052602060002090600891828204019190066004029054906101000a900460e01b9050808660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600001848154811061125457611253611f14565b5b90600052602060002090600891828204019190066004026101000a81548163ffffffff021916908360e01c021790555082866000016000837bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916815260200190815260200160002060000160146101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550505b8460010160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000180548061135f5761135e611ee5565b5b60019003818190600052602060002090600891828204019190066004026101000a81549063ffffffff02191690559055846000016000847bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19167bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19168152602001908152602001600020600080820160006101000a81549073ffffffffffffffffffffffffffffffffffffffff02191690556000820160146101000a8154906bffffffffffffffffffffffff02191690555050600081141561161f5760006001866002018054905061144a9190611cfd565b905060008660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154905081811461158b5760008760020183815481106114b4576114b3611f14565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050808860020183815481106114f8576114f7611f14565b5b9060005260206000200160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818860010160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550505b8660020180548061159f5761159e611ee5565b5b6001900381819060005260206000200160006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905590558660010160008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001016000905550505b5050505050565b6000823b9050600081118290611672576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116699190611aa6565b60405180910390fd5b50505050565b60006116848383611795565b60208301905092915050565b600061169c83836119fa565b905092915050565b6116ad81611d31565b82525050565b6116bc81611d31565b82525050565b60006116cd82611c68565b6116d78185611cae565b93506116e283611c48565b8060005b838110156117135781516116fa8882611678565b975061170583611c94565b9250506001810190506116e6565b5085935050505092915050565b600061172b82611c73565b6117358185611cbf565b93508360208202850161174785611c58565b8060005b8581101561178357848403895281516117648582611690565b945061176f83611ca1565b925060208a0199505060018101905061174b565b50829750879550505050505092915050565b61179e81611d43565b82525050565b60006117af82611c7e565b6117b98185611cd0565b93506117c9818560208601611dd6565b6117d281611f43565b840191505092915050565b60006117e882611c7e565b6117f28185611ce1565b9350611802818560208601611dd6565b80840191505092915050565b61181781611dc4565b82525050565b600061182882611c89565b6118328185611cec565b9350611842818560208601611dd6565b61184b81611f43565b840191505092915050565b6000611863603c83611cec565b915061186e82611f54565b604082019050919050565b6000611886602683611cec565b915061189182611fa3565b604082019050919050565b60006118a9602b83611cec565b91506118b482611ff2565b604082019050919050565b60006118cc603783611cec565b91506118d782612041565b604082019050919050565b60006118ef602783611cec565b91506118fa82612090565b604082019050919050565b6000611912602c83611cec565b915061191d826120df565b604082019050919050565b6000611935602083611cec565b91506119408261212e565b602082019050919050565b6000611958603d83611cec565b915061196382612157565b604082019050919050565b600061197b602e83611cec565b9150611986826121a6565b604082019050919050565b600061199e603583611cec565b91506119a9826121f5565b604082019050919050565b60006119c1603883611cec565b91506119cc82612244565b604082019050919050565b60006119e4603683611cec565b91506119ef82612293565b604082019050919050565b6000606083016000830151611a1260008601826116a4565b506020830151611a25602086018261180e565b5060408301518482036040860152611a3d82826116c2565b9150508091505092915050565b6000611a5682846117dd565b915081905092915050565b60006060820190508181036000830152611a7b8186611720565b9050611a8a60208301856116b3565b8181036040830152611a9c81846117a4565b9050949350505050565b60006020820190508181036000830152611ac0818461181d565b905092915050565b60006020820190508181036000830152611ae181611856565b9050919050565b60006020820190508181036000830152611b0181611879565b9050919050565b60006020820190508181036000830152611b218161189c565b9050919050565b60006020820190508181036000830152611b41816118bf565b9050919050565b60006020820190508181036000830152611b61816118e2565b9050919050565b60006020820190508181036000830152611b8181611905565b9050919050565b60006020820190508181036000830152611ba181611928565b9050919050565b60006020820190508181036000830152611bc18161194b565b9050919050565b60006020820190508181036000830152611be18161196e565b9050919050565b60006020820190508181036000830152611c0181611991565b9050919050565b60006020820190508181036000830152611c21816119b4565b9050919050565b60006020820190508181036000830152611c41816119d7565b9050919050565b6000819050602082019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b6000611d0882611da2565b9150611d1383611da2565b925082821015611d2657611d25611e87565b5b828203905092915050565b6000611d3c82611d82565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6000819050611d7d826122e2565b919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006bffffffffffffffffffffffff82169050919050565b6000611dcf82611d6f565b9050919050565b60005b83811015611df4578082015181840152602081019050611dd9565b83811115611e03576000848401525b50505050565b6000611e1482611da2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415611e4757611e46611e87565b5b600182019050919050565b6000611e5d82611dac565b91506bffffffffffffffffffffffff821415611e7c57611e7b611e87565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000601f19601f8301169050919050565b7f4c69624469616d6f6e644375743a205f696e697420697320616464726573732860008201527f3029206275745f63616c6c64617461206973206e6f7420656d70747900000000602082015250565b7f4c69624469616d6f6e644375743a205f696e69742066756e6374696f6e20726560008201527f7665727465640000000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204e6f2073656c6563746f727320696e206660008201527f6163657420746f20637574000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f76652066756e6360008201527f74696f6e207468617420646f65736e2774206578697374000000000000000000602082015250565b7f4c69624469616d6f6e644375743a20496e636f7272656374204661636574437560008201527f74416374696f6e00000000000000000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a204164642066616365742063616e2774206260008201527f6520616464726573732830290000000000000000000000000000000000000000602082015250565b7f4469616d6f6e643a2046756e6374696f6e20646f6573206e6f74206578697374600082015250565b7f4c69624469616d6f6e644375743a205f63616c6c6461746120697320656d707460008201527f7920627574205f696e6974206973206e6f742061646472657373283029000000602082015250565b7f4c69624469616d6f6e644375743a2043616e27742072656d6f766520696d6d7560008201527f7461626c652066756e6374696f6e000000000000000000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774206164642066756e6374696f60008201527f6e207468617420616c7265616479206578697374730000000000000000000000602082015250565b7f4c69624469616d6f6e644375743a2043616e2774207265706c6163652066756e60008201527f6374696f6e20776974682073616d652066756e6374696f6e0000000000000000602082015250565b7f4c69624469616d6f6e644375743a2052656d6f7665206661636574206164647260008201527f657373206d757374206265206164647265737328302900000000000000000000602082015250565b600381106122f3576122f2611eb6565b5b5056fe4c69624469616d6f6e644375743a205f696e6974206164647265737320686173206e6f20636f64654c69624469616d6f6e644375743a204e657720666163657420686173206e6f20636f6465a2646970667358221220ea9a76729266365343bb9b118ec2ca4ca49c28c23a767dc82fde3d9b31ed47a164736f6c63430008060033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000aefacf945a5986f864585a4851293d9f4a14da9b0000000000000000000000002ea87b3ad4a9f9c015a28c7927ba8499534720dc0000000000000000000000009c0f0bd38a1fb5de569f3f937e11f1e39c16e999
-----Decoded View---------------
Arg [0] : _contractOwner (address): 0xAeFAcf945a5986F864585A4851293d9f4a14dA9b
Arg [1] : _diamondCutFacet (address): 0x2ea87b3AD4A9f9c015a28C7927BA8499534720dC
Arg [2] : _diamondLoupeFacet (address): 0x9c0F0BD38A1fB5dE569f3f937e11F1E39c16E999
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000aefacf945a5986f864585a4851293d9f4a14da9b
Arg [1] : 0000000000000000000000002ea87b3ad4a9f9c015a28c7927ba8499534720dc
Arg [2] : 0000000000000000000000009c0f0bd38a1fb5de569f3f937e11f1e39c16e999
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.