Overview
ETH Balance
0 ETH
Eth Value
$0.00More Info
Private Name Tags
ContractCreator
Latest 25 from a total of 296 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Extend Multiple ... | 15459619 | 939 days ago | IN | 0 ETH | 0.00037128 | ||||
Set Is Live | 14993789 | 1014 days ago | IN | 0 ETH | 0.00045272 | ||||
Extend Multiple ... | 14993166 | 1014 days ago | IN | 0 ETH | 0.00595109 | ||||
Extend Multiple ... | 14971898 | 1018 days ago | IN | 0 ETH | 0.00456732 | ||||
Extend Multiple ... | 14942945 | 1023 days ago | IN | 0 ETH | 0.00317806 | ||||
Extend Multiple ... | 14941034 | 1023 days ago | IN | 0 ETH | 0.00427139 | ||||
Extend Multiple ... | 14925426 | 1026 days ago | IN | 0 ETH | 0.00974649 | ||||
Extend With Vari... | 14869237 | 1035 days ago | IN | 0 ETH | 0.00102597 | ||||
Extend With Vari... | 14869233 | 1035 days ago | IN | 0 ETH | 0.00136254 | ||||
Extend Multiple ... | 14854787 | 1037 days ago | IN | 0 ETH | 0.00322648 | ||||
Extend Multiple ... | 14852755 | 1038 days ago | IN | 0 ETH | 0.00444951 | ||||
Extend Multiple ... | 14834615 | 1041 days ago | IN | 0 ETH | 0.00228493 | ||||
Extend Multiple ... | 14834611 | 1041 days ago | IN | 0 ETH | 0.00203377 | ||||
Extend Multiple ... | 14834288 | 1041 days ago | IN | 0 ETH | 0.00073711 | ||||
Extend Multiple ... | 14834245 | 1041 days ago | IN | 0 ETH | 0.00207093 | ||||
Extend Multiple ... | 14827308 | 1042 days ago | IN | 0 ETH | 0.00344116 | ||||
Extend Multiple ... | 14824689 | 1042 days ago | IN | 0 ETH | 0.00189526 | ||||
Extend Multiple ... | 14813953 | 1044 days ago | IN | 0 ETH | 0.00309202 | ||||
Extend Multiple ... | 14801728 | 1046 days ago | IN | 0 ETH | 0.00420865 | ||||
Extend Multiple ... | 14801570 | 1046 days ago | IN | 0 ETH | 0.00600941 | ||||
Extend Multiple ... | 14800769 | 1046 days ago | IN | 0 ETH | 0.00587915 | ||||
Extend Multiple ... | 14800403 | 1046 days ago | IN | 0 ETH | 0.00567348 | ||||
Extend Multiple ... | 14796776 | 1047 days ago | IN | 0 ETH | 0.01747722 | ||||
Extend Multiple ... | 14796209 | 1047 days ago | IN | 0 ETH | 0.00519734 | ||||
Extend Multiple ... | 14795208 | 1047 days ago | IN | 0 ETH | 0.00249868 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
ThePixelsIncExtensionStorage
Compiler Version
v0.8.0+commit.c7dfd78e
Optimization Enabled:
Yes with 500 runs
Other Settings:
default evmVersion
Contract Source Code (Solidity Standard Json-Input format)
// SPDX-License-Identifier: MIT // ______ __ __ ______ _____ __ __ _____ ______ // /\__ _\/\ \_\ \ /\ ___\ /\ __-. /\ \/\ \ /\ __-. /\ ___\ // \/_/\ \/\ \ __ \\ \ __\ \ \ \/\ \\ \ \_\ \\ \ \/\ \\ \ __\ // \ \_\ \ \_\ \_\\ \_____\ \ \____- \ \_____\\ \____- \ \_____\ // \/_/ \/_/\/_/ \/_____/ \/____/ \/_____/ \/____/ \/_____/ // pragma solidity ^0.8.0; import "@openzeppelin/contracts/access/Ownable.sol"; import "@openzeppelin/contracts/token/ERC721/IERC721.sol"; import "./ThePixelsDigitsUtility.sol"; import "./../../common/interfaces/IINT.sol"; import "./../../common/interfaces/IThePixelsIncExtensionStorage.sol"; import "./../../common/interfaces/ICoreRewarder.sol"; contract ThePixelsIncExtensionStorage is Ownable, IThePixelsIncExtensionStorage, ThePixelsDigitsUtility { struct Extension { bool isEnabled; uint8 beginIndex; uint8 endIndex; address operator; } bool public isLive; address public immutable INTAddress; address public immutable DAOAddress; address public immutable rewarderAddress; uint256 public extensionCount; mapping(uint256 => uint256) public override pixelExtensions; mapping(uint256 => Extension) public extensions; mapping(uint256 => mapping(uint256 => Variant)) public variants; mapping(uint256 => mapping(uint256 => Category)) public categories; mapping(uint256 => mapping(uint256 => mapping(uint256 => bool))) public claimedPixelVariants; mapping(uint256 => mapping(uint256 => mapping(uint256 => bool))) public usedCollectionTokens; mapping(address => uint256) public rewards; constructor( address _INTAddress, address _DAOAddress, address _rewarderAddress ) { INTAddress = _INTAddress; DAOAddress = _DAOAddress; rewarderAddress = _rewarderAddress; } // OWNER CONTROLS function setIsLive(bool _isLive) external onlyOwner { isLive = _isLive; } function setExtension(uint256 extensionId, Extension memory extension) public onlyOwner { require( extension.endIndex > extension.beginIndex, "Indexes are invalid" ); extensions[extensionId] = extension; emitExtensionChangeEvent(extensionId, extension); } function setClaimedPixelVariants( uint256 extensionId, uint256 tokenId, uint256 variantId, bool isClaimed ) public onlyOwner { claimedPixelVariants[extensionId][tokenId][variantId] = isClaimed; emit VariantClaimChanged(extensionId, variantId, tokenId, isClaimed); } function setExtensions( uint256[] memory extensionIds, Extension[] memory _extensions ) public onlyOwner { for (uint256 i = 0; i < extensionIds.length; i++) { setExtension(extensionIds[i], _extensions[i]); } } function enableExtension(uint256 extensionId, bool isEnabled) external onlyOwner { extensions[extensionId].isEnabled = isEnabled; emitExtensionChangeEvent(extensionId, extensions[extensionId]); } function setVariant( uint256 extensionId, uint256 variantId, Variant memory variant ) public onlyOwner { variants[extensionId][variantId] = variant; emitVariantChangeEvent(extensionId, variantId, variant); } function setVariants( uint256 extensionId, uint256[] memory variantIds, Variant[] memory _variants ) public onlyOwner { for (uint256 i; i < variantIds.length; i++) { setVariant(extensionId, variantIds[i], _variants[i]); } } function enableVariant( uint256 extensionId, uint256 variantId, bool isEnabled ) external onlyOwner { variants[extensionId][variantId].isEnabled = isEnabled; emitVariantChangeEvent( extensionId, variantId, variants[extensionId][variantId] ); } function setCategory( uint256 extensionId, uint256 categoryId, Category memory category ) public onlyOwner { categories[extensionId][categoryId] = category; emitCategoryChangeEvent(extensionId, categoryId, category); } function setCategories( uint256 extensionId, uint256[] memory categoryIds, Category[] memory _categories ) public onlyOwner { for (uint256 i; i < categoryIds.length; i++) { setCategory(extensionId, categoryIds[i], _categories[i]); } } // PUBILC CONTROLS function extendWithVariant( address owner, uint256 extensionId, uint256 tokenId, uint256 variantId, bool useCollectionTokenId, uint256 collectionTokenId ) public override { require(isLive, "Extension storage is not live"); Extension memory extension = extensions[extensionId]; require(extension.isEnabled, "This extension is disabled"); _extendWithVariant( owner, extension, extensionId, tokenId, variantId, useCollectionTokenId, collectionTokenId ); } function extendMultipleWithVariants( address owner, uint256 extensionId, uint256[] memory tokenIds, uint256[] memory variantIds, bool[] memory useCollectionTokenIds, uint256[] memory collectionTokenIds ) public override { require(isLive, "Extension storage is not live"); Extension memory extension = extensions[extensionId]; require(extension.isEnabled, "This extension is disabled"); for (uint256 i; i < tokenIds.length; i++) { _extendWithVariant( owner, extension, extensionId, tokenIds[i], variantIds[i], useCollectionTokenIds[i], collectionTokenIds[i] ); } } function transferExtensionVariant( uint256 extensionId, uint256 variantId, uint256 fromTokenId, uint256 toTokenId ) public { require(isLive, "Extension storage is not live"); Extension memory extension = extensions[extensionId]; require(extension.isEnabled, "This extension is disabled"); if (extension.operator != msg.sender) { require( ICoreRewarder(rewarderAddress).isOwner(msg.sender, fromTokenId), "Not authorised" ); } bool ownershipOfSender = claimedPixelVariants[extensionId][fromTokenId][ variantId ]; require(ownershipOfSender, "Sender doesn't own this variant"); uint256 currentVariantId = currentVariantIdOf(extensionId, fromTokenId); require( currentVariantId != variantId, "You need to detach this variant to transfer" ); bool ownershipOfRecipent = claimedPixelVariants[extensionId][toTokenId][ variantId ]; require(!ownershipOfRecipent, "Recipent already has this variant"); claimedPixelVariants[extensionId][fromTokenId][variantId] = false; claimedPixelVariants[extensionId][toTokenId][variantId] = true; emit VariantTransferred(extensionId, variantId, fromTokenId, toTokenId); } // UTILITY function variantDetails( address owner, uint256 extensionId, uint256[] memory tokenIds, uint256[] memory variantIds, bool[] memory useCollectionTokenIds, uint256[] memory collectionTokenIds ) public view override returns (Variant[] memory, VariantStatus[] memory) { VariantStatus[] memory statuses = new VariantStatus[]( variantIds.length ); Variant[] memory _variants = new Variant[](variantIds.length); address _owner = owner; uint256 _extensionId = extensionId; for (uint256 i; i < variantIds.length; i++) { uint256 variantId = variantIds[i]; uint256 tokenId = tokenIds[i]; bool useCollectionTokenId = useCollectionTokenIds[i]; uint256 collectionTokenId = collectionTokenIds[i]; Variant memory variant = variants[_extensionId][variantId]; (uint128 _cost, uint128 _supply) = _costAndSupplyOfVariant( _extensionId, variant ); statuses[i].cost = _cost; statuses[i].supply = _supply; bool isFreeForCollection = _shouldConsumeCollectionToken( _owner, _extensionId, variantId, useCollectionTokenId, collectionTokenId, variant ); if (isFreeForCollection) { statuses[i].cost = 0; } if (claimedPixelVariants[_extensionId][tokenId][variantId]) { statuses[i].isAlreadyClaimed = true; statuses[i].cost = 0; } _variants[i] = variant; } return (_variants, statuses); } function balanceOfToken( uint256 extensionId, uint256 tokenId, uint256[] memory variantIds ) public view override returns (uint256) { uint256 balance; for (uint256 i; i < variantIds.length; i++) { uint256 variantId = variantIds[i]; if (claimedPixelVariants[extensionId][tokenId][variantId]) { balance++; } } return balance; } function currentVariantIdOf(uint256 extensionId, uint256 tokenId) public view override returns (uint256) { Extension memory extension = extensions[extensionId]; uint256 value = pixelExtensions[tokenId]; return _digitsAt( value, _digitOf(value), extension.beginIndex, extension.endIndex ); } // INTERNAL function _extendWithVariant( address _owner, Extension memory _extension, uint256 _extensionId, uint256 _tokenId, uint256 _variantId, bool _useCollectionTokenId, uint256 _collectionTokenId ) internal { Variant memory _variant = variants[_extensionId][_variantId]; require(_variant.isEnabled, "This variant is disabled"); if (_variant.isOperatorExecution) { require( _extension.operator == msg.sender, "Not authroised - Invalid operator" ); } else { require( ICoreRewarder(rewarderAddress).isOwner(msg.sender, _tokenId), "Not authorised - Invalid owner" ); } if (_variant.isDisabledForSpecialPixels) { require( !_isSpecialPixel(_tokenId), "This variant is not for special pixels" ); } _extend( _owner, _extensionId, _extension.beginIndex, _extension.endIndex, _tokenId, _variantId ); if (!claimedPixelVariants[_extensionId][_tokenId][_variantId]) { (uint128 _cost, uint128 _supply) = _costAndSupplyOfVariant( _extensionId, _variant ); bool shouldConsumeCollectionToken = _shouldConsumeCollectionToken( _owner, _extensionId, _variantId, _useCollectionTokenId, _collectionTokenId, _variant ); if (shouldConsumeCollectionToken) { _cost = 0; usedCollectionTokens[_extensionId][_variantId][ _collectionTokenId ] = true; } if (_supply != 0) { require(_variant.count < _supply, "Sorry, sold out"); variants[_extensionId][_variantId].count++; } claimedPixelVariants[_extensionId][_tokenId][_variantId] = true; if (_cost > 0) { _spendINT( _owner, _cost, _variant.contributer, _variant.contributerCut ); } } } function _extend( address _owner, uint256 _extensionId, uint8 _beginIndex, uint8 _endIndex, uint256 _tokenId, uint256 _value ) internal { uint256 value = pixelExtensions[_tokenId]; uint256 newValue = _replacedDigits( value, _digitOf(value), _beginIndex, _endIndex, _value ); pixelExtensions[_tokenId] = newValue; emit Extended(_owner, _tokenId, _extensionId, value, newValue); } function _spendINT( address _owner, uint128 _amount, address _contributer, uint16 _contributerCut ) internal { if (_amount == 0) { return; } uint128 contributerAmount; uint128 daoAmount; unchecked { if (_contributerCut > 0) { contributerAmount = _amount / _contributerCut; daoAmount = _amount - contributerAmount; } else { daoAmount = _amount; } } if (daoAmount > 0) { IINT(INTAddress).transferFrom(_owner, DAOAddress, daoAmount); } if (contributerAmount > 0) { IINT(INTAddress).transferFrom( _owner, _contributer, contributerAmount ); } } function _costAndSupplyOfVariant( uint256 _extensionId, Variant memory _variant ) internal view returns (uint128, uint128) { uint128 _cost = _variant.cost; uint128 _supply = _variant.supply; if (_variant.categoryId > 0) { Category memory _category = categories[_extensionId][ _variant.categoryId ]; _cost = _category.cost; _supply = _category.supply; } return (_cost, _supply); } function _shouldConsumeCollectionToken( address _owner, uint256 _extensionId, uint256 _variantId, bool _useCollectionTokenId, uint256 _collectionTokenId, Variant memory _variant ) internal view returns (bool) { if (_variant.isFreeForCollection && _useCollectionTokenId) { if ( !usedCollectionTokens[_extensionId][_variantId][ _collectionTokenId ] && IERC721(_variant.collection).ownerOf(_collectionTokenId) == _owner ) { return true; } } return false; } function _isSpecialPixel(uint256 tokenId) internal pure returns (bool) { if ( tokenId == 5061 || tokenId == 5060 || tokenId == 5059 || tokenId == 5058 || tokenId == 5057 ) { return true; } return false; } // EVENTS function emitExtensionChangeEvent( uint256 extensionId, Extension memory extension ) internal { emit ExtensionChanged( extensionId, extension.operator, extension.isEnabled, extension.beginIndex, extension.endIndex ); } function emitVariantChangeEvent( uint256 extensionId, uint256 variantId, Variant memory variant ) internal { emit VariantChanged( extensionId, variantId, variant.isOperatorExecution, variant.isFreeForCollection, variant.isEnabled, variant.isDisabledForSpecialPixels, variant.contributerCut, variant.cost, variant.supply, variant.count, variant.contributer, variant.collection ); } function emitCategoryChangeEvent( uint256 extensionId, uint256 categoryId, Category memory category ) internal { emit CategoryChanged( extensionId, categoryId, category.cost, category.supply ); } event Extended( address indexed owner, uint256 indexed tokenId, uint256 extensionId, uint256 previousExtension, uint256 newExtension ); event ExtensionChanged( uint256 indexed extensionId, address operator, bool isEnabled, uint8 beginIndex, uint8 endIndex ); event VariantChanged( uint256 indexed extensionId, uint256 indexed variantId, bool isOperatorExecution, bool isFreeForCollection, bool isEnabled, bool isDisabledForSpecialPixels, uint16 contributerCut, uint128 cost, uint128 supply, uint128 count, address contributer, address collection ); event CategoryChanged( uint256 indexed extensionId, uint256 indexed categoryId, uint128 cost, uint128 supply ); event VariantTransferred( uint256 indexed extensionId, uint256 indexed variantId, uint256 fromTokenId, uint256 toTokenId ); event VariantClaimChanged( uint256 indexed extensionId, uint256 indexed variantId, uint256 tokenId, bool isClaimed ); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts 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 // ______ __ __ ______ _____ __ __ _____ ______ // /\__ _\/\ \_\ \ /\ ___\ /\ __-. /\ \/\ \ /\ __-. /\ ___\ // \/_/\ \/\ \ __ \\ \ __\ \ \ \/\ \\ \ \_\ \\ \ \/\ \\ \ __\ // \ \_\ \ \_\ \_\\ \_____\ \ \____- \ \_____\\ \____- \ \_____\ // \/_/ \/_/\/_/ \/_____/ \/____/ \/_____/ \/____/ \/_____/ // pragma solidity ^0.8.0; import "@openzeppelin/contracts/utils/Strings.sol"; contract ThePixelsDigitsUtility { using Strings for uint256; function _replacedDigits( uint256 value, uint256 length, uint256 beginIndex, uint256 endIndex, uint256 replaceValue ) internal pure returns (uint256) { require(endIndex > beginIndex, "Indexes are invalid"); unchecked { uint256 maxReplaceValue = uint256(10**(endIndex - beginIndex) - 1); require( replaceValue <= maxReplaceValue, "Replace value is too big" ); uint256 minReplaceValue = uint256(10**(endIndex - beginIndex - 1)); require( replaceValue >= minReplaceValue, "Replace value is too small" ); if (value == 0) { value = 1; } if (beginIndex < length && endIndex < length) { uint256 left = (value / (10**(length - beginIndex))) * (10**(length - beginIndex)); uint256 middle = replaceValue * (10**(length - endIndex)); uint256 leftFromEndIndex = uint256( (value / (10**(length - endIndex))) * (10**(length - endIndex)) ); uint256 right = value - leftFromEndIndex; return left + middle + right; } else if (beginIndex >= length && endIndex >= length) { uint256 left = value * (10**(endIndex - length)); return left + replaceValue; } else if (beginIndex < length && endIndex >= length) { uint256 left = (value / (10**(length - beginIndex))) * (10**(endIndex - beginIndex)); return left + replaceValue; } } return value; } function _digitsAt( uint256 value, uint256 length, uint256 beginIndex, uint256 endIndex ) internal pure returns (uint256) { require(endIndex > beginIndex, "Indexes are invalid"); unchecked { if (length == 0) { length = 1; } if (beginIndex < length && endIndex <= length) { uint256 left = (value / (10**(length - beginIndex))) * (10**(length - beginIndex)); uint256 valueWithoutLeft = value - left; return valueWithoutLeft / (10**(length - endIndex)); } else if (beginIndex >= length && endIndex >= length) { return 0; } } return value; } function _digitOf(uint256 value) internal pure returns (uint256) { return bytes(value.toString()).length; } }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; // ______ __ __ ______ _____ __ __ _____ ______ // /\__ _\/\ \_\ \ /\ ___\ /\ __-. /\ \/\ \ /\ __-. /\ ___\ // \/_/\ \/\ \ __ \\ \ __\ \ \ \/\ \\ \ \_\ \\ \ \/\ \\ \ __\ // \ \_\ \ \_\ \_\\ \_____\ \ \____- \ \_____\\ \____- \ \_____\ // \/_/ \/_/\/_/ \/_____/ \/____/ \/_____/ \/____/ \/_____/ // interface IINT { function totalSupply() external view returns (uint256); function balanceOf(address account) external view returns (uint256); function transfer(address to, uint256 amount) external returns (bool); function allowance(address owner, address spender) external view returns (uint256); function approve(address spender, uint256 amount) external returns (bool); function transferFrom( address from, address to, uint256 amount ) external returns (bool); function mint(address to, uint256 amount) external; function burnFrom(address account, uint256 amount) external; }
// pragma solidity ^0.8.0; // SPDX-License-Identifier: MIT // ______ __ __ ______ _____ __ __ _____ ______ // /\__ _\/\ \_\ \ /\ ___\ /\ __-. /\ \/\ \ /\ __-. /\ ___\ // \/_/\ \/\ \ __ \\ \ __\ \ \ \/\ \\ \ \_\ \\ \ \/\ \\ \ __\ // \ \_\ \ \_\ \_\\ \_____\ \ \____- \ \_____\\ \____- \ \_____\ // \/_/ \/_/\/_/ \/_____/ \/____/ \/_____/ \/____/ \/_____/ // pragma solidity ^0.8.0; interface IThePixelsIncExtensionStorage { struct Variant { bool isOperatorExecution; bool isFreeForCollection; bool isEnabled; bool isDisabledForSpecialPixels; uint16 contributerCut; uint128 cost; uint128 supply; uint128 count; uint128 categoryId; address contributer; address collection; } struct Category { uint128 cost; uint128 supply; } struct VariantStatus { bool isAlreadyClaimed; uint128 cost; uint128 supply; } function extendWithVariant( address owner, uint256 extensionId, uint256 tokenId, uint256 variantId, bool useCollectionTokenId, uint256 collectionTokenId ) external; function extendMultipleWithVariants( address owner, uint256 extensionId, uint256[] memory tokenIds, uint256[] memory variantIds, bool[] memory useCollectionTokenId, uint256[] memory collectionTokenIds ) external; function variantDetails( address owner, uint256 extensionId, uint256[] memory tokenIds, uint256[] memory variantIds, bool[] memory useCollectionTokenIds, uint256[] memory collectionTokenIds ) external view returns (Variant[] memory, VariantStatus[] memory); function pixelExtensions(uint256 tokenId) external view returns (uint256); function balanceOfToken( uint256 extensionId, uint256 tokenId, uint256[] memory variantIds ) external view returns (uint256); function currentVariantIdOf(uint256 extensionId, uint256 tokenId) external view returns (uint256); }
//SPDX-License-Identifier: Unlicense pragma solidity ^0.8.0; // ______ __ __ ______ _____ __ __ _____ ______ // /\__ _\/\ \_\ \ /\ ___\ /\ __-. /\ \/\ \ /\ __-. /\ ___\ // \/_/\ \/\ \ __ \\ \ __\ \ \ \/\ \\ \ \_\ \\ \ \/\ \\ \ __\ // \ \_\ \ \_\ \_\\ \_____\ \ \____- \ \_____\\ \____- \ \_____\ // \/_/ \/_/\/_/ \/_____/ \/____/ \/_____/ \/____/ \/_____/ // interface ICoreRewarder { function stake( uint256[] calldata tokenIds ) external; function withdraw( uint256[] calldata tokenIds ) external; function claim(uint256[] calldata tokenIds) external; function earned(uint256[] memory tokenIds) external view returns (uint256); function lastClaimTimesOfTokens(uint256[] memory tokenIds) external view returns (uint256[] memory); function isOwner(address owner, uint256 tokenId) external view returns (bool); function tokensOfOwner(address _owner) external view returns (uint256[] memory); function stakedTokensOfOwner(address owner) external view returns (uint256[] memory); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
{ "optimizer": { "enabled": true, "runs": 500 }, "outputSelection": { "*": { "*": [ "evm.bytecode", "evm.deployedBytecode", "devdoc", "userdoc", "metadata", "abi" ] } }, "libraries": {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"address","name":"_INTAddress","type":"address"},{"internalType":"address","name":"_DAOAddress","type":"address"},{"internalType":"address","name":"_rewarderAddress","type":"address"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"extensionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"categoryId","type":"uint256"},{"indexed":false,"internalType":"uint128","name":"cost","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"supply","type":"uint128"}],"name":"CategoryChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"extensionId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"previousExtension","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"newExtension","type":"uint256"}],"name":"Extended","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"extensionId","type":"uint256"},{"indexed":false,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"},{"indexed":false,"internalType":"uint8","name":"beginIndex","type":"uint8"},{"indexed":false,"internalType":"uint8","name":"endIndex","type":"uint8"}],"name":"ExtensionChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"extensionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"variantId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isOperatorExecution","type":"bool"},{"indexed":false,"internalType":"bool","name":"isFreeForCollection","type":"bool"},{"indexed":false,"internalType":"bool","name":"isEnabled","type":"bool"},{"indexed":false,"internalType":"bool","name":"isDisabledForSpecialPixels","type":"bool"},{"indexed":false,"internalType":"uint16","name":"contributerCut","type":"uint16"},{"indexed":false,"internalType":"uint128","name":"cost","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"supply","type":"uint128"},{"indexed":false,"internalType":"uint128","name":"count","type":"uint128"},{"indexed":false,"internalType":"address","name":"contributer","type":"address"},{"indexed":false,"internalType":"address","name":"collection","type":"address"}],"name":"VariantChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"extensionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"variantId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"bool","name":"isClaimed","type":"bool"}],"name":"VariantClaimChanged","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"extensionId","type":"uint256"},{"indexed":true,"internalType":"uint256","name":"variantId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"VariantTransferred","type":"event"},{"inputs":[],"name":"DAOAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"INTAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256[]","name":"variantIds","type":"uint256[]"}],"name":"balanceOfToken","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"categories","outputs":[{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"claimedPixelVariants","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"currentVariantIdOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"enableExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"variantId","type":"uint256"},{"internalType":"bool","name":"isEnabled","type":"bool"}],"name":"enableVariant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"variantIds","type":"uint256[]"},{"internalType":"bool[]","name":"useCollectionTokenIds","type":"bool[]"},{"internalType":"uint256[]","name":"collectionTokenIds","type":"uint256[]"}],"name":"extendMultipleWithVariants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"variantId","type":"uint256"},{"internalType":"bool","name":"useCollectionTokenId","type":"bool"},{"internalType":"uint256","name":"collectionTokenId","type":"uint256"}],"name":"extendWithVariant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"extensionCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"extensions","outputs":[{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint8","name":"beginIndex","type":"uint8"},{"internalType":"uint8","name":"endIndex","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isLive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"pixelExtensions","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"rewarderAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"rewards","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256[]","name":"categoryIds","type":"uint256[]"},{"components":[{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"}],"internalType":"struct IThePixelsIncExtensionStorage.Category[]","name":"_categories","type":"tuple[]"}],"name":"setCategories","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"categoryId","type":"uint256"},{"components":[{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"}],"internalType":"struct IThePixelsIncExtensionStorage.Category","name":"category","type":"tuple"}],"name":"setCategory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"variantId","type":"uint256"},{"internalType":"bool","name":"isClaimed","type":"bool"}],"name":"setClaimedPixelVariants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"components":[{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint8","name":"beginIndex","type":"uint8"},{"internalType":"uint8","name":"endIndex","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"internalType":"struct ThePixelsIncExtensionStorage.Extension","name":"extension","type":"tuple"}],"name":"setExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"extensionIds","type":"uint256[]"},{"components":[{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"uint8","name":"beginIndex","type":"uint8"},{"internalType":"uint8","name":"endIndex","type":"uint8"},{"internalType":"address","name":"operator","type":"address"}],"internalType":"struct ThePixelsIncExtensionStorage.Extension[]","name":"_extensions","type":"tuple[]"}],"name":"setExtensions","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_isLive","type":"bool"}],"name":"setIsLive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"variantId","type":"uint256"},{"components":[{"internalType":"bool","name":"isOperatorExecution","type":"bool"},{"internalType":"bool","name":"isFreeForCollection","type":"bool"},{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"bool","name":"isDisabledForSpecialPixels","type":"bool"},{"internalType":"uint16","name":"contributerCut","type":"uint16"},{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"},{"internalType":"uint128","name":"count","type":"uint128"},{"internalType":"uint128","name":"categoryId","type":"uint128"},{"internalType":"address","name":"contributer","type":"address"},{"internalType":"address","name":"collection","type":"address"}],"internalType":"struct IThePixelsIncExtensionStorage.Variant","name":"variant","type":"tuple"}],"name":"setVariant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256[]","name":"variantIds","type":"uint256[]"},{"components":[{"internalType":"bool","name":"isOperatorExecution","type":"bool"},{"internalType":"bool","name":"isFreeForCollection","type":"bool"},{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"bool","name":"isDisabledForSpecialPixels","type":"bool"},{"internalType":"uint16","name":"contributerCut","type":"uint16"},{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"},{"internalType":"uint128","name":"count","type":"uint128"},{"internalType":"uint128","name":"categoryId","type":"uint128"},{"internalType":"address","name":"contributer","type":"address"},{"internalType":"address","name":"collection","type":"address"}],"internalType":"struct IThePixelsIncExtensionStorage.Variant[]","name":"_variants","type":"tuple[]"}],"name":"setVariants","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256","name":"variantId","type":"uint256"},{"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"internalType":"uint256","name":"toTokenId","type":"uint256"}],"name":"transferExtensionVariant","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"usedCollectionTokens","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"extensionId","type":"uint256"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"},{"internalType":"uint256[]","name":"variantIds","type":"uint256[]"},{"internalType":"bool[]","name":"useCollectionTokenIds","type":"bool[]"},{"internalType":"uint256[]","name":"collectionTokenIds","type":"uint256[]"}],"name":"variantDetails","outputs":[{"components":[{"internalType":"bool","name":"isOperatorExecution","type":"bool"},{"internalType":"bool","name":"isFreeForCollection","type":"bool"},{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"bool","name":"isDisabledForSpecialPixels","type":"bool"},{"internalType":"uint16","name":"contributerCut","type":"uint16"},{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"},{"internalType":"uint128","name":"count","type":"uint128"},{"internalType":"uint128","name":"categoryId","type":"uint128"},{"internalType":"address","name":"contributer","type":"address"},{"internalType":"address","name":"collection","type":"address"}],"internalType":"struct IThePixelsIncExtensionStorage.Variant[]","name":"","type":"tuple[]"},{"components":[{"internalType":"bool","name":"isAlreadyClaimed","type":"bool"},{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"}],"internalType":"struct IThePixelsIncExtensionStorage.VariantStatus[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"variants","outputs":[{"internalType":"bool","name":"isOperatorExecution","type":"bool"},{"internalType":"bool","name":"isFreeForCollection","type":"bool"},{"internalType":"bool","name":"isEnabled","type":"bool"},{"internalType":"bool","name":"isDisabledForSpecialPixels","type":"bool"},{"internalType":"uint16","name":"contributerCut","type":"uint16"},{"internalType":"uint128","name":"cost","type":"uint128"},{"internalType":"uint128","name":"supply","type":"uint128"},{"internalType":"uint128","name":"count","type":"uint128"},{"internalType":"uint128","name":"categoryId","type":"uint128"},{"internalType":"address","name":"contributer","type":"address"},{"internalType":"address","name":"collection","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60e06040523480156200001157600080fd5b5060405162003a5338038062003a538339810160408190526200003491620000e1565b620000486200004262000070565b62000074565b6001600160601b0319606093841b811660805291831b821660a05290911b1660c0526200012a565b3390565b600080546001600160a01b038381166001600160a01b0319831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b80516001600160a01b0381168114620000dc57600080fd5b919050565b600080600060608486031215620000f6578283fd5b6200010184620000c4565b92506200011160208501620000c4565b91506200012160408501620000c4565b90509250925092565b60805160601c60a05160601c60c05160601c6138cd6200018660003960008181610f89015281816118470152611c6f0152600081816117eb015261228b0152600081816116330152818161225c015261232f01526138cd6000f3fe608060405234801561001057600080fd5b50600436106101e55760003560e01c806382dd83231161010f578063d11f65a9116100a2578063e7c12efd11610071578063e7c12efd14610413578063f2fde38b14610426578063f3c95eb114610439578063f5d3c03a1461044c576101e5565b8063d11f65a9146103cd578063d392eab1146103e0578063db85d59c146103e8578063e0e2b2b31461040b576101e5565b8063a5af8b2d116100de578063a5af8b2d14610389578063b816aa8a14610391578063b8f7a665146103b2578063c886049d146103ba576101e5565b806382dd83231461033b5780638da5cb5b1461034e5780638ebf86b014610363578063a3e376d914610376576101e5565b80634149e4d3116101875780636d096c31116101565780636d096c31146102e3578063715018a6146102f6578063782091fc146102fe5780637f13816614610328576101e5565b80634149e4d31461029757806353d2df80146102aa578063670c01ce146102bd5780636b74266a146102d0576101e5565b80630f484a84116101c35780630f484a84146102305780631ea9ddd61461025057806320eb5f6514610263578063392225c914610284576101e5565b806305b07032146101ea5780630700037d146102085780630e0098f01461021b575b600080fd5b6101f261045f565b6040516101ff919061370e565b60405180910390f35b6101f26102163660046129c7565b610465565b61022e610229366004612b24565b610477565b005b61024361023e366004612f38565b61053a565b6040516101ff9190613209565b61022e61025e366004612c39565b610560565b610276610271366004612a06565b61061c565b6040516101ff9291906130df565b61022e610292366004612a06565b610a68565b6101f26102a5366004612e2f565b610bd8565b61022e6102b8366004612d05565b610c5d565b61022e6102cb366004612f0b565b610d13565b61022e6102de366004612fa3565b610ec1565b61022e6102f1366004612dd4565b61116f565b61022e611222565b61031161030c366004612e2f565b61126d565b6040516101ff9b9a9998979695949392919061328c565b61022e610336366004612e9e565b611303565b61022e610349366004612be9565b611436565b610356611493565b6040516101ff919061305a565b6101f2610371366004612e50565b6114a2565b61022e610384366004612e03565b611535565b610356611631565b6103a461039f366004612e2f565b611655565b6040516101ff9291906136f4565b610243611686565b61022e6103c8366004612ac7565b611696565b61022e6103db366004612ed6565b61174b565b6103566117e9565b6103fb6103f6366004612c21565b61180d565b6040516101ff9493929190613316565b610356611845565b6101f2610421366004612c21565b611869565b61022e6104343660046129c7565b61187b565b61022e610447366004612f63565b6118ec565b61024361045a366004612f38565b61199c565b60015481565b60086020526000908152604090205481565b61047f6119c2565b6001600160a01b0316610490611493565b6001600160a01b0316146104bf5760405162461bcd60e51b81526004016104b6906135a2565b60405180910390fd5b60005b8251811015610535576105238382815181106104ee57634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061051657634e487b7160e01b600052603260045260246000fd5b6020026020010151611535565b8061052d81613803565b9150506104c2565b505050565b600660209081526000938452604080852082529284528284209052825290205460ff1681565b6105686119c2565b6001600160a01b0316610579611493565b6001600160a01b03161461059f5760405162461bcd60e51b81526004016104b6906135a2565b60005b825181101561061657610604848483815181106105cf57634e487b7160e01b600052603260045260246000fd5b60200260200101518484815181106105f757634e487b7160e01b600052603260045260246000fd5b602002602001015161174b565b8061060e81613803565b9150506105a2565b50505050565b6060806000855167ffffffffffffffff81111561064957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561068257816020015b61066f61266e565b8152602001906001900390816106675790505b5090506000865167ffffffffffffffff8111156106af57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156106e857816020015b6106d561268e565b8152602001906001900390816106cd5790505b509050898960005b8951811015610a555760008a828151811061071b57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008c838151811061074757634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008b848151811061077357634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008b858151811061079f57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516000888152600480845260408083208984528552808320815161016081018352815460ff80821615158352610100808304821615159984019990995262010000820481161515948301949094526301000000810490931615156060820152640100000000830461ffff16608082015266010000000000009092046001600160801b0390811660a0840152600182015480821660c0850152600160801b9004811660e08401526002820154169582019590955260038501546001600160a01b0390811661012083015294909101549093166101408401529092508061088f89846119c6565b91509150818c89815181106108b457634e487b7160e01b600052603260045260246000fd5b6020026020010151602001906001600160801b031690816001600160801b031681525050808c89815181106108f957634e487b7160e01b600052603260045260246000fd5b6020026020010151604001906001600160801b031690816001600160801b031681525050600061092d8b8b8a898989611a43565b905080156109725760008d8a8151811061095757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160801b039092169101525b60008a81526006602090815260408083208a845282528083208b845290915290205460ff1615610a0e5760018d8a815181106109be57634e487b7160e01b600052603260045260246000fd5b602090810291909101015190151590528c516000908e908b9081106109f357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160801b039092169101525b838c8a81518110610a2f57634e487b7160e01b600052603260045260246000fd5b602002602001018190525050505050505050508080610a4d90613803565b9150506106f0565b50919b929a509198505050505050505050565b600054600160a01b900460ff16610a915760405162461bcd60e51b81526004016104b6906133b8565b6000858152600360209081526040918290208251608081018452905460ff80821615158084526101008304821694840194909452620100008204169382019390935263010000009092046001600160a01b03166060830152610b055760405162461bcd60e51b81526004016104b69061346c565b60005b8551811015610bce57610bbc888389898581518110610b3757634e487b7160e01b600052603260045260246000fd5b6020026020010151898681518110610b5f57634e487b7160e01b600052603260045260246000fd5b6020026020010151898781518110610b8757634e487b7160e01b600052603260045260246000fd5b6020026020010151898881518110610baf57634e487b7160e01b600052603260045260246000fd5b6020026020010151611b30565b80610bc681613803565b915050610b08565b5050505050505050565b60008281526003602090815260408083208151608081018352905460ff8082161515835261010082048116838601526201000082041682840152630100000090046001600160a01b031660608201528484526002909252822054610c5481610c3f81611eda565b846020015160ff16856040015160ff16611eee565b95945050505050565b610c656119c2565b6001600160a01b0316610c76611493565b6001600160a01b031614610c9c5760405162461bcd60e51b81526004016104b6906135a2565b60005b825181101561061657610d0184848381518110610ccc57634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610cf457634e487b7160e01b600052603260045260246000fd5b6020026020010151610d13565b80610d0b81613803565b915050610c9f565b610d1b6119c2565b6001600160a01b0316610d2c611493565b6001600160a01b031614610d525760405162461bcd60e51b81526004016104b6906135a2565b60008381526004602081815260408084208685528252928390208451815492860151948601516060870151608088015160a089015160ff199096169315159390931761ff00191661010097151588021762ff0000191662010000921515929092029190911763ff00000019166301000000911515919091021765ffff00000000191664010000000061ffff909216919091021775ffffffffffffffffffffffffffffffff000000000000191666010000000000006001600160801b039384160217815560c085015160018201805460e08801516fffffffffffffffffffffffffffffffff19918216938616939093178516600160801b938616939093029290921790559385015160028201805490951692169190911790925561012083015160038301805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03938416179091556101408501519390920180549092169216919091179055610535838383611fad565b600054600160a01b900460ff16610eea5760405162461bcd60e51b81526004016104b6906133b8565b6000848152600360209081526040918290208251608081018452905460ff80821615158084526101008304821694840194909452620100008204169382019390935263010000009092046001600160a01b03166060830152610f5e5760405162461bcd60e51b81526004016104b69061346c565b60608101516001600160a01b0316331461102c5760405163e327a6af60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e327a6af90610fc090339087906004016130c6565b60206040518083038186803b158015610fd857600080fd5b505afa158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110109190612c05565b61102c5760405162461bcd60e51b81526004016104b690613435565b6000858152600660209081526040808320868452825280832087845290915290205460ff168061106e5760405162461bcd60e51b81526004016104b690613381565b600061107a8786610bd8565b90508581141561109c5760405162461bcd60e51b81526004016104b690613557565b6000878152600660209081526040808320878452825280832089845290915290205460ff1680156110df5760405162461bcd60e51b81526004016104b690613340565b60008881526006602090815260408083208984528083528184208b85528352818420805460ff199081169091558985529083528184208b8552909252918290208054909116600117905551879089907f4a5612ed2e39c4407b0263684c276409ad17c9e57517026a1ef39ff54675fdfb9061115d908a908a90613727565b60405180910390a35050505050505050565b6111776119c2565b6001600160a01b0316611188611493565b6001600160a01b0316146111ae5760405162461bcd60e51b81526004016104b6906135a2565b600082815260036020908152604091829020805460ff19168415151790819055825160808101845260ff8083161515825261010083048116938201939093526201000082049092169282019290925263010000009091046001600160a01b0316606082015261121e908390612027565b5050565b61122a6119c2565b6001600160a01b031661123b611493565b6001600160a01b0316146112615760405162461bcd60e51b81526004016104b6906135a2565b61126b6000612079565b565b600460208181526000938452604080852090915291835291208054600182015460028301546003840154939094015460ff808416956101008504821695620100008604831695630100000081049093169461ffff640100000000850416946001600160801b03660100000000000090950485169482811694600160801b9093048116939216916001600160a01b0390811691168b565b61130b6119c2565b6001600160a01b031661131c611493565b6001600160a01b0316146113425760405162461bcd60e51b81526004016104b6906135a2565b6000838152600460208181526040808420868552825292839020805462ff000019166201000086151581029190911780835585516101608101875260ff80831615158252610100808404821615159683019690965292820483161515968101969096526301000000810490911615156060860152640100000000810461ffff166080860152660100000000000090046001600160801b0390811660a0860152600182015480821660c0870152600160801b9004811660e08601526002820154169184019190915260038101546001600160a01b03908116610120850152910154166101408201526105359084908490611fad565b61143e6119c2565b6001600160a01b031661144f611493565b6001600160a01b0316146114755760405162461bcd60e51b81526004016104b6906135a2565b60008054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031690565b60008060005b835181101561152c5760008482815181106114d357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008981526006835260408082208a83528452808220838352909352919091205490915060ff1615611519578261151581613803565b9350505b508061152481613803565b9150506114a8565b50949350505050565b61153d6119c2565b6001600160a01b031661154e611493565b6001600160a01b0316146115745760405162461bcd60e51b81526004016104b6906135a2565b806020015160ff16816040015160ff16116115a15760405162461bcd60e51b81526004016104b6906136bd565b600082815260036020908152604091829020835181549285015193850151606086015160ff199094169115159190911761ff00191661010060ff958616021762ff000019166201000094909116939093029290921776ffffffffffffffffffffffffffffffffffffffff000000191663010000006001600160a01b039092169190910217905561121e8282612027565b7f000000000000000000000000000000000000000000000000000000000000000081565b60056020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b600054600160a01b900460ff1681565b600054600160a01b900460ff166116bf5760405162461bcd60e51b81526004016104b6906133b8565b6000858152600360209081526040918290208251608081018452905460ff80821615158084526101008304821694840194909452620100008204169382019390935263010000009092046001600160a01b031660608301526117335760405162461bcd60e51b81526004016104b69061346c565b61174287828888888888611b30565b50505050505050565b6117536119c2565b6001600160a01b0316611764611493565b6001600160a01b03161461178a5760405162461bcd60e51b81526004016104b6906135a2565b6000838152600560209081526040808320858452825290912082518154928401516fffffffffffffffffffffffffffffffff199093166001600160801b03918216178116600160801b91909316029190911790556105358383836120d6565b7f000000000000000000000000000000000000000000000000000000000000000081565b60036020526000908152604090205460ff8082169161010081048216916201000082041690630100000090046001600160a01b031684565b7f000000000000000000000000000000000000000000000000000000000000000081565b60026020526000908152604090205481565b6118836119c2565b6001600160a01b0316611894611493565b6001600160a01b0316146118ba5760405162461bcd60e51b81526004016104b6906135a2565b6001600160a01b0381166118e05760405162461bcd60e51b81526004016104b6906133ef565b6118e981612079565b50565b6118f46119c2565b6001600160a01b0316611905611493565b6001600160a01b03161461192b5760405162461bcd60e51b81526004016104b6906135a2565b6000848152600660209081526040808320868452825280832085845290915290819020805460ff191683151517905551829085907fef9cb81c267f8b2d37b689fbba839e53406929430fe3fb008c6ad81ccad637a79061198e9087908690613717565b60405180910390a350505050565b600760209081526000938452604080852082529284528284209052825290205460ff1681565b3390565b60a081015160c0820151610100830151600092839290916001600160801b031615611a3857505060008481526005602090815260408083206101008701516001600160801b03908116855290835292819020815180830190925254808416808352600160801b90910490931691018190525b909590945092505050565b600081602001518015611a535750835b15611b22576000868152600760209081526040808320888452825280832086845290915290205460ff16158015611b1557506101408201516040516331a9108f60e11b81526001600160a01b03808a16921690636352211e90611aba90879060040161370e565b60206040518083038186803b158015611ad257600080fd5b505afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906129ea565b6001600160a01b0316145b15611b2257506001611b26565b5060005b9695505050505050565b6000858152600460208181526040808420878552825292839020835161016081018552815460ff8082161515835261010080830482161515958401959095526201000082048116151596830187905263010000008204161515606083015261ffff64010000000082041660808301526001600160801b036601000000000000909104811660a0830152600183015480821660c0840152600160801b9004811660e08301526002830154169281019290925260038101546001600160a01b0390811661012084015292015490911661014082015290611c205760405162461bcd60e51b81526004016104b690613520565b805115611c585760608701516001600160a01b03163314611c535760405162461bcd60e51b81526004016104b69061360e565b611d12565b60405163e327a6af60e01b81526001600160a01b037f0000000000000000000000000000000000000000000000000000000000000000169063e327a6af90611ca690339089906004016130c6565b60206040518083038186803b158015611cbe57600080fd5b505afa158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612c05565b611d125760405162461bcd60e51b81526004016104b69061364f565b806060015115611d4257611d2585612111565b15611d425760405162461bcd60e51b81526004016104b6906134a3565b611d58888789602001518a60400151898961215d565b6000868152600660209081526040808320888452825280832087845290915290205460ff16610bce57600080611d8e88846119c6565b915091506000611da28b8a89898989611a43565b90508015611dd95760008981526007602090815260408083208a845282528083208884529091528120805460ff1916600117905592505b6001600160801b03821615611e7d57816001600160801b03168460e001516001600160801b031610611e1d5760405162461bcd60e51b81526004016104b6906134e9565b60008981526004602090815260408083208a845290915290206001018054600160801b90046001600160801b0316906010611e57836137dc565b91906101000a8154816001600160801b0302191690836001600160801b03160217905550505b60008981526006602090815260408083208b845282528083208a84529091529020805460ff191660011790556001600160801b03831615611ecd57611ecd8b8486610120015187608001516121dd565b5050505050505050505050565b6000611ee5826123c2565b5190505b919050565b6000828211611f0f5760405162461bcd60e51b81526004016104b6906136bd565b83611f1957600193505b8383108015611f285750838211155b15611f85576000838503600a0a808781611f5257634e487b7160e01b600052601260045260246000fd5b04029050808603838603600a0a8181611f7b57634e487b7160e01b600052601260045260246000fd5b0492505050611fa5565b838310158015611f955750838210155b15611fa257506000611fa5565b50835b949350505050565b81837f3f34f47781ab6f3fa29c909636de45620ed1597a081c10d3a045b61b7732cdc3836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61012001518c610140015160405161201a9a99989796959493929190613214565b60405180910390a3505050565b817f06bd866e6c1212d5d4c570e6458bbae1464014c02470ab0428f6d4c59bb4a576826060015183600001518460200151856040015160405161206d949392919061309a565b60405180910390a25050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81837f73c463f8e8862fa2e98930fc2bd170a2d47fca483c95958e9b6a8e220d6fcbbf8360000151846020015160405161201a9291906136f4565b6000816113c514806121245750816113c4145b806121305750816113c3145b8061213c5750816113c2145b806121485750816113c1145b1561215557506001611ee9565b506000919050565b600082815260026020526040812054906121888261217a81611eda565b8860ff168860ff16876124f5565b600085815260026020526040908190208290555190915084906001600160a01b038a16907f7b3627b3cb0ce8d0f12335018da9ac2567717dceb5dadb53c7c7b3bb382d14a99061115d908b9087908790613735565b6001600160801b0383166121f057610616565b60008061ffff831615612233578261ffff16856001600160801b03168161222757634e487b7160e01b600052601260045260246000fd5b04915050808403612236565b50835b6001600160801b03811615612309576040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906122b59089907f000000000000000000000000000000000000000000000000000000000000000090869060040161306e565b602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123079190612c05565b505b6001600160801b038216156123ba576040516323b872dd60e01b81526001600160a01b037f000000000000000000000000000000000000000000000000000000000000000016906323b872dd906123689089908890879060040161306e565b602060405180830381600087803b15801561238257600080fd5b505af1158015612396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117429190612c05565b505050505050565b6060816123e757506040805180820190915260018152600360fc1b6020820152611ee9565b8160005b811561241157806123fb81613803565b915061240a9050600a836137b1565b91506123eb565b60008167ffffffffffffffff81111561243a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612464576020820181803683370190505b5090505b8415611fa5576124796001836137c5565b9150612486600a8661381e565b612491906030613799565b60f81b8183815181106124b457634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506124ee600a866137b1565b9450612468565b60008383116125165760405162461bcd60e51b81526004016104b6906136bd565b600019848403600a0a01808311156125405760405162461bcd60e51b81526004016104b690613686565b60001985850301600a0a8084101561256a5760405162461bcd60e51b81526004016104b6906135d7565b8761257457600197505b868610801561258257508685105b156125ee576000868803600a0a808a816125ac57634e487b7160e01b600052601260045260246000fd5b04029050858803600a0a85810290600090808c816125da57634e487b7160e01b600052601260045260246000fd5b04028b0391909201019350610c5492505050565b8686101580156125fe5750868510155b1561261557505050838203600a0a85028101610c54565b86861080156126245750868510155b15612662576000868603600a0a878903600a0a8a8161265357634e487b7160e01b600052601260045260246000fd5b040285019350610c5492505050565b50959695505050505050565b604080516060810182526000808252602082018190529181019190915290565b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b8035611ee981613874565b600082601f830112612705578081fd5b8135602061271a61271583613775565b61374b565b8281528181019085830183850287018401881015612736578586fd5b855b8581101561275d57813561274b81613889565b84529284019290840190600101612738565b5090979650505050505050565b600082601f83011261277a578081fd5b8135602061278a61271583613775565b82815281810190858301838502870184018810156127a6578586fd5b855b8581101561275d578135845292840192908401906001016127a8565b8035611ee981613889565b6000604082840312156127e0578081fd5b6040516040810181811067ffffffffffffffff821117156128035761280361385e565b6040529050806128128361298d565b81526128206020840161298d565b60208201525092915050565b60006080828403121561283d578081fd5b6040516080810181811067ffffffffffffffff821117156128605761286061385e565b604052905080823561287181613889565b815261287f602084016129b6565b6020820152612890604084016129b6565b604082015260608301356128a381613874565b6060919091015292915050565b60006101608083850312156128c3578182fd5b6128cc8161374b565b9150506128d8826127c4565b81526128e6602083016127c4565b60208201526128f7604083016127c4565b6040820152612908606083016127c4565b6060820152612919608083016129a4565b608082015261292a60a0830161298d565b60a082015261293b60c0830161298d565b60c082015261294c60e0830161298d565b60e082015261010061295f81840161298d565b908201526101206129718382016126ea565b908201526101406129838382016126ea565b9082015292915050565b80356001600160801b0381168114611ee957600080fd5b803561ffff81168114611ee957600080fd5b803560ff81168114611ee957600080fd5b6000602082840312156129d8578081fd5b81356129e381613874565b9392505050565b6000602082840312156129fb578081fd5b81516129e381613874565b60008060008060008060c08789031215612a1e578182fd5b612a27876126ea565b955060208701359450604087013567ffffffffffffffff80821115612a4a578384fd5b612a568a838b0161276a565b95506060890135915080821115612a6b578384fd5b612a778a838b0161276a565b94506080890135915080821115612a8c578384fd5b612a988a838b016126f5565b935060a0890135915080821115612aad578283fd5b50612aba89828a0161276a565b9150509295509295509295565b60008060008060008060c08789031215612adf578384fd5b8635612aea81613874565b95506020870135945060408701359350606087013592506080870135612b0f81613889565b8092505060a087013590509295509295509295565b60008060408385031215612b36578182fd5b823567ffffffffffffffff80821115612b4d578384fd5b612b598683870161276a565b9350602091508185013581811115612b6f578384fd5b85019050601f81018613612b81578283fd5b8035612b8f61271582613775565b818152838101908385016080808502860187018b1015612bad578788fd5b8795505b84861015612bd957612bc38b8361282c565b8452600195909501949286019290810190612bb1565b5096999098509650505050505050565b600060208284031215612bfa578081fd5b81356129e381613889565b600060208284031215612c16578081fd5b81516129e381613889565b600060208284031215612c32578081fd5b5035919050565b600080600060608486031215612c4d578081fd5b8335925060208085013567ffffffffffffffff80821115612c6c578384fd5b612c788883890161276a565b9450604091508187013581811115612c8e578485fd5b87019050601f81018813612ca0578384fd5b8035612cae61271582613775565b81815284810190838601858402850187018c1015612cca578788fd5b8794505b83851015612cf457612ce08c826127cf565b835260019490940193918601918501612cce565b508096505050505050509250925092565b600080600060608486031215612d19578081fd5b8335925060208085013567ffffffffffffffff80821115612d38578384fd5b612d448883890161276a565b94506040870135915080821115612d59578384fd5b508501601f81018713612d6a578283fd5b8035612d7861271582613775565b81815283810190838501610160808502860187018c1015612d97578788fd5b8795505b84861015612dc357612dad8c836128b0565b8452600195909501949286019290810190612d9b565b505080955050505050509250925092565b60008060408385031215612de6578182fd5b823591506020830135612df881613889565b809150509250929050565b60008060a08385031215612e15578182fd5b82359150612e26846020850161282c565b90509250929050565b60008060408385031215612e41578182fd5b50508035926020909101359150565b600080600060608486031215612e64578081fd5b8335925060208401359150604084013567ffffffffffffffff811115612e88578182fd5b612e948682870161276a565b9150509250925092565b600080600060608486031215612eb2578081fd5b83359250602084013591506040840135612ecb81613889565b809150509250925092565b600080600060808486031215612eea578081fd5b8335925060208401359150612f0285604086016127cf565b90509250925092565b60008060006101a08486031215612f20578081fd5b8335925060208401359150612f0285604086016128b0565b600080600060608486031215612f4c578081fd5b505081359360208301359350604090920135919050565b60008060008060808587031215612f78578182fd5b8435935060208501359250604085013591506060850135612f9881613889565b939692955090935050565b60008060008060808587031215612fb8578182fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613034578151805115158852838101516001600160801b03908116858a0152604091820151169088015260609096019590820190600101612ff4565b509495945050505050565b15159052565b6001600160801b03169052565b61ffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529190921660208201526001600160801b03909116604082015260600190565b6001600160a01b03949094168452911515602084015260ff908116604084015216606082015260800190565b6001600160a01b03929092168252602082015260400190565b6040808252835182820181905260009190606090818501906020808901865b838110156131ea57815161311386825161303f565b838101516131238588018261303f565b50878101516131348988018261303f565b50868101516131458888018261303f565b5060808082015161315882890182613052565b505060a08082015161316c82890182613045565b505060c08082015161318082890182613045565b505060e08082015161319482890182613045565b5050610100808201516131a982890182613045565b5050610120808201516131be82890182612fd4565b505061014090810151906131d487820183612fd4565b50506101609490940193908201906001016130fe565b505086830390870152506131fe8187612fe1565b979650505050505050565b901515815260200190565b8a1515815289151560208201528815156040820152871515606082015261ffff871660808201526001600160801b0386811660a083015285811660c0830152841660e08201526001600160a01b038316610100820152610140810161327d610120830184612fd4565b9b9a5050505050505050505050565b8b151581528a151560208201528915156040820152881515606082015261ffff881660808201526001600160801b0387811660a0830152861660c082015261016081016132dc60e0830187613045565b6132ea610100830186613045565b6132f8610120830185612fd4565b613306610140830184612fd4565b9c9b505050505050505050505050565b931515845260ff9283166020850152911660408301526001600160a01b0316606082015260800190565b60208082526021908201527f5265636970656e7420616c72656164792068617320746869732076617269616e6040820152601d60fa1b606082015260800190565b6020808252601f908201527f53656e64657220646f65736e2774206f776e20746869732076617269616e7400604082015260600190565b6020808252601d908201527f457874656e73696f6e2073746f72616765206973206e6f74206c697665000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600e908201527f4e6f7420617574686f7269736564000000000000000000000000000000000000604082015260600190565b6020808252601a908201527f5468697320657874656e73696f6e2069732064697361626c6564000000000000604082015260600190565b60208082526026908201527f546869732076617269616e74206973206e6f7420666f72207370656369616c20604082015265706978656c7360d01b606082015260800190565b6020808252600f908201527f536f7272792c20736f6c64206f75740000000000000000000000000000000000604082015260600190565b60208082526018908201527f546869732076617269616e742069732064697361626c65640000000000000000604082015260600190565b6020808252602b908201527f596f75206e65656420746f2064657461636820746869732076617269616e742060408201526a3a37903a3930b739b332b960a91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f5265706c6163652076616c756520697320746f6f20736d616c6c000000000000604082015260600190565b60208082526021908201527f4e6f742061757468726f69736564202d20496e76616c6964206f70657261746f6040820152603960f91b606082015260800190565b6020808252601e908201527f4e6f7420617574686f7269736564202d20496e76616c6964206f776e65720000604082015260600190565b60208082526018908201527f5265706c6163652076616c756520697320746f6f206269670000000000000000604082015260600190565b60208082526013908201527f496e64657865732061726520696e76616c696400000000000000000000000000604082015260600190565b6001600160801b0392831681529116602082015260400190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561376d5761376d61385e565b604052919050565b600067ffffffffffffffff82111561378f5761378f61385e565b5060209081020190565b600082198211156137ac576137ac613832565b500190565b6000826137c0576137c0613848565b500490565b6000828210156137d7576137d7613832565b500390565b60006001600160801b03808316818114156137f9576137f9613832565b6001019392505050565b600060001982141561381757613817613832565b5060010190565b60008261382d5761382d613848565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146118e957600080fd5b80151581146118e957600080fdfea264697066735822122018da7cc083de02b30a81e13601f7aae3bc1ee11df3dcecc5656205421b1d8b6b64736f6c63430008000033000000000000000000000000f011dac919a751dff6343553aa031b9f8e95300f000000000000000000000000c8d797d2bdb88ea365b04bdbd43f5a748723c2920000000000000000000000002228b2a09ed31aedbf28172e79dc89e681504e98
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101e55760003560e01c806382dd83231161010f578063d11f65a9116100a2578063e7c12efd11610071578063e7c12efd14610413578063f2fde38b14610426578063f3c95eb114610439578063f5d3c03a1461044c576101e5565b8063d11f65a9146103cd578063d392eab1146103e0578063db85d59c146103e8578063e0e2b2b31461040b576101e5565b8063a5af8b2d116100de578063a5af8b2d14610389578063b816aa8a14610391578063b8f7a665146103b2578063c886049d146103ba576101e5565b806382dd83231461033b5780638da5cb5b1461034e5780638ebf86b014610363578063a3e376d914610376576101e5565b80634149e4d3116101875780636d096c31116101565780636d096c31146102e3578063715018a6146102f6578063782091fc146102fe5780637f13816614610328576101e5565b80634149e4d31461029757806353d2df80146102aa578063670c01ce146102bd5780636b74266a146102d0576101e5565b80630f484a84116101c35780630f484a84146102305780631ea9ddd61461025057806320eb5f6514610263578063392225c914610284576101e5565b806305b07032146101ea5780630700037d146102085780630e0098f01461021b575b600080fd5b6101f261045f565b6040516101ff919061370e565b60405180910390f35b6101f26102163660046129c7565b610465565b61022e610229366004612b24565b610477565b005b61024361023e366004612f38565b61053a565b6040516101ff9190613209565b61022e61025e366004612c39565b610560565b610276610271366004612a06565b61061c565b6040516101ff9291906130df565b61022e610292366004612a06565b610a68565b6101f26102a5366004612e2f565b610bd8565b61022e6102b8366004612d05565b610c5d565b61022e6102cb366004612f0b565b610d13565b61022e6102de366004612fa3565b610ec1565b61022e6102f1366004612dd4565b61116f565b61022e611222565b61031161030c366004612e2f565b61126d565b6040516101ff9b9a9998979695949392919061328c565b61022e610336366004612e9e565b611303565b61022e610349366004612be9565b611436565b610356611493565b6040516101ff919061305a565b6101f2610371366004612e50565b6114a2565b61022e610384366004612e03565b611535565b610356611631565b6103a461039f366004612e2f565b611655565b6040516101ff9291906136f4565b610243611686565b61022e6103c8366004612ac7565b611696565b61022e6103db366004612ed6565b61174b565b6103566117e9565b6103fb6103f6366004612c21565b61180d565b6040516101ff9493929190613316565b610356611845565b6101f2610421366004612c21565b611869565b61022e6104343660046129c7565b61187b565b61022e610447366004612f63565b6118ec565b61024361045a366004612f38565b61199c565b60015481565b60086020526000908152604090205481565b61047f6119c2565b6001600160a01b0316610490611493565b6001600160a01b0316146104bf5760405162461bcd60e51b81526004016104b6906135a2565b60405180910390fd5b60005b8251811015610535576105238382815181106104ee57634e487b7160e01b600052603260045260246000fd5b602002602001015183838151811061051657634e487b7160e01b600052603260045260246000fd5b6020026020010151611535565b8061052d81613803565b9150506104c2565b505050565b600660209081526000938452604080852082529284528284209052825290205460ff1681565b6105686119c2565b6001600160a01b0316610579611493565b6001600160a01b03161461059f5760405162461bcd60e51b81526004016104b6906135a2565b60005b825181101561061657610604848483815181106105cf57634e487b7160e01b600052603260045260246000fd5b60200260200101518484815181106105f757634e487b7160e01b600052603260045260246000fd5b602002602001015161174b565b8061060e81613803565b9150506105a2565b50505050565b6060806000855167ffffffffffffffff81111561064957634e487b7160e01b600052604160045260246000fd5b60405190808252806020026020018201604052801561068257816020015b61066f61266e565b8152602001906001900390816106675790505b5090506000865167ffffffffffffffff8111156106af57634e487b7160e01b600052604160045260246000fd5b6040519080825280602002602001820160405280156106e857816020015b6106d561268e565b8152602001906001900390816106cd5790505b509050898960005b8951811015610a555760008a828151811061071b57634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008c838151811061074757634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008b848151811061077357634e487b7160e01b600052603260045260246000fd5b6020026020010151905060008b858151811061079f57634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516000888152600480845260408083208984528552808320815161016081018352815460ff80821615158352610100808304821615159984019990995262010000820481161515948301949094526301000000810490931615156060820152640100000000830461ffff16608082015266010000000000009092046001600160801b0390811660a0840152600182015480821660c0850152600160801b9004811660e08401526002820154169582019590955260038501546001600160a01b0390811661012083015294909101549093166101408401529092508061088f89846119c6565b91509150818c89815181106108b457634e487b7160e01b600052603260045260246000fd5b6020026020010151602001906001600160801b031690816001600160801b031681525050808c89815181106108f957634e487b7160e01b600052603260045260246000fd5b6020026020010151604001906001600160801b031690816001600160801b031681525050600061092d8b8b8a898989611a43565b905080156109725760008d8a8151811061095757634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160801b039092169101525b60008a81526006602090815260408083208a845282528083208b845290915290205460ff1615610a0e5760018d8a815181106109be57634e487b7160e01b600052603260045260246000fd5b602090810291909101015190151590528c516000908e908b9081106109f357634e487b7160e01b600052603260045260246000fd5b6020908102919091018101516001600160801b039092169101525b838c8a81518110610a2f57634e487b7160e01b600052603260045260246000fd5b602002602001018190525050505050505050508080610a4d90613803565b9150506106f0565b50919b929a509198505050505050505050565b600054600160a01b900460ff16610a915760405162461bcd60e51b81526004016104b6906133b8565b6000858152600360209081526040918290208251608081018452905460ff80821615158084526101008304821694840194909452620100008204169382019390935263010000009092046001600160a01b03166060830152610b055760405162461bcd60e51b81526004016104b69061346c565b60005b8551811015610bce57610bbc888389898581518110610b3757634e487b7160e01b600052603260045260246000fd5b6020026020010151898681518110610b5f57634e487b7160e01b600052603260045260246000fd5b6020026020010151898781518110610b8757634e487b7160e01b600052603260045260246000fd5b6020026020010151898881518110610baf57634e487b7160e01b600052603260045260246000fd5b6020026020010151611b30565b80610bc681613803565b915050610b08565b5050505050505050565b60008281526003602090815260408083208151608081018352905460ff8082161515835261010082048116838601526201000082041682840152630100000090046001600160a01b031660608201528484526002909252822054610c5481610c3f81611eda565b846020015160ff16856040015160ff16611eee565b95945050505050565b610c656119c2565b6001600160a01b0316610c76611493565b6001600160a01b031614610c9c5760405162461bcd60e51b81526004016104b6906135a2565b60005b825181101561061657610d0184848381518110610ccc57634e487b7160e01b600052603260045260246000fd5b6020026020010151848481518110610cf457634e487b7160e01b600052603260045260246000fd5b6020026020010151610d13565b80610d0b81613803565b915050610c9f565b610d1b6119c2565b6001600160a01b0316610d2c611493565b6001600160a01b031614610d525760405162461bcd60e51b81526004016104b6906135a2565b60008381526004602081815260408084208685528252928390208451815492860151948601516060870151608088015160a089015160ff199096169315159390931761ff00191661010097151588021762ff0000191662010000921515929092029190911763ff00000019166301000000911515919091021765ffff00000000191664010000000061ffff909216919091021775ffffffffffffffffffffffffffffffff000000000000191666010000000000006001600160801b039384160217815560c085015160018201805460e08801516fffffffffffffffffffffffffffffffff19918216938616939093178516600160801b938616939093029290921790559385015160028201805490951692169190911790925561012083015160038301805473ffffffffffffffffffffffffffffffffffffffff199081166001600160a01b03938416179091556101408501519390920180549092169216919091179055610535838383611fad565b600054600160a01b900460ff16610eea5760405162461bcd60e51b81526004016104b6906133b8565b6000848152600360209081526040918290208251608081018452905460ff80821615158084526101008304821694840194909452620100008204169382019390935263010000009092046001600160a01b03166060830152610f5e5760405162461bcd60e51b81526004016104b69061346c565b60608101516001600160a01b0316331461102c5760405163e327a6af60e01b81526001600160a01b037f0000000000000000000000002228b2a09ed31aedbf28172e79dc89e681504e98169063e327a6af90610fc090339087906004016130c6565b60206040518083038186803b158015610fd857600080fd5b505afa158015610fec573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906110109190612c05565b61102c5760405162461bcd60e51b81526004016104b690613435565b6000858152600660209081526040808320868452825280832087845290915290205460ff168061106e5760405162461bcd60e51b81526004016104b690613381565b600061107a8786610bd8565b90508581141561109c5760405162461bcd60e51b81526004016104b690613557565b6000878152600660209081526040808320878452825280832089845290915290205460ff1680156110df5760405162461bcd60e51b81526004016104b690613340565b60008881526006602090815260408083208984528083528184208b85528352818420805460ff199081169091558985529083528184208b8552909252918290208054909116600117905551879089907f4a5612ed2e39c4407b0263684c276409ad17c9e57517026a1ef39ff54675fdfb9061115d908a908a90613727565b60405180910390a35050505050505050565b6111776119c2565b6001600160a01b0316611188611493565b6001600160a01b0316146111ae5760405162461bcd60e51b81526004016104b6906135a2565b600082815260036020908152604091829020805460ff19168415151790819055825160808101845260ff8083161515825261010083048116938201939093526201000082049092169282019290925263010000009091046001600160a01b0316606082015261121e908390612027565b5050565b61122a6119c2565b6001600160a01b031661123b611493565b6001600160a01b0316146112615760405162461bcd60e51b81526004016104b6906135a2565b61126b6000612079565b565b600460208181526000938452604080852090915291835291208054600182015460028301546003840154939094015460ff808416956101008504821695620100008604831695630100000081049093169461ffff640100000000850416946001600160801b03660100000000000090950485169482811694600160801b9093048116939216916001600160a01b0390811691168b565b61130b6119c2565b6001600160a01b031661131c611493565b6001600160a01b0316146113425760405162461bcd60e51b81526004016104b6906135a2565b6000838152600460208181526040808420868552825292839020805462ff000019166201000086151581029190911780835585516101608101875260ff80831615158252610100808404821615159683019690965292820483161515968101969096526301000000810490911615156060860152640100000000810461ffff166080860152660100000000000090046001600160801b0390811660a0860152600182015480821660c0870152600160801b9004811660e08601526002820154169184019190915260038101546001600160a01b03908116610120850152910154166101408201526105359084908490611fad565b61143e6119c2565b6001600160a01b031661144f611493565b6001600160a01b0316146114755760405162461bcd60e51b81526004016104b6906135a2565b60008054911515600160a01b0260ff60a01b19909216919091179055565b6000546001600160a01b031690565b60008060005b835181101561152c5760008482815181106114d357634e487b7160e01b600052603260045260246000fd5b60209081029190910181015160008981526006835260408082208a83528452808220838352909352919091205490915060ff1615611519578261151581613803565b9350505b508061152481613803565b9150506114a8565b50949350505050565b61153d6119c2565b6001600160a01b031661154e611493565b6001600160a01b0316146115745760405162461bcd60e51b81526004016104b6906135a2565b806020015160ff16816040015160ff16116115a15760405162461bcd60e51b81526004016104b6906136bd565b600082815260036020908152604091829020835181549285015193850151606086015160ff199094169115159190911761ff00191661010060ff958616021762ff000019166201000094909116939093029290921776ffffffffffffffffffffffffffffffffffffffff000000191663010000006001600160a01b039092169190910217905561121e8282612027565b7f000000000000000000000000f011dac919a751dff6343553aa031b9f8e95300f81565b60056020908152600092835260408084209091529082529020546001600160801b0380821691600160801b90041682565b600054600160a01b900460ff1681565b600054600160a01b900460ff166116bf5760405162461bcd60e51b81526004016104b6906133b8565b6000858152600360209081526040918290208251608081018452905460ff80821615158084526101008304821694840194909452620100008204169382019390935263010000009092046001600160a01b031660608301526117335760405162461bcd60e51b81526004016104b69061346c565b61174287828888888888611b30565b50505050505050565b6117536119c2565b6001600160a01b0316611764611493565b6001600160a01b03161461178a5760405162461bcd60e51b81526004016104b6906135a2565b6000838152600560209081526040808320858452825290912082518154928401516fffffffffffffffffffffffffffffffff199093166001600160801b03918216178116600160801b91909316029190911790556105358383836120d6565b7f000000000000000000000000c8d797d2bdb88ea365b04bdbd43f5a748723c29281565b60036020526000908152604090205460ff8082169161010081048216916201000082041690630100000090046001600160a01b031684565b7f0000000000000000000000002228b2a09ed31aedbf28172e79dc89e681504e9881565b60026020526000908152604090205481565b6118836119c2565b6001600160a01b0316611894611493565b6001600160a01b0316146118ba5760405162461bcd60e51b81526004016104b6906135a2565b6001600160a01b0381166118e05760405162461bcd60e51b81526004016104b6906133ef565b6118e981612079565b50565b6118f46119c2565b6001600160a01b0316611905611493565b6001600160a01b03161461192b5760405162461bcd60e51b81526004016104b6906135a2565b6000848152600660209081526040808320868452825280832085845290915290819020805460ff191683151517905551829085907fef9cb81c267f8b2d37b689fbba839e53406929430fe3fb008c6ad81ccad637a79061198e9087908690613717565b60405180910390a350505050565b600760209081526000938452604080852082529284528284209052825290205460ff1681565b3390565b60a081015160c0820151610100830151600092839290916001600160801b031615611a3857505060008481526005602090815260408083206101008701516001600160801b03908116855290835292819020815180830190925254808416808352600160801b90910490931691018190525b909590945092505050565b600081602001518015611a535750835b15611b22576000868152600760209081526040808320888452825280832086845290915290205460ff16158015611b1557506101408201516040516331a9108f60e11b81526001600160a01b03808a16921690636352211e90611aba90879060040161370e565b60206040518083038186803b158015611ad257600080fd5b505afa158015611ae6573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611b0a91906129ea565b6001600160a01b0316145b15611b2257506001611b26565b5060005b9695505050505050565b6000858152600460208181526040808420878552825292839020835161016081018552815460ff8082161515835261010080830482161515958401959095526201000082048116151596830187905263010000008204161515606083015261ffff64010000000082041660808301526001600160801b036601000000000000909104811660a0830152600183015480821660c0840152600160801b9004811660e08301526002830154169281019290925260038101546001600160a01b0390811661012084015292015490911661014082015290611c205760405162461bcd60e51b81526004016104b690613520565b805115611c585760608701516001600160a01b03163314611c535760405162461bcd60e51b81526004016104b69061360e565b611d12565b60405163e327a6af60e01b81526001600160a01b037f0000000000000000000000002228b2a09ed31aedbf28172e79dc89e681504e98169063e327a6af90611ca690339089906004016130c6565b60206040518083038186803b158015611cbe57600080fd5b505afa158015611cd2573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611cf69190612c05565b611d125760405162461bcd60e51b81526004016104b69061364f565b806060015115611d4257611d2585612111565b15611d425760405162461bcd60e51b81526004016104b6906134a3565b611d58888789602001518a60400151898961215d565b6000868152600660209081526040808320888452825280832087845290915290205460ff16610bce57600080611d8e88846119c6565b915091506000611da28b8a89898989611a43565b90508015611dd95760008981526007602090815260408083208a845282528083208884529091528120805460ff1916600117905592505b6001600160801b03821615611e7d57816001600160801b03168460e001516001600160801b031610611e1d5760405162461bcd60e51b81526004016104b6906134e9565b60008981526004602090815260408083208a845290915290206001018054600160801b90046001600160801b0316906010611e57836137dc565b91906101000a8154816001600160801b0302191690836001600160801b03160217905550505b60008981526006602090815260408083208b845282528083208a84529091529020805460ff191660011790556001600160801b03831615611ecd57611ecd8b8486610120015187608001516121dd565b5050505050505050505050565b6000611ee5826123c2565b5190505b919050565b6000828211611f0f5760405162461bcd60e51b81526004016104b6906136bd565b83611f1957600193505b8383108015611f285750838211155b15611f85576000838503600a0a808781611f5257634e487b7160e01b600052601260045260246000fd5b04029050808603838603600a0a8181611f7b57634e487b7160e01b600052601260045260246000fd5b0492505050611fa5565b838310158015611f955750838210155b15611fa257506000611fa5565b50835b949350505050565b81837f3f34f47781ab6f3fa29c909636de45620ed1597a081c10d3a045b61b7732cdc3836000015184602001518560400151866060015187608001518860a001518960c001518a60e001518b61012001518c610140015160405161201a9a99989796959493929190613214565b60405180910390a3505050565b817f06bd866e6c1212d5d4c570e6458bbae1464014c02470ab0428f6d4c59bb4a576826060015183600001518460200151856040015160405161206d949392919061309a565b60405180910390a25050565b600080546001600160a01b0383811673ffffffffffffffffffffffffffffffffffffffff19831681178455604051919092169283917f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e09190a35050565b81837f73c463f8e8862fa2e98930fc2bd170a2d47fca483c95958e9b6a8e220d6fcbbf8360000151846020015160405161201a9291906136f4565b6000816113c514806121245750816113c4145b806121305750816113c3145b8061213c5750816113c2145b806121485750816113c1145b1561215557506001611ee9565b506000919050565b600082815260026020526040812054906121888261217a81611eda565b8860ff168860ff16876124f5565b600085815260026020526040908190208290555190915084906001600160a01b038a16907f7b3627b3cb0ce8d0f12335018da9ac2567717dceb5dadb53c7c7b3bb382d14a99061115d908b9087908790613735565b6001600160801b0383166121f057610616565b60008061ffff831615612233578261ffff16856001600160801b03168161222757634e487b7160e01b600052601260045260246000fd5b04915050808403612236565b50835b6001600160801b03811615612309576040516323b872dd60e01b81526001600160a01b037f000000000000000000000000f011dac919a751dff6343553aa031b9f8e95300f16906323b872dd906122b59089907f000000000000000000000000c8d797d2bdb88ea365b04bdbd43f5a748723c29290869060040161306e565b602060405180830381600087803b1580156122cf57600080fd5b505af11580156122e3573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906123079190612c05565b505b6001600160801b038216156123ba576040516323b872dd60e01b81526001600160a01b037f000000000000000000000000f011dac919a751dff6343553aa031b9f8e95300f16906323b872dd906123689089908890879060040161306e565b602060405180830381600087803b15801561238257600080fd5b505af1158015612396573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117429190612c05565b505050505050565b6060816123e757506040805180820190915260018152600360fc1b6020820152611ee9565b8160005b811561241157806123fb81613803565b915061240a9050600a836137b1565b91506123eb565b60008167ffffffffffffffff81111561243a57634e487b7160e01b600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612464576020820181803683370190505b5090505b8415611fa5576124796001836137c5565b9150612486600a8661381e565b612491906030613799565b60f81b8183815181106124b457634e487b7160e01b600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a9053506124ee600a866137b1565b9450612468565b60008383116125165760405162461bcd60e51b81526004016104b6906136bd565b600019848403600a0a01808311156125405760405162461bcd60e51b81526004016104b690613686565b60001985850301600a0a8084101561256a5760405162461bcd60e51b81526004016104b6906135d7565b8761257457600197505b868610801561258257508685105b156125ee576000868803600a0a808a816125ac57634e487b7160e01b600052601260045260246000fd5b04029050858803600a0a85810290600090808c816125da57634e487b7160e01b600052601260045260246000fd5b04028b0391909201019350610c5492505050565b8686101580156125fe5750868510155b1561261557505050838203600a0a85028101610c54565b86861080156126245750868510155b15612662576000868603600a0a878903600a0a8a8161265357634e487b7160e01b600052601260045260246000fd5b040285019350610c5492505050565b50959695505050505050565b604080516060810182526000808252602082018190529181019190915290565b6040805161016081018252600080825260208201819052918101829052606081018290526080810182905260a0810182905260c0810182905260e081018290526101008101829052610120810182905261014081019190915290565b8035611ee981613874565b600082601f830112612705578081fd5b8135602061271a61271583613775565b61374b565b8281528181019085830183850287018401881015612736578586fd5b855b8581101561275d57813561274b81613889565b84529284019290840190600101612738565b5090979650505050505050565b600082601f83011261277a578081fd5b8135602061278a61271583613775565b82815281810190858301838502870184018810156127a6578586fd5b855b8581101561275d578135845292840192908401906001016127a8565b8035611ee981613889565b6000604082840312156127e0578081fd5b6040516040810181811067ffffffffffffffff821117156128035761280361385e565b6040529050806128128361298d565b81526128206020840161298d565b60208201525092915050565b60006080828403121561283d578081fd5b6040516080810181811067ffffffffffffffff821117156128605761286061385e565b604052905080823561287181613889565b815261287f602084016129b6565b6020820152612890604084016129b6565b604082015260608301356128a381613874565b6060919091015292915050565b60006101608083850312156128c3578182fd5b6128cc8161374b565b9150506128d8826127c4565b81526128e6602083016127c4565b60208201526128f7604083016127c4565b6040820152612908606083016127c4565b6060820152612919608083016129a4565b608082015261292a60a0830161298d565b60a082015261293b60c0830161298d565b60c082015261294c60e0830161298d565b60e082015261010061295f81840161298d565b908201526101206129718382016126ea565b908201526101406129838382016126ea565b9082015292915050565b80356001600160801b0381168114611ee957600080fd5b803561ffff81168114611ee957600080fd5b803560ff81168114611ee957600080fd5b6000602082840312156129d8578081fd5b81356129e381613874565b9392505050565b6000602082840312156129fb578081fd5b81516129e381613874565b60008060008060008060c08789031215612a1e578182fd5b612a27876126ea565b955060208701359450604087013567ffffffffffffffff80821115612a4a578384fd5b612a568a838b0161276a565b95506060890135915080821115612a6b578384fd5b612a778a838b0161276a565b94506080890135915080821115612a8c578384fd5b612a988a838b016126f5565b935060a0890135915080821115612aad578283fd5b50612aba89828a0161276a565b9150509295509295509295565b60008060008060008060c08789031215612adf578384fd5b8635612aea81613874565b95506020870135945060408701359350606087013592506080870135612b0f81613889565b8092505060a087013590509295509295509295565b60008060408385031215612b36578182fd5b823567ffffffffffffffff80821115612b4d578384fd5b612b598683870161276a565b9350602091508185013581811115612b6f578384fd5b85019050601f81018613612b81578283fd5b8035612b8f61271582613775565b818152838101908385016080808502860187018b1015612bad578788fd5b8795505b84861015612bd957612bc38b8361282c565b8452600195909501949286019290810190612bb1565b5096999098509650505050505050565b600060208284031215612bfa578081fd5b81356129e381613889565b600060208284031215612c16578081fd5b81516129e381613889565b600060208284031215612c32578081fd5b5035919050565b600080600060608486031215612c4d578081fd5b8335925060208085013567ffffffffffffffff80821115612c6c578384fd5b612c788883890161276a565b9450604091508187013581811115612c8e578485fd5b87019050601f81018813612ca0578384fd5b8035612cae61271582613775565b81815284810190838601858402850187018c1015612cca578788fd5b8794505b83851015612cf457612ce08c826127cf565b835260019490940193918601918501612cce565b508096505050505050509250925092565b600080600060608486031215612d19578081fd5b8335925060208085013567ffffffffffffffff80821115612d38578384fd5b612d448883890161276a565b94506040870135915080821115612d59578384fd5b508501601f81018713612d6a578283fd5b8035612d7861271582613775565b81815283810190838501610160808502860187018c1015612d97578788fd5b8795505b84861015612dc357612dad8c836128b0565b8452600195909501949286019290810190612d9b565b505080955050505050509250925092565b60008060408385031215612de6578182fd5b823591506020830135612df881613889565b809150509250929050565b60008060a08385031215612e15578182fd5b82359150612e26846020850161282c565b90509250929050565b60008060408385031215612e41578182fd5b50508035926020909101359150565b600080600060608486031215612e64578081fd5b8335925060208401359150604084013567ffffffffffffffff811115612e88578182fd5b612e948682870161276a565b9150509250925092565b600080600060608486031215612eb2578081fd5b83359250602084013591506040840135612ecb81613889565b809150509250925092565b600080600060808486031215612eea578081fd5b8335925060208401359150612f0285604086016127cf565b90509250925092565b60008060006101a08486031215612f20578081fd5b8335925060208401359150612f0285604086016128b0565b600080600060608486031215612f4c578081fd5b505081359360208301359350604090920135919050565b60008060008060808587031215612f78578182fd5b8435935060208501359250604085013591506060850135612f9881613889565b939692955090935050565b60008060008060808587031215612fb8578182fd5b5050823594602084013594506040840135936060013592509050565b6001600160a01b03169052565b6000815180845260208085019450808401835b83811015613034578151805115158852838101516001600160801b03908116858a0152604091820151169088015260609096019590820190600101612ff4565b509495945050505050565b15159052565b6001600160801b03169052565b61ffff169052565b6001600160a01b0391909116815260200190565b6001600160a01b0393841681529190921660208201526001600160801b03909116604082015260600190565b6001600160a01b03949094168452911515602084015260ff908116604084015216606082015260800190565b6001600160a01b03929092168252602082015260400190565b6040808252835182820181905260009190606090818501906020808901865b838110156131ea57815161311386825161303f565b838101516131238588018261303f565b50878101516131348988018261303f565b50868101516131458888018261303f565b5060808082015161315882890182613052565b505060a08082015161316c82890182613045565b505060c08082015161318082890182613045565b505060e08082015161319482890182613045565b5050610100808201516131a982890182613045565b5050610120808201516131be82890182612fd4565b505061014090810151906131d487820183612fd4565b50506101609490940193908201906001016130fe565b505086830390870152506131fe8187612fe1565b979650505050505050565b901515815260200190565b8a1515815289151560208201528815156040820152871515606082015261ffff871660808201526001600160801b0386811660a083015285811660c0830152841660e08201526001600160a01b038316610100820152610140810161327d610120830184612fd4565b9b9a5050505050505050505050565b8b151581528a151560208201528915156040820152881515606082015261ffff881660808201526001600160801b0387811660a0830152861660c082015261016081016132dc60e0830187613045565b6132ea610100830186613045565b6132f8610120830185612fd4565b613306610140830184612fd4565b9c9b505050505050505050505050565b931515845260ff9283166020850152911660408301526001600160a01b0316606082015260800190565b60208082526021908201527f5265636970656e7420616c72656164792068617320746869732076617269616e6040820152601d60fa1b606082015260800190565b6020808252601f908201527f53656e64657220646f65736e2774206f776e20746869732076617269616e7400604082015260600190565b6020808252601d908201527f457874656e73696f6e2073746f72616765206973206e6f74206c697665000000604082015260600190565b60208082526026908201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160408201526564647265737360d01b606082015260800190565b6020808252600e908201527f4e6f7420617574686f7269736564000000000000000000000000000000000000604082015260600190565b6020808252601a908201527f5468697320657874656e73696f6e2069732064697361626c6564000000000000604082015260600190565b60208082526026908201527f546869732076617269616e74206973206e6f7420666f72207370656369616c20604082015265706978656c7360d01b606082015260800190565b6020808252600f908201527f536f7272792c20736f6c64206f75740000000000000000000000000000000000604082015260600190565b60208082526018908201527f546869732076617269616e742069732064697361626c65640000000000000000604082015260600190565b6020808252602b908201527f596f75206e65656420746f2064657461636820746869732076617269616e742060408201526a3a37903a3930b739b332b960a91b606082015260800190565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252601a908201527f5265706c6163652076616c756520697320746f6f20736d616c6c000000000000604082015260600190565b60208082526021908201527f4e6f742061757468726f69736564202d20496e76616c6964206f70657261746f6040820152603960f91b606082015260800190565b6020808252601e908201527f4e6f7420617574686f7269736564202d20496e76616c6964206f776e65720000604082015260600190565b60208082526018908201527f5265706c6163652076616c756520697320746f6f206269670000000000000000604082015260600190565b60208082526013908201527f496e64657865732061726520696e76616c696400000000000000000000000000604082015260600190565b6001600160801b0392831681529116602082015260400190565b90815260200190565b9182521515602082015260400190565b918252602082015260400190565b9283526020830191909152604082015260600190565b60405181810167ffffffffffffffff8111828210171561376d5761376d61385e565b604052919050565b600067ffffffffffffffff82111561378f5761378f61385e565b5060209081020190565b600082198211156137ac576137ac613832565b500190565b6000826137c0576137c0613848565b500490565b6000828210156137d7576137d7613832565b500390565b60006001600160801b03808316818114156137f9576137f9613832565b6001019392505050565b600060001982141561381757613817613832565b5060010190565b60008261382d5761382d613848565b500690565b634e487b7160e01b600052601160045260246000fd5b634e487b7160e01b600052601260045260246000fd5b634e487b7160e01b600052604160045260246000fd5b6001600160a01b03811681146118e957600080fd5b80151581146118e957600080fdfea264697066735822122018da7cc083de02b30a81e13601f7aae3bc1ee11df3dcecc5656205421b1d8b6b64736f6c63430008000033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000f011dac919a751dff6343553aa031b9f8e95300f000000000000000000000000c8d797d2bdb88ea365b04bdbd43f5a748723c2920000000000000000000000002228b2a09ed31aedbf28172e79dc89e681504e98
-----Decoded View---------------
Arg [0] : _INTAddress (address): 0xf011DaC919a751dfF6343553aA031B9f8E95300F
Arg [1] : _DAOAddress (address): 0xC8d797D2BDB88ea365B04bdbd43f5A748723C292
Arg [2] : _rewarderAddress (address): 0x2228b2a09ed31AEDBF28172e79Dc89E681504E98
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 000000000000000000000000f011dac919a751dff6343553aa031b9f8e95300f
Arg [1] : 000000000000000000000000c8d797d2bdb88ea365b04bdbd43f5a748723c292
Arg [2] : 0000000000000000000000002228b2a09ed31aedbf28172e79dc89e681504e98
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 35 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.