ETH Price: $2,687.58 (-2.03%)

Token

THREEFACE (3FACE)
 

Overview

Max Total Supply

3,711 3FACE

Holders

875

Market

Volume (24H)

N/A

Min Price (24H)

N/A

Max Price (24H)

N/A
Balance
1 3FACE
0x6e4660dcfc2c5b2981e16016a85672ed8593a895
Loading...
Loading
Loading...
Loading
Loading...
Loading

OVERVIEW

3FACE is an adaptive artwork by artist Ian Cheng, produced by Outland. There are only 4096 3FACE artworks available ever. Each 3FACE begins as a unique energy daemon. Once held, 3FACE reads your wallet's public transaction history and infers the inner forces that compose your personality. Then 3FACE begins to adapt itself to you… 3FACE is a new way to express the mess that is you. Forget trying to explain yourself as a coherent person. You are a composition of daemons ~ an immutable NATURE (the energetic daemon that deeply drives you), a semi-mutable NURTURE (the civilizing daemon that mediates Nature), and a mutable POSTURE (the managing daemon balancing your Nature and Nurture). 3FACE portrays your inner drama so you don’t have to. As the history and contents of your wallet change, update your 3FACE to express changes in your personality (and reveal the parts of you that are unchangeable). Join the adventure of a life lived with 3FACE.

# Exchange Pair Price  24H Volume % Volume

Contract Source Code Verified (Exact Match)

Contract Name:
THREEFACE

Compiler Version
v0.8.11+commit.d7f03943

Optimization Enabled:
Yes with 1000 runs

Other Settings:
default evmVersion
File 1 of 28 : 3FACE.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;
import './3FACEBase.sol';
import './3FACESplits.sol';
/**
* @title THREEFACE
* ▄▄▀▀▀▀█
* ▄▄▄▄▄▄ ▄▄▄▄▄▄▄▀▀ ▐▌
* ▄▄▄▄▓▀▀ █ ▄▀ ▄█▌
* ▄▀ ▄▄▀ █ ▄▄▄████
* ▓ ▄██████▀ █ ▄▄██████▀▀ ▄▄█▀▀▀▀▀▓
* ▄▄▄▄▄▄▄▄▄▄▄▄▄ ▓ ▓██ ▐▌ ███▀▀ ▄▄▀▀▀▀ ██
* ▄▄▀▀▀▀ █ ▐▌ ██▌ ▐ ██ ▄▀ ▄█
* ▐▀ ██ ▐▌ ██▌ █ ██ ▓ ▄▄▄█████▀▀▀▀
* ▐ ▄▄▄█████ ██ ▐ ██▌ ▐▌ ▐█▌ █ ▐██
* ▐▌ █████▀▀▀▀▀▀▀▀▌ ██ ▓ ██▌ ▐ ██ ▐▌ ▓█▌
* ▌ ▓█▌ ▌ ██ ▐▌ ▐██ █ ██ ▐▌ ██
* ▀▀▀▀ ▌ ▐██ ▐▌ ▐█▀ ▄▄▄▄ ▌ ▐█▌ ▐▌ ▐█▌ ▄▄▓▀▀▀▄
* ▐▌ ▐██ ▐ ▀▀▀▀▀ ▌ ▐▌ ▓█ ▐ ▀▀▀ ▄▌
* ▄▀ ▄█▌ █ ▄▄▄█ ▐ █▌ █ ▄▄▄▄▄▄▄████
* ▄▀ ▀▄ ▄▄▀▀ ▄██ ▌ ███▀▀▀ ▄▄▀▀▀▀▀▀▀▄ █ █▌ █ ██▀▀▀▀▀▀▀
* ▐ ▀███ ▌ ██ ▐▌ ▄▄▄ ▐ ▐ ▐█ ▐ ▐█▌
* █ ▄▄▄██ ██ ▌ ▐██ █ ██ █ ▐ ▌ ██ █ ▐█ ▄▄▀▀▀▀▀█
* ▀▀▀███▀▀ █▌ ▐██ ▌ ██▌ ▌ ▀▀▀▀▀ ▐▌ ▐▌ █▌ ▐▌ ▀▀▀▀▀▀ ▄██
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 2 of 28 : 3FACEBase.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
// NFTC Open Source Contracts See: https://github.com/NFTCulture/nftc-open-contracts
import '@nftculture/nftc-open-contracts/contracts/security/GuardedAgainstContracts.sol';
import '@nftculture/nftc-open-contracts/contracts/financial/LockedPaymentSplitter.sol';
import '@nftculture/nftc-open-contracts/contracts/utility/AuxHelper32.sol';
import './AuxHelperFourInto256.sol';
import './DigiSigHelper.sol';
// NFTC Prerelease Contracts
import '@nftculture/nftc-contract-library/contracts/token/phased/PhasedMintThree.sol';
import '@nftculture/nftc-contract-library/contracts/whitelisting/MerkleLeaves.sol';
// NFTC Prerelease Libraries
import {MerkleClaimList} from '@nftculture/nftc-contract-library/contracts/whitelisting/MerkleClaimList.sol';
// ERC721A from Chiru Labs
import 'erc721a/contracts/extensions/ERC721ABurnable.sol';
import 'erc721a/contracts/extensions/ERC721AQueryable.sol';
// OZ Libraries
import '@openzeppelin/contracts/security/ReentrancyGuard.sol';
import '@openzeppelin/contracts/access/Ownable.sol';
import '@openzeppelin/contracts/utils/Strings.sol';
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 3 of 28 : 3FACESplits.sol
1
2
3
4
5
6
7
8
9
10
11
// SPDX-License-Identifier: MIT
pragma solidity 0.8.11;
contract THREEFACESplits {
address[] internal addresses = [
0x73565C1a7CC4A3AB19bf136aC9a1CAee60dD922c,
0x41Fb9227c703086B2d908E177A692EdCD3d7DE2C
];
uint256[] internal splits = [75, 25];
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 4 of 28 : GuardedAgainstContracts.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
/**
* @title GuardedAgainstContracts
* @author @NiftyMike, NFT Culture
* @dev Helper contract to help protect against contract based mint spamming attacks.
*/
abstract contract GuardedAgainstContracts {
modifier onlyUsers() {
require(tx.origin == msg.sender, 'Must be user');
_;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 5 of 28 : LockedPaymentSplitter.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
import "./SlimPaymentSplitter.sol";
import "@openzeppelin/contracts/access/Ownable.sol";
/**
* @title LockedPaymentSplitter
* @author @NiftyMike, NFT Culture
* @dev A wrapper around SlimPaymentSplitter which adds on security elements.
*
* Based on OpenZeppelin Contracts v4.4.1 (finance/PaymentSplitter.sol)
*/
abstract contract LockedPaymentSplitter is SlimPaymentSplitter, Ownable {
/**
* @dev Overrides release() method, so that it can only be called by owner.
* @notice Owner: Release funds to a specific address.
*
* @param account Payable address that will receive funds.
*/
function release(address payable account) public override onlyOwner {
super.release(account);
}
/**
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 6 of 28 : AuxHelper32.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
/**
* @title AuxHelper32
* @author @NiftyMike | NFT Culture
* @dev Helper class for ERC721a Aux storage, using 32 bit ints.
*/
abstract contract AuxHelper32 {
function _pack32(uint32 left32, uint32 right32) internal pure returns (uint64) {
return (uint64(left32) << 32) | uint32(right32);
}
function _unpack32(uint64 aux) internal pure returns (uint32 left32, uint32 right32) {
return (uint32(aux >> 32), uint32(aux));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 7 of 28 : AuxHelperFourInto256.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
/**
* @title AuxHelperFourInto256
* @author @KC, NFT Culture
* @dev Helper class for ERC721a Aux-style storage. This flavor packs 4 64bit fields into a 256 bit int.
*/
abstract contract AuxHelperFourInto256 {
function _pack64(uint64 left64, uint64 leftCenter64, uint64 rightCenter64, uint64 right64) internal pure returns (uint256) {
return (uint256(left64) << 192) | (uint256(leftCenter64) << 128) | (uint256(rightCenter64) << 64) | uint64(right64);
}
function _unpack64(uint256 aux) internal pure returns (uint64 left64, uint64 leftCenter64, uint64 rightCenter64, uint64 right64) {
return (uint64(aux >> 192), uint64(aux >> 128), uint64(aux >> 64), uint64(aux));
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 8 of 28 : DigiSigHelper.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
import '@openzeppelin/contracts/utils/cryptography/ECDSA.sol';
error InvalidSignature();
/**
* @title DigiSigHelper
* @author @NiftyMike | @NFTCulture
* @dev Helper class for handling ECDSA signatures with OpenZepplin library.
*/
abstract contract DigiSigHelper {
using ECDSA for bytes32;
function _verify(
bytes32 dataHash,
bytes memory signature,
address expectedSigner
) internal pure returns (bool) {
address signatureSigner = dataHash.toEthSignedMessageHash().recover(signature);
if (signatureSigner != expectedSigner) revert InvalidSignature();
return true;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 9 of 28 : PhasedMintThree.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
// OZ Libraries
import '@openzeppelin/contracts/access/Ownable.sol';
import './PhasedMintBase.sol';
/**
* @title PhasedMintThree
* @author @NiftyMike, NFT Culture
* @dev PhasedMint: An approach to a standard system of controlling mint phases.
*
* This is the "Three" phase mint flavor of the PhasedMint approach.
*
* Note: Since the last phase is always assumed to be the public mint phase, we only
* need to define the first and second phases here.
*/
contract PhasedMintThree is Ownable, PhasedMintBase {
using BooleanPacking for uint256;
uint256 private constant PHASE_ONE = 1;
uint256 private constant PHASE_TWO = 2;
uint256 public phaseOnePricePerNft;
uint256 public phaseTwoPricePerNft;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 10 of 28 : MerkleLeaves.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
/**
* @title MerkleLeaves
* @author @NiftyMike, NFT Culture
* @dev Merkle Leaves for Merkle Trees - This is a companion contract to NFTC Labs' MerkleClaimList.sol library.
* It provides leaf generation functions for both indexed and non-indexed merkle trees.
* It also provides wrapper methods to expose the leaf generation functions to off-chain callers.
*
* Off-chain access is useful, because both the contract and the caller need to be able to generate the
* leaves in a perfectly identical manner, so the generators are exposed to make it easier.
*/
abstract contract MerkleLeaves {
/**
* @notice External: generate a leaf for a wallet.
*
* @param wallet Address to hash.
*/
function getLeafFor(address wallet) external pure returns (bytes32) {
return _generateLeaf(wallet);
}
/**
* @notice External: generate a leaf for a wallet and an embedded index value.
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 11 of 28 : MerkleClaimList.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
import {MerkleRoot} from './MerkleRoot.sol';
/**
* @title MerkleClaimList
* @author @NiftyMike, NFT Culture
* @dev Basic functionality for a MerkleTree that will be used as a "Claimlist"
*
* "Claimlist" - an approach for validating callers that is backed by a Merkle Tree.
* Cheap to set the master claim, not that expensive to check the claim. Requires
* off-chain generation of the Merkle Tree.
*
* This library allows you to declare a member variable like:
* MerkleClaimList.Root private _claimRoot;
*
* The benefit of packaging this as a library, is that if you need multiple merkle trees in your
* contract, you can declare multiple member variables using this library, and use them in similar fashion.
*
* see also: NFTC Labs' MerkleLeaves.sol, which is a companion abstract contract which contains helper
* methods for generating leaves for the Merkle Tree.
*/
library MerkleClaimList {
using MerkleRoot for bytes32;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 12 of 28 : ERC721ABurnable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.2
// Creator: Chiru Labs
pragma solidity ^0.8.4;
import './IERC721ABurnable.sol';
import '../ERC721A.sol';
/**
* @title ERC721ABurnable.
*
* @dev ERC721A token that can be irreversibly burned (destroyed).
*/
abstract contract ERC721ABurnable is ERC721A, IERC721ABurnable {
/**
* @dev Burns `tokenId`. See {ERC721A-_burn}.
*
* Requirements:
*
* - The caller must own `tokenId` or be an approved operator.
*/
function burn(uint256 tokenId) public virtual override {
_burn(tokenId, true);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 13 of 28 : ERC721AQueryable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.2
// Creator: Chiru Labs
pragma solidity ^0.8.4;
import './IERC721AQueryable.sol';
import '../ERC721A.sol';
/**
* @title ERC721AQueryable.
*
* @dev ERC721A subclass with convenience query functions.
*/
abstract contract ERC721AQueryable is ERC721A, IERC721AQueryable {
/**
* @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
*
* If the `tokenId` is out of bounds:
*
* - `addr = address(0)`
* - `startTimestamp = 0`
* - `burned = false`
* - `extraData = 0`
*
* If the `tokenId` is burned:
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 14 of 28 : ReentrancyGuard.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol)
pragma solidity ^0.8.0;
/**
* @dev Contract module that helps prevent reentrant calls to a function.
*
* Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier
* available, which can be applied to functions to make sure there are no nested
* (reentrant) calls to them.
*
* Note that because there is a single `nonReentrant` guard, functions marked as
* `nonReentrant` may not call one another. This can be worked around by making
* those functions `private`, and then adding `external` `nonReentrant` entry
* points to them.
*
* TIP: If you would like to learn more about reentrancy and alternative ways
* to protect against it, check out our blog post
* https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul].
*/
abstract contract ReentrancyGuard {
// Booleans are more expensive than uint256 or any type that takes up a full
// word because each write operation emits an extra SLOAD to first read the
// slot's contents, replace the bits taken up by the boolean, and then write
// back. This is the compiler's defense against contract upgrades and
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 15 of 28 : Ownable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol)
pragma solidity ^0.8.0;
import "../utils/Context.sol";
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 16 of 28 : Strings.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol)
pragma solidity ^0.8.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
uint8 private constant _ADDRESS_LENGTH = 20;
/**
* @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++;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 17 of 28 : SlimPaymentSplitter.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
import "@openzeppelin/contracts/utils/Address.sol";
import "@openzeppelin/contracts/utils/Context.sol";
/**
* @title SlimPaymentSplitter
* @author @NiftyMike, NFT Culture
* @dev A drop-in slim replacement version of OZ's Payment Splitter. All ERC-20 token functionality removed.
*
* Based on OpenZeppelin Contracts v4.4.1 (finance/PaymentSplitter.sol)
*/
contract SlimPaymentSplitter is Context {
event PayeeAdded(address account, uint256 shares);
event PaymentReleased(address to, uint256 amount);
event PaymentReceived(address from, uint256 amount);
event PayeeTransferred(address oldOwner, address newOwner);
uint256 private _totalShares;
uint256 private _totalReleased;
mapping(address => uint256) private _shares;
mapping(address => uint256) private _released;
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 18 of 28 : Address.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol)
pragma solidity ^0.8.1;
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 19 of 28 : Context.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// 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;
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 20 of 28 : ECDSA.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/ECDSA.sol)
pragma solidity ^0.8.0;
import "../Strings.sol";
/**
* @dev Elliptic Curve Digital Signature Algorithm (ECDSA) operations.
*
* These functions can be used to verify that a message was signed by the holder
* of the private keys of a given address.
*/
library ECDSA {
enum RecoverError {
NoError,
InvalidSignature,
InvalidSignatureLength,
InvalidSignatureS,
InvalidSignatureV
}
function _throwError(RecoverError error) private pure {
if (error == RecoverError.NoError) {
return; // no error: do nothing
} else if (error == RecoverError.InvalidSignature) {
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 21 of 28 : PhasedMintBase.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
// NFTC Open Source Libraries See: https://github.com/NFTCulture/nftc-open-contracts
import {BooleanPacking} from '@nftculture/nftc-open-contracts/contracts/utility/BooleanPacking.sol';
// OZ Libraries
import '@openzeppelin/contracts/access/Ownable.sol';
/**
* @title PhasedMintBase
* @author @NiftyMike, NFT Culture
* @dev PhasedMint: An approach to a standard system of controlling mint phases.
*/
abstract contract PhasedMintBase is Ownable {
using BooleanPacking for uint256;
// BooleanPacking used on _mintControlFlags
uint256 internal _mintControlFlags;
uint256 private immutable PUBLIC_MINT_PHASE;
uint256 public publicMintPricePerNft;
modifier isPublicMinting() {
require(_mintControlFlags.getBoolean(PUBLIC_MINT_PHASE), 'Minting stopped');
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 22 of 28 : BooleanPacking.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
/**
* @title BooleanPacking
* @author @NiftyMike, NFT Culture
* @dev Credit to Zimri Leijen
* See https://ethereum.stackexchange.com/a/92235
*/
library BooleanPacking {
function getBoolean(uint256 _packedBools, uint256 _columnNumber)
internal
pure
returns (bool)
{
uint256 flag = (_packedBools >> _columnNumber) & uint256(1);
return (flag == 1 ? true : false);
}
function setBoolean(
uint256 _packedBools,
uint256 _columnNumber,
bool _value
) internal pure returns (uint256) {
if (_value) {
_packedBools = _packedBools | (uint256(1) << _columnNumber);
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 23 of 28 : MerkleRoot.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.11;
import {MerkleProof} from '@openzeppelin/contracts/utils/cryptography/MerkleProof.sol';
/**
* @title MerkleRoot
* @author @NiftyMike, NFT Culture
* @dev Companion library to OpenZeppelin's MerkleProof.
* Allows you to abstract away merkle functionality a bit further, you now just need to
* worry about dealing with your merkle root.
*
* Using this library allows you to treat bytes32 member variables as Merkle Roots, with a
* slightly easier to use api then the OZ library.
*/
library MerkleRoot {
using MerkleProof for bytes32[];
function check(
bytes32 root,
bytes32[] calldata proof,
bytes32 leaf
) internal pure returns (bool) {
return proof.verify(root, leaf);
}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 24 of 28 : MerkleProof.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// OpenZeppelin Contracts (last updated v4.7.0) (utils/cryptography/MerkleProof.sol)
pragma solidity ^0.8.0;
/**
* @dev These functions deal with verification of Merkle Tree proofs.
*
* The proofs can be generated using the JavaScript library
* https://github.com/miguelmota/merkletreejs[merkletreejs].
* Note: the hashing algorithm should be keccak256 and pair sorting should be enabled.
*
* See `test/utils/cryptography/MerkleProof.test.js` for some examples.
*
* WARNING: You should avoid using leaf values that are 64 bytes long prior to
* hashing, or use a hash function other than keccak256 for hashing leaves.
* This is because the concatenation of a sorted pair of internal nodes in
* the merkle tree could be reinterpreted as a leaf value.
*/
library MerkleProof {
/**
* @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree
* defined by `root`. For this, a `proof` must be provided, containing
* sibling hashes on the branch from the leaf to the root of the tree. Each
* pair of leaves and each pair of pre-images are assumed to be sorted.
*/
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 25 of 28 : IERC721ABurnable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.2
// Creator: Chiru Labs
pragma solidity ^0.8.4;
import '../IERC721A.sol';
/**
* @dev Interface of ERC721ABurnable.
*/
interface IERC721ABurnable is IERC721A {
/**
* @dev Burns `tokenId`. See {ERC721A-_burn}.
*
* Requirements:
*
* - The caller must own `tokenId` or be an approved operator.
*/
function burn(uint256 tokenId) external;
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 26 of 28 : ERC721A.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.2
// Creator: Chiru Labs
pragma solidity ^0.8.4;
import './IERC721A.sol';
/**
* @dev Interface of ERC721 token receiver.
*/
interface ERC721A__IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
/**
* @title ERC721A
*
* @dev Implementation of the [ERC721](https://eips.ethereum.org/EIPS/eip-721)
* Non-Fungible Token Standard, including the Metadata extension.
* Optimized for lower gas during batch mints.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 27 of 28 : IERC721A.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.2
// Creator: Chiru Labs
pragma solidity ^0.8.4;
/**
* @dev Interface of ERC721A.
*/
interface IERC721A {
/**
* The caller must own the token or be an approved operator.
*/
error ApprovalCallerNotOwnerNorApproved();
/**
* The token does not exist.
*/
error ApprovalQueryForNonexistentToken();
/**
* The caller cannot approve to their own address.
*/
error ApproveToCaller();
/**
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

File 28 of 28 : IERC721AQueryable.sol
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
// SPDX-License-Identifier: MIT
// ERC721A Contracts v4.2.2
// Creator: Chiru Labs
pragma solidity ^0.8.4;
import '../IERC721A.sol';
/**
* @dev Interface of ERC721AQueryable.
*/
interface IERC721AQueryable is IERC721A {
/**
* Invalid query range (`start` >= `stop`).
*/
error InvalidQueryRange();
/**
* @dev Returns the `TokenOwnership` struct at `tokenId` without reverting.
*
* If the `tokenId` is out of bounds:
*
* - `addr = address(0)`
* - `startTimestamp = 0`
* - `burned = false`
* - `extraData = 0`
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Settings
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
{
"optimizer": {
"enabled": true,
"runs": 1000
},
"outputSelection": {
"*": {
"*": [
"evm.bytecode",
"evm.deployedBytecode",
"devdoc",
"userdoc",
"metadata",
"abi"
]
}
},
"libraries": {}
}
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX

Contract Security Audit

Contract ABI

[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"BindingNotAllowed","type":"error"},{"inputs":[],"name":"ExceedsMaxSupply","type":"error"},{"inputs":[],"name":"ExceedsPresaleBatchSize","type":"error"},{"inputs":[],"name":"ExceedsPresaleSupply","type":"error"},{"inputs":[],"name":"ExceedsPublicMintBatchSize","type":"error"},{"inputs":[],"name":"ExceedsReserveBatchSize","type":"error"},{"inputs":[],"name":"InvalidPresalePayment","type":"error"},{"inputs":[],"name":"InvalidPublicMintPayment","type":"error"},{"inputs":[],"name":"InvalidQueryRange","type":"error"},{"inputs":[],"name":"InvalidRemoteMinter","type":"error"},{"inputs":[],"name":"InvalidSelectedNature","type":"error"},{"inputs":[],"name":"InvalidSignature","type":"error"},{"inputs":[],"name":"MintERC2309QuantityExceedsLimit","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"OwnershipNotInitializedForExtraData","type":"error"},{"inputs":[],"name":"ProofInvalidPresale","type":"error"},{"inputs":[],"name":"TransferCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"TransferFromIncorrectOwner","type":"error"},{"inputs":[],"name":"TransferToNonERC721ReceiverImplementer","type":"error"},{"inputs":[],"name":"TransferToZeroAddress","type":"error"},{"inputs":[],"name":"URIQueryForNonexistentToken","type":"error"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"fromTokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"toTokenId","type":"uint256"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"}],"name":"ConsecutiveTransfer","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":false,"internalType":"address","name":"account","type":"address"},{"indexed":false,"internalType":"uint256","name":"shares","type":"uint256"}],"name":"PayeeAdded","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"oldOwner","type":"address"},{"indexed":false,"internalType":"address","name":"newOwner","type":"address"}],"name":"PayeeTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"from","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReceived","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"PaymentReleased","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"generation","type":"uint256"},{"indexed":false,"internalType":"string","name":"previousUriFragment","type":"string"}],"name":"ReleaseURIFragment","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"TokenBindingRefunded","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"NATURE_BASE_VAL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATURE_MAX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NATURE_MIN","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"auxMintValues","outputs":[{"internalType":"uint32","name":"presalePhaseOnePurchases","type":"uint32"},{"internalType":"uint32","name":"presalePhaseTwoPurchases","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"userUri","type":"string"},{"internalType":"bytes","name":"threefaceSignature","type":"bytes"}],"name":"bindToUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"bindingRefundAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"checkProofPhaseOne","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"checkProofPhaseTwo","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"explicitOwnershipOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"explicitOwnershipsOf","outputs":[{"components":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint64","name":"startTimestamp","type":"uint64"},{"internalType":"bool","name":"burned","type":"bool"},{"internalType":"uint24","name":"extraData","type":"uint24"}],"internalType":"struct IERC721A.TokenOwnership[]","name":"","type":"tuple[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBindingInfo","outputs":[{"components":[{"internalType":"uint64","name":"tokenId","type":"uint64"},{"internalType":"uint64","name":"generation","type":"uint64"},{"internalType":"uint64","name":"isBoundToUser","type":"uint64"},{"internalType":"uint64","name":"reserved","type":"uint64"}],"internalType":"struct THREEFACEBase.TokenBindingData","name":"","type":"tuple"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBindingInfo_CurrentFragment","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBindingInfo_Generation","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getBindingInfo_IsBoundToUser","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"string","name":"uriFragment","type":"string"}],"name":"getBindingInfo_Status","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"getIndexedLeafFor","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getLeafFor","outputs":[{"internalType":"bytes32","name":"","type":"bytes32"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getNature","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getNextProofIndexPhaseOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getNextProofIndexPhaseTwo","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getPresalePhaseOneTokensPurchased","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"wallet","type":"address"}],"name":"getPresalePhaseTwoTokensPurchased","outputs":[{"internalType":"uint32","name":"","type":"uint32"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isBindingAllowed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOpenEdition","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"isPhaseOneActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPhaseTwoActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintingActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRefundingEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPresaleOne","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[{"internalType":"uint256","name":"sets","type":"uint256"}],"name":"mintSet","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"selectedNature","type":"uint256"}],"name":"mintTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"selectedNature","type":"uint256"},{"internalType":"address","name":"to","type":"address"}],"name":"mintTokensTo","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"payee","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseOneBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"phaseOnePricePerNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"phaseTwoBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"phaseTwoPricePerNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"selectedNature","type":"uint256"}],"name":"presalePhaseOneTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"selectedNature","type":"uint256"}],"name":"presalePhaseTwoTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"publicMintBatchSize","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"pure","type":"function"},{"inputs":[],"name":"publicMintPricePerNft","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"account","type":"address"}],"name":"release","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"releaseToSelf","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"released","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"friends","type":"address[]"},{"internalType":"uint256","name":"sets","type":"uint256"}],"name":"reserveSets","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"friends","type":"address[]"},{"internalType":"uint256","name":"count","type":"uint256"},{"internalType":"uint256","name":"selectedNature","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"selectedNature","type":"uint256"}],"name":"restoreToBlank","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"boundGenerationOverride","type":"uint256"},{"internalType":"string","name":"userUri","type":"string"},{"internalType":"bool","name":"flush","type":"bool"}],"name":"restoreUserFragment","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"__baseUri","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"__bindingAllowed","type":"bool"},{"internalType":"bool","name":"__refundingEnabled","type":"bool"},{"internalType":"uint256","name":"__bindingRefundAmount","type":"uint256"}],"name":"setBindingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"__phaseOneRoot","type":"bytes32"},{"internalType":"bytes32","name":"__phaseTwoRoot","type":"bytes32"}],"name":"setMerkleRoots","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"__phaseOneActive","type":"bool"},{"internalType":"bool","name":"__phaseTwoActive","type":"bool"},{"internalType":"bool","name":"__publicMintingActive","type":"bool"},{"internalType":"uint256","name":"__phaseOnePricePerNft","type":"uint256"},{"internalType":"uint256","name":"__phaseTwoPricePerNft","type":"uint256"},{"internalType":"uint256","name":"__publicMintPricePerNft","type":"uint256"}],"name":"setMintingState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"__natureIds","type":"uint256[]"},{"internalType":"string[]","name":"__natureUris","type":"string[]"}],"name":"setNatureFragments","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"__newMinter","type":"address"}],"name":"setRemoteMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"__newSigner","type":"address"}],"name":"setThreefaceSigner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"}],"name":"shares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"supportedPhases","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"start","type":"uint256"},{"internalType":"uint256","name":"stop","type":"uint256"}],"name":"tokensOfOwnerIn","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalReleased","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalShares","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address payable","name":"newOwner","type":"address"}],"name":"transferPayee","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]

60e06040527373565c1a7cc4a3ab19bf136ac9a1caee60dd922c60a09081527341fb9227c703086b2d908e177a692edcd3d7de2c60c05262000046906000906002620008af565b5060408051808201909152604b8152601960208201526200006c90600190600262000919565b503480156200007a57600080fd5b506040518060400160405280600981526020016854485245454641434560b81b81525060405180604001604052806005815260200164334641434560d81b815250604051806060016040528060228152602001620062fe6022913960008054806020026020016040519081016040528092919081815260200182805480156200012d57602002820191906000526020600020905b81546001600160a01b031681526001909101906020018083116200010e575b505050505060018054806020026020016040519081016040528092919081815260200182805480156200018057602002820191906000526020600020905b8154815260200190600101908083116200016b575b50505050506702c68af0bb14000067016345785d8a00006706f05b59d3b20000660aa87bee5380008383836003818a8a8f8f8160049080519060200190620001ca9291906200095c565b508051620001e09060059060208401906200095c565b506000600255505080518251146200025a5760405162461bcd60e51b815260206004820152603260248201527f5061796d656e7453706c69747465723a2070617965657320616e6420736861726044820152710cae640d8cadccee8d040dad2e6dac2e8c6d60731b60648201526084015b60405180910390fd5b6000825111620002ad5760405162461bcd60e51b815260206004820152601a60248201527f5061796d656e7453706c69747465723a206e6f20706179656573000000000000604482015260640162000251565b60005b8251811015620003195762000304838281518110620002d357620002d3620009f0565b6020026020010151838381518110620002f057620002f0620009f0565b60200260200101516200059c60201b60201c565b80620003108162000a1c565b915050620002b0565b50505062000336620003306200078a60201b60201c565b6200078e565b6001601055608091909152601255506013919091556014558651620003639060179060208a01906200095c565b50601d80546001600160a01b03199081163317909155601e805490911673dab1a1854214684ace522439684a145e62505233179055601655506000965060049550620003b0945050505050565b604051908082528060200260200182016040528015620003da578160200160208202803683370190505b509050606481600081518110620003f557620003f5620009f0565b602002602001018181525050606581600181518110620004195762000419620009f0565b6020026020010181815250506066816002815181106200043d576200043d620009f0565b602002602001018181525050606781600381518110620004615762000461620009f0565b602090810291909101015260408051600480825260a08201909252600091816020015b6060815260200190600190039081620004845790505090506040518060600160405280602e8152602001620062d0602e913981600081518110620004cc57620004cc620009f0565b60200260200101819052506040518060600160405280602e815260200162006274602e913981600181518110620005075762000507620009f0565b60200260200101819052506040518060600160405280602e815260200162006246602e913981600281518110620005425762000542620009f0565b60200260200101819052506040518060600160405280602e8152602001620062a2602e9139816003815181106200057d576200057d620009f0565b6020908102919091010152620005948282620007e0565b505062000a92565b6001600160a01b038216620006095760405162461bcd60e51b815260206004820152602c60248201527f5061796d656e7453706c69747465723a206163636f756e74206973207468652060448201526b7a65726f206164647265737360a01b606482015260840162000251565b600081116200065b5760405162461bcd60e51b815260206004820152601d60248201527f5061796d656e7453706c69747465723a20736861726573206172652030000000604482015260640162000251565b6001600160a01b0382166000908152600c602052604090205415620006d75760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e7420616c726561647960448201526a206861732073686172657360a81b606482015260840162000251565b600e8054600181019091557fbb7b4a454dc3493923482f07822329ed19e8244eff582cc204f8554c3620c3fd0180546001600160a01b0319166001600160a01b0384169081179091556000908152600c60205260409020819055600a546200074190829062000a3a565b600a55604080516001600160a01b0384168152602081018390527f40c340f65e17194d14ddddb073d3c9f888e3cb52b5aae0c6c7706b4fbc905fac910160405180910390a15050565b3390565b600f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b8051825114620008265760405162461bcd60e51b815260206004820152601060248201526f556e6d6174636865642061727261797360801b604482015260640162000251565b60005b8251811015620008aa57818181518110620008485762000848620009f0565b6020026020010151601a6000858481518110620008695762000869620009f0565b602002602001015181526020019081526020016000209080519060200190620008949291906200095c565b5080620008a18162000a1c565b91505062000829565b505050565b82805482825590600052602060002090810192821562000907579160200282015b828111156200090757825182546001600160a01b0319166001600160a01b03909116178255602090920191600190910190620008d0565b5062000915929150620009d9565b5090565b82805482825590600052602060002090810192821562000907579160200282015b8281111562000907578251829060ff169055916020019190600101906200093a565b8280546200096a9062000a55565b90600052602060002090601f0160209004810192826200098e576000855562000907565b82601f10620009a957805160ff191683800117855562000907565b8280016001018555821562000907579182015b8281111562000907578251825591602001919060010190620009bc565b5b80821115620009155760008155600101620009da565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b600060001982141562000a335762000a3362000a06565b5060010190565b6000821982111562000a505762000a5062000a06565b500190565b600181811c9082168062000a6a57607f821691505b6020821081141562000a8c57634e487b7160e01b600052602260045260246000fd5b50919050565b60805161577562000ad160003960008181610f990152818161185001528181611e4701528181612b26015281816137120152613b4701526157756000f3fe6080604052600436106105985760003560e01c80638462151c116102e0578063c4f5758411610184578063e27c429c116100e1578063e985e9c511610095578063f48f800e1161006f578063f48f800e14611083578063fce2d35614611096578063fdb8e8a2146107fe57600080fd5b8063e985e9c514610fdd578063ec0cd2da14611026578063f2fde38b1461106357600080fd5b8063e8338882116100c6578063e833888214610f47578063e8ad246f14610f8a578063e8d4c20e14610fbd57600080fd5b8063e27c429c14610f12578063e33b7de314610f3257600080fd5b8063d1d130ae11610138578063db828e5d1161011d578063db828e5d14610ed2578063e1a2fe7614610ee7578063e228c6fe14610efd57600080fd5b8063d1d130ae14610eaa578063d5abeb0114610ebd57600080fd5b8063ca2d83f511610169578063ca2d83f514610e34578063ce7c2ac214610e54578063cfb00c6d14610e8a57600080fd5b8063c4f5758414610dff578063c87b56dd14610e1457600080fd5b806399a2557a1161023d578063a22cb465116101f1578063b7438d66116101cb578063b7438d6614610d9c578063b88d4fde14610db2578063c23dc68f14610dd257600080fd5b8063a22cb46514610d47578063a43a030814610d67578063a5e8516a14610d8757600080fd5b80639e04c452116102225780639e04c45214610d08578063a0e2406214610d1e578063a19835c514610d3457600080fd5b806399a2557a14610cc85780639a48eb5114610ce857600080fd5b806395d89b411161029457806396863230116102795780639686323014610c5d5780639794242114610c725780639852595c14610c9257600080fd5b806395d89b4114610c33578063961d128414610c4857600080fd5b80638b83209b116102c55780638b83209b14610be05780638da5cb5b14610c005780639392e30b14610c1e57600080fd5b80638462151c14610b7257806388b9516214610b9f57600080fd5b806342842e0e116104475780635bbb2177116103a45780636c0360eb116103585780637721f401116103325780637721f40114610b2a57806378a84d9314610b3f5780637c4712c414610b5257600080fd5b80636c0360eb14610ae057806370a0823114610af5578063715018a614610b1557600080fd5b806363ea0b361161038957806363ea0b3614610a98578063661c3c7f14610aad57806366e590e414610ac057600080fd5b80635bbb217714610a4b5780636352211e14610a7857600080fd5b80634f558e79116103fb57806355f804b3116103e057806355f804b314610a0b578063590a095e14610a2b5780635b18692b146107fe57600080fd5b80634f558e79146109cb57806354b8087e146109eb57600080fd5b806343a2b5761161042c57806343a2b5761461097657806348f271191461098b5780634d73f5f7146109ab57600080fd5b806342842e0e1461093657806342966c681461095657600080fd5b806320f22351116104f557806335841e50116104a95780633a98ef391161048e5780633a98ef39146108e15780633f0eaf67146108f657806340a4c9b61461091657600080fd5b806335841e50146108ad578063371ba7e2146108c157600080fd5b806323b872dd116104da57806323b872dd1461084557806333f587061461086557806334a7c2e71461089a57600080fd5b806320f223511461081257806321f2f8021461083257600080fd5b8063163480091161054c578063191655871161053157806319165587146107be5780631cf964a9146107de5780631df6051e146107fe57600080fd5b8063163480091461077b57806318160ddd1461079b57600080fd5b8063081812fc1161057d578063081812fc1461063d578063095ea7b3146106755780630ec37c3c1461069757600080fd5b806301ffc9a7146105e657806306fdde031461061b57600080fd5b366105e1577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156105f257600080fd5b50610606610601366004614909565b6110b6565b60405190151581526020015b60405180910390f35b34801561062757600080fd5b50610630611153565b604051610612919061497e565b34801561064957600080fd5b5061065d610658366004614991565b6111e5565b6040516001600160a01b039091168152602001610612565b34801561068157600080fd5b506106956106903660046149bf565b611242565b005b3480156106a357600080fd5b506107376106b2366004614991565b604080516080810182526000808252602082018190529181018290526060810191909152506000908152601c60209081526040918290208251608081018452905467ffffffffffffffff8082168352680100000000000000008204811693830193909352600160801b8104831693820193909352600160c01b90920416606082015290565b6040516106129190815167ffffffffffffffff9081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b34801561078757600080fd5b506106956107963660046149eb565b6112fb565b3480156107a757600080fd5b50600354600254035b604051908152602001610612565b3480156107ca57600080fd5b506106956107d93660046149eb565b6114d6565b3480156107ea57600080fd5b506107b06107f93660046149eb565b6114ea565b34801561080a57600080fd5b50600a6107b0565b34801561081e57600080fd5b5061069561082d366004614a4a565b61152e565b610695610840366004614ba3565b611542565b34801561085157600080fd5b50610695610860366004614be8565b6115cc565b34801561087157600080fd5b506108856108803660046149eb565b6117bf565b60405163ffffffff9091168152602001610612565b6106956108a8366004614c29565b6117ef565b3480156108b957600080fd5b506000610606565b3480156108cd57600080fd5b506106956108dc3660046149eb565b611927565b3480156108ed57600080fd5b50600a546107b0565b34801561090257600080fd5b506107b0610911366004614991565b611951565b34801561092257600080fd5b506107b06109313660046149eb565b61195c565b34801561094257600080fd5b50610695610951366004614be8565b611992565b34801561096257600080fd5b50610695610971366004614991565b6119b2565b34801561098257600080fd5b506106066119bd565b34801561099757600080fd5b506106306109a6366004614991565b6119cc565b3480156109b757600080fd5b506106956109c6366004614c60565b611a6e565b3480156109d757600080fd5b506106066109e6366004614991565b611aa8565b3480156109f757600080fd5b50610885610a063660046149eb565b611ab3565b348015610a1757600080fd5b50610695610a26366004614d14565b611ae3565b348015610a3757600080fd5b50610695610a46366004614dc9565b611b02565b348015610a5757600080fd5b50610a6b610a66366004614ec7565b611b14565b6040516106129190614f09565b348015610a8457600080fd5b5061065d610a93366004614991565b611be0565b348015610aa457600080fd5b506107b0600081565b610695610abb366004614f86565b611beb565b348015610acc57600080fd5b50610695610adb366004614fd4565b611c7a565b348015610aec57600080fd5b50610630611cd2565b348015610b0157600080fd5b506107b0610b103660046149eb565b611d60565b348015610b2157600080fd5b50610695611dc8565b348015610b3657600080fd5b50610606611ddc565b610695610b4d366004614991565b611de6565b348015610b5e57600080fd5b506107b0610b6d366004615033565b611f1e565b348015610b7e57600080fd5b50610b92610b8d3660046149eb565b611f9c565b604051610612919061507f565b348015610bab57600080fd5b50610606610bba366004614991565b6000908152601c6020526040902054600160801b900467ffffffffffffffff1660011490565b348015610bec57600080fd5b5061065d610bfb366004614991565b6120a4565b348015610c0c57600080fd5b50600f546001600160a01b031661065d565b348015610c2a57600080fd5b506107686107b0565b348015610c3f57600080fd5b506106306120d4565b348015610c5457600080fd5b506106066120e3565b348015610c6957600080fd5b506106066120ed565b348015610c7e57600080fd5b50610606610c8d3660046150b7565b6120f7565b348015610c9e57600080fd5b506107b0610cad3660046149eb565b6001600160a01b03166000908152600d602052604090205490565b348015610cd457600080fd5b50610b92610ce3366004615114565b612167565b348015610cf457600080fd5b50610695610d03366004614c29565b6122fc565b348015610d1457600080fd5b506107b060135481565b348015610d2a57600080fd5b506107b060125481565b610695610d42366004615149565b61230e565b348015610d5357600080fd5b50610695610d6236600461519a565b6124c8565b348015610d7357600080fd5b50610695610d823660046149eb565b612577565b348015610d9357600080fd5b506107b0600381565b348015610da857600080fd5b506107b060145481565b348015610dbe57600080fd5b50610695610dcd3660046151cf565b6125a1565b348015610dde57600080fd5b50610df2610ded366004614991565b6125e5565b604051610612919061524f565b348015610e0b57600080fd5b506107b0606481565b348015610e2057600080fd5b50610630610e2f366004614991565b61265d565b348015610e4057600080fd5b50610606610e4f3660046150b7565b612799565b348015610e6057600080fd5b506107b0610e6f3660046149eb565b6001600160a01b03166000908152600c602052604090205490565b348015610e9657600080fd5b506107b0610ea53660046149bf565b612800565b610695610eb8366004615149565b612852565b348015610ec957600080fd5b506110006107b0565b348015610ede57600080fd5b506106066129bf565b348015610ef357600080fd5b506107b060165481565b348015610f0957600080fd5b506106956129c9565b348015610f1e57600080fd5b506107b0610f2d3660046149eb565b6129d2565b348015610f3e57600080fd5b50600b546107b0565b348015610f5357600080fd5b506107b0610f62366004614991565b6000908152601c602052604090205468010000000000000000900467ffffffffffffffff1690565b348015610f9657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000006107b0565b348015610fc957600080fd5b50610695610fd8366004614c29565b6129dd565b348015610fe957600080fd5b50610606610ff8366004615294565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b34801561103257600080fd5b506110466110413660046149eb565b612a07565b6040805163ffffffff938416815292909116602083015201610612565b34801561106f57600080fd5b5061069561107e3660046149eb565b612a38565b6106956110913660046152cd565b612ac5565b3480156110a257600080fd5b506106956110b1366004615306565b612c5a565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061111957507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061114d57507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600480546111629061536e565b80601f016020809104026020016040519081016040528092919081815260200182805461118e9061536e565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b5050505050905090565b60006111f082612d3d565b611226576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b600061124d82611be0565b9050336001600160a01b0382161461129f576112698133610ff8565b61129f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001600160a01b03811661137c5760405162461bcd60e51b815260206004820152602f60248201527f5061796d656e7453706c69747465723a204e657720706179656520697320746860448201527f65207a65726f20616464726573732e000000000000000000000000000000000060648201526084015b60405180910390fd5b336000908152600c60205260409020546113fd5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7453706c69747465723a20596f752068617665206e6f2073686160448201527f7265732e000000000000000000000000000000000000000000000000000000006064820152608401611373565b6001600160a01b0381166000908152600c6020526040902054156114895760405162461bcd60e51b815260206004820152602e60248201527f5061796d656e7453706c69747465723a204e657720706179656520616c72656160448201527f647920686173207368617265732e0000000000000000000000000000000000006064820152608401611373565b61149281612d65565b604080513381526001600160a01b03831660208201527f6829b4029cd073199f80f49556d32953c9bc4e14d395388e678d2cc4604d4819910160405180910390a150565b6114de612e2f565b6114e781612e89565b50565b600080611520611512846001600160a01b031660009081526007602052604090205460c01c90565b63ffffffff602082901c1691565b5063ffffffff169392505050565b61153b8585858585613063565b5050505050565b61154a612e2f565b8015806115575750602081115b15611575576040516302c4a14f60e21b815260040160405180910390fd5b600061158060025490565b905060005b83518110156115c6576115b28482815181106115a3576115a36153a9565b6020026020010151838561325f565b9150806115be816153d5565b915050611585565b50505050565b60006115d7826132d7565b9050836001600160a01b0316816001600160a01b031614611624576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040902080546116508187335b6001600160a01b039081169116811491141790565b61167b5761165e8633610ff8565b61167b57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166116bb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156116c657600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b7fffffff000000000000000000000000000000000000000000000000000000000085161717600160e11b17600085815260066020526040902055600160e11b831661177557600184016000818152600660205260409020546117735760025481146117735760008181526006602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6000806117e7611512846001600160a01b031660009081526007602052604090205460c01c90565b949350505050565b600260105414156118425760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154611874907f0000000000000000000000000000000000000000000000000000000000000000613351565b6118b25760405162461bcd60e51b815260206004820152600f60248201526e135a5b9d1a5b99c81cdd1bdc1c1959608a1b6044820152606401611373565b8115806118bf5750600a82115b156118dd5760405163c2d95d8760e01b815260040160405180910390fd5b816012546118eb91906153f0565b341461190a57604051632756c96160e21b815260040160405180910390fd5b61191e3361191760025490565b8484613372565b50506001601055565b61192f612e2f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600061114d82613469565b600080611984611512846001600160a01b031660009081526007602052604090205460c01c90565b63ffffffff16949350505050565b6119ad838383604051806020016040528060008152506125a1565b505050565b6114e7816001613485565b60006119c7613606565b905090565b6000818152601b602052604090208054606091906119e99061536e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a159061536e565b8015611a625780601f10611a3757610100808354040283529160200191611a62565b820191906000526020600020905b815481529060010190602001808311611a4557829003601f168201915b50505050509050919050565b611a76612e2f565b601554611a8581600586613617565b9050611a9381600685613617565b6015819055905081156115c657506016555050565b600061114d82612d3d565b600080611adb611512846001600160a01b031660009081526007602052604090205460c01c90565b509392505050565b611aeb612e2f565b8051611afe9060179060208401906147e6565b5050565b611b0a612e2f565b611afe8282613640565b60608160008167ffffffffffffffff811115611b3257611b32614ac4565b604051908082528060200260200182016040528015611b8457816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181611b505790505b50905060005b828114611bd757611bb2868683818110611ba657611ba66153a9565b905060200201356125e5565b828281518110611bc457611bc46153a9565b6020908102919091010152600101611b8a565b50949350505050565b600061114d826132d7565b611bf3612e2f565b811580611c005750602082115b15611c1e576040516302c4a14f60e21b815260040160405180910390fd5b6000611c2960025490565b905060005b845181101561153b57611c5c858281518110611c4c57611c4c6153a9565b6020026020010151838686613372565b611c66848361540f565b915080611c72816153d5565b915050611c2e565b611c82612e2f565b6000611c8e8583613709565b9050611c9c81600189613617565b9050611caa81600288613617565b601181905590508315611cbd5760138490555b8215611cc95760148390555b50505050505050565b60178054611cdf9061536e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0b9061536e565b8015611d585780601f10611d2d57610100808354040283529160200191611d58565b820191906000526020600020905b815481529060010190602001808311611d3b57829003601f168201915b505050505081565b60006001600160a01b038216611da2576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b611dd0612e2f565b611dda600061374b565b565b60006119c761379d565b60026010541415611e395760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154611e6b907f0000000000000000000000000000000000000000000000000000000000000000613351565b611ea95760405162461bcd60e51b815260206004820152600f60248201526e135a5b9d1a5b99c81cdd1bdc1c1959608a1b6044820152606401611373565b801580611eb65750600581115b15611ed45760405163c2d95d8760e01b815260040160405180910390fd5b611edf8160046153f0565b601254611eec91906153f0565b3414611f0b57604051632756c96160e21b815260040160405180910390fd5b61191e33611f1860025490565b8361325f565b6000808383604051602001611f34929190615427565b60408051601f1981840301815282825280516020918201206000898152601b8352929092209193508392611f699291016154a6565b604051602081830303815290604052805190602001201415611f8f576001915050611f95565b60009150505b9392505050565b60606000806000611fac85611d60565b905060008167ffffffffffffffff811115611fc957611fc9614ac4565b604051908082528060200260200182016040528015611ff2578160200160208202803683370190505b5060408051608081018252600080825260208201819052918101829052606081018290529192505b8386146120985761202a816137ae565b915081604001511561203b57612090565b81516001600160a01b03161561205057815194505b876001600160a01b0316856001600160a01b031614156120905780838780600101985081518110612083576120836153a9565b6020026020010181815250505b60010161201a565b50909695505050505050565b6000600e82815481106120b9576120b96153a9565b6000918252602090912001546001600160a01b031692915050565b6060600580546111629061536e565b60006119c761382d565b60006119c761383e565b600061215e858561215486866040516bffffffffffffffffffffffff19606084901b166020820152605f60f81b60348201526035810182905260009060550160405160208183030381529060405280519060200120905092915050565b601892919061384f565b95945050505050565b60608183106121a2576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806121ae60025490565b9050808411156121bc578093505b60006121c787611d60565b9050848610156121e657858503818110156121e0578091505b506121ea565b5060005b60008167ffffffffffffffff81111561220557612205614ac4565b60405190808252806020026020018201604052801561222e578160200160208202803683370190505b50905081612241579350611f9592505050565b600061224c886125e5565b90506000816040015161225d575080515b885b88811415801561226f5750848714155b156122eb5761227d816137ae565b925082604001511561228e576122e3565b82516001600160a01b0316156122a357825191505b8a6001600160a01b0316826001600160a01b031614156122e357808488806001019950815181106122d6576122d66153a9565b6020026020010181815250505b60010161225f565b505050928352509095945050505050565b612304612e2f565b611afe8282613860565b600260105414156123615760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154612374906001613351565b6123c05760405162461bcd60e51b815260206004820152601160248201527f5068617365206f6e652073746f707065640000000000000000000000000000006044820152606401611373565b8115806123cd5750600a82115b156123eb5760405163d9e9e03f60e01b815260040160405180910390fd5b816013546123f991906153f0565b341461241857604051635a36be4d60e01b815260040160405180910390fd5b3360009081526007602052604081205481906124369060c01c611512565b9092509050600061244d8563ffffffff851661540f565b90506124ac3365ffff00000000602084901b1663ffffffff8516175b6001600160a01b039091166000908152600760205260409020805477ffffffffffffffffffffffffffffffffffffffffffffffff1660c09290921b919091179055565b6124ba338888848989613880565b505060016010555050505050565b6001600160a01b03821633141561250b576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61257f612e2f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6125ac8484846115cc565b6001600160a01b0383163b156115c6576125c884848484613960565b6115c6576040516368d2bf6b60e11b815260040160405180910390fd5b60408051608080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905292810183905290915060025483106126395792915050565b612642836137ae565b90508060400151156126545792915050565b611f9583613a45565b606061266882612d3d565b61269f5760405162461bcd60e51b81526020600482015260086024820152672737903a37b5b2b760c11b6044820152606401611373565b60006126a9613abd565b905060008151116126fc5760405162461bcd60e51b815260206004820152600a60248201527f4261736520756e736574000000000000000000000000000000000000000000006044820152606401611373565b600061270784613469565b6000858152601c6020526040902054909150600160801b900467ffffffffffffffff16600114612774576000818152601a60205260409020829061274a86613acc565b60405160200161275c939291906154b2565b60405160208183030381529060405292505050919050565b81601b600086815260200190815260200160002060405160200161275c9291906154ec565b600061215e85856127f686866040516bffffffffffffffffffffffff19606084901b166020820152605f60f81b60348201526035810182905260009060550160405160208183030381529060405280519060200120905092915050565b601992919061384f565b60408051606084901b6bffffffffffffffffffffffff1916602080830191909152605f60f81b603483015260358083018590528351808403909101815260559092019092528051910120600090611f95565b600260105414156128a55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b600260108190556011546128b891613351565b6129045760405162461bcd60e51b815260206004820152601160248201527f50686173652074776f2073746f707065640000000000000000000000000000006044820152606401611373565b8115806129115750600a82115b1561292f5760405163d9e9e03f60e01b815260040160405180910390fd5b8160145461293d91906153f0565b341461295c57604051635a36be4d60e01b815260040160405180910390fd5b33600090815260076020526040812054819061297a9060c01c611512565b909250905060006129918563ffffffff841661540f565b90506129b13367ffffffff00000000602086901b1661ffff841617612469565b6124ba338888848989613afd565b60006119c7613b3b565b611dda33612e89565b600061114d82613b6b565b6129e5612e2f565b6000828152601c60205260408120556129fd82613bab565b611afe8282613bd9565b600080612a2f611512846001600160a01b031660009081526007602052604090205460c01c90565b91509150915091565b612a40612e2f565b6001600160a01b038116612abc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401611373565b6114e78161374b565b60026010541415612b185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154612b4a907f0000000000000000000000000000000000000000000000000000000000000000613351565b612b885760405162461bcd60e51b815260206004820152600f60248201526e135a5b9d1a5b99c81cdd1bdc1c1959608a1b6044820152606401611373565b821580612b955750600a83115b15612bb35760405163c2d95d8760e01b815260040160405180910390fd5b82601254612bc191906153f0565b3414612be057604051632756c96160e21b815260040160405180910390fd5b601e546001600160a01b03163314801590612c055750601e546001600160a01b031615155b15612c3c576040517fa3a7336e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5081612c4960025490565b8585613372565b5050600160105550565b612c62612e2f565b8015612c78576000858152601c60205260408120555b6000858152601c60209081526040918290208251608081018452905467ffffffffffffffff8082168352680100000000000000008204811693830193909352600160801b8104831693820193909352600160c01b909204166060820152612ce29086908585613c2e565b50801561153b576000858152601c60205260409020805467ffffffffffffffff861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790555050505050565b60006002548210801561114d575050600090815260066020526040902054600160e01b161590565b600e54612d6f5750565b60005b600e54612d819060019061550a565b811015611afe57336001600160a01b0316600e8281548110612da557612da56153a9565b6000918252602090912001546001600160a01b03161415612e1d5781600e8281548110612dd457612dd46153a9565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905533808352600c90915260408083208054948716845290832093909355815290555b80612e27816153d5565b915050612d72565b600f546001600160a01b03163314611dda5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611373565b6001600160a01b0381166000908152600c6020526040902054612f145760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201527f73686172657300000000000000000000000000000000000000000000000000006064820152608401611373565b6000612f1f600b5490565b612f29904761540f565b90506000612f568383612f51866001600160a01b03166000908152600d602052604090205490565b613da7565b905080612fcb5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201527f647565207061796d656e740000000000000000000000000000000000000000006064820152608401611373565b6001600160a01b0383166000908152600d602052604081208054839290612ff390849061540f565b9250508190555080600b600082825461300c919061540f565b9091555061301c90508382613de5565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b601554613071906005613351565b6130a7576040517f0d7251e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130b085612d3d565b6130e75760405162461bcd60e51b81526020600482015260086024820152672737903a37b5b2b760c11b6044820152606401611373565b6130f085613a45565b516001600160a01b031633146131485760405162461bcd60e51b815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401611373565b6000858152601c602090815260408083208151608081018352905467ffffffffffffffff80821683526801000000000000000082048116948301859052600160801b8204811693830193909352600160c01b9004909116606082015291906131b1906001615521565b67ffffffffffffffff1690506131cc33888389898989613efe565b5060006131db88848989613c2e565b90508080156131ed57506131ed61382d565b1561325557601654604051339180156108fc02916000818181858888f19350505050158015613220573d6000803e3d6000fd5b506040518881527f41ea3f7d6e2fe3836ff4767bc7706d53a0afdde6d93b9e98ff79de9b8024e5a69060200160405180910390a15b5050505050505050565b600061326e8484846064613372565b613278828461540f565b925061329184848461328c6064600161540f565b613372565b61329b828461540f565b92506132af84848461328c6064600261540f565b6132b9828461540f565b92506132cd84848461328c6064600361540f565b6117e7828461540f565b60008160025481101561331f57600081815260066020526040902054600160e01b811661331d575b80611f955750600019016000818152600660205260409020546132ff565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600183831c81169081146133685760006117e7565b6001949350505050565b61100061337f838561540f565b11156133b7576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133c36000606461540f565b8110806133da57506133d76003606461540f565b81115b156133f857604051634c847c8760e11b815260040160405180910390fd5b80600061340460025490565b90506134108685613f8c565b61341a8183613bd9565b60018411156117b757600061343082600161540f565b90505b61343d858361540f565b811015611cc95761344d81613bab565b6134578184613bd9565b80613461816153d5565b915050613433565b600080613475836137ae565b6060015162ffffff169392505050565b6000613490836132d7565b9050806000806134ae86600090815260086020526040902080549091565b9150915084156134ee576134c381843361163b565b6134ee576134d18333610ff8565b6134ee57604051632ce44b5f60e11b815260040160405180910390fd5b80156134f957600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b7fffffff0000000000000000000000000000000000000000000000000000000000861617177c030000000000000000000000000000000000000000000000000000000017600087815260066020526040902055600160e11b84166135bd57600186016000818152600660205260409020546135bb5760025481146135bb5760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b6011546000906119c7906001613351565b6000811561362f57506001821b929092179182611f95565b506001821b19929092169182611f95565b80518251146136915760405162461bcd60e51b815260206004820152601060248201527f556e6d61746368656420617272617973000000000000000000000000000000006044820152606401611373565b60005b82518110156119ad578181815181106136af576136af6153a9565b6020026020010151601a60008584815181106136cd576136cd6153a9565b6020026020010151815260200190815260200160002090805190602001906136f69291906147e6565b5080613701816153d5565b915050613694565b600080613737817f000000000000000000000000000000000000000000000000000000000000000086613617565b90508215611f955760128390559392505050565b600f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6015546000906119c7906005613351565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526006602052604090205461114d90604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6015546000906119c7906006613351565b6011546000906119c7906002613351565b835460009061215e90858585613fa6565b8115613870576138706018839055565b8015611afe57611afe6019829055565b600061388b60025490565b905061076861389a848361540f565b11156138d2576040517f7b771dc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61393786866121548a6138e660018a61550a565b6040516bffffffffffffffffffffffff19606084901b166020820152605f60f81b60348201526035810182905260009060550160405160208183030381529060405280519060200120905092915050565b61395457604051630c7296bb60e11b815260040160405180910390fd5b611cc987828585613372565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061399590339089908890889060040161554d565b6020604051808303816000875af19250505080156139d0575060408051601f3d908101601f191682019092526139cd91810190615589565b60015b613a2b573d8080156139fe576040519150601f19603f3d011682016040523d82523d6000602084013e613a03565b606091505b508051613a23576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e7565b60408051608081018252600080825260208201819052918101829052606081019190915261114d613a75836132d7565b604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6060601780546111629061536e565b6060613ad782613fea565b604051602001613ae791906155a6565b6040516020818303038152906040529050919050565b613b1185856127f6896138e660018961550a565b613b2e57604051630c7296bb60e11b815260040160405180910390fd5b6117b78661191760025490565b6011546000906119c7907f0000000000000000000000000000000000000000000000000000000000000000613351565b6040516bffffffffffffffffffffffff19606083901b1660208201526000906034015b604051602081830303815290604052805190602001209050919050565b6000818152600660205260409020546114e757613bc7816132d7565b60008281526006602052604090205550565b613be56000606461540f565b8162ffffff161080613c065750613bfe6003606461540f565b8162ffffff16115b15613c2457604051634c847c8760e11b815260040160405180910390fd5b611afe828261411c565b6040830151600090819067ffffffffffffffff16613c62575067ffffffffffffffff85168452600160408501819052613cb4565b7f59ebe37edcc33bfbd8c05f098812c0e2f24e3bb8b2687deb4ef467e5740fc47b868660200151601b60008a8152602001908152602001600020604051613cab939291906155eb565b60405180910390a15b60208501805190613cc482615689565b67ffffffffffffffff169052506000868152601b60205260409020613cea90858561486a565b506000868152601c602090815260409182902087518154928901519389015160608a015167ffffffffffffffff908116600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff928216600160801b02929092166fffffffffffffffffffffffffffffffff96821668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961691909316179390931793909316929092171790559050949350505050565b600a546001600160a01b0384166000908152600c602052604081205490918391613dd190866153f0565b613ddb91906156c7565b6117e7919061550a565b80471015613e355760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611373565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613e82576040519150601f19603f3d011682016040523d82523d6000602084013e613e87565b606091505b50509050806119ad5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611373565b6000808888888888604051602001613f1a9594939291906156db565b604051602081830303815290604052805190602001209050613f7f8185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601d546001600160a01b0316915061419d9050565b9998505050505050505050565b611afe82826040518060200160405280600081525061420b565b600061215e85838686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509294939250506142719050565b60608161402a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115614054578061403e816153d5565b915061404d9050600a836156c7565b915061402e565b60008167ffffffffffffffff81111561406f5761406f614ac4565b6040519080825280601f01601f191660200182016040528015614099576020820181803683370190505b5090505b84156117e7576140ae60018361550a565b91506140bb600a86615715565b6140c690603061540f565b60f81b8183815181106140db576140db6153a9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614115600a866156c7565b945061409d565b60008281526006602052604090205480614161576040517ed5815300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000928352600660205260409092207cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290921660e89190911b179055565b6000806141b3846141ad87614287565b906142c2565b9050826001600160a01b0316816001600160a01b031614614200576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001949350505050565b61421583836142de565b6001600160a01b0383163b156119ad576002548281035b61423f6000868380600101945086613960565b61425c576040516368d2bf6b60e11b815260040160405180910390fd5b81811061422c57816002541461153b57600080fd5b60008261427e8584614408565b14949350505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01613b8e565b60008060006142d1858561444d565b91509150611adb816144bd565b60025481614318576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526007602090815260408083208054680100000000000000018802019055848352600690915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146143c757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161438f565b50816143ff576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025550505050565b600081815b8451811015611adb576144398286838151811061442c5761442c6153a9565b6020026020010151614678565b915080614445816153d5565b91505061440d565b6000808251604114156144845760208301516040840151606085015160001a614478878285856146a7565b945094505050506144b6565b8251604014156144ae57602083015160408401516144a3868383614794565b9350935050506144b6565b506000905060025b9250929050565b60008160048111156144d1576144d1615729565b14156144da5750565b60018160048111156144ee576144ee615729565b141561453c5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611373565b600281600481111561455057614550615729565b141561459e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611373565b60038160048111156145b2576145b2615729565b141561460b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611373565b600481600481111561461f5761461f615729565b14156114e75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611373565b6000818310614694576000828152602084905260409020611f95565b6000838152602083905260409020611f95565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156146de575060009050600361478b565b8460ff16601b141580156146f657508460ff16601c14155b15614707575060009050600461478b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561475b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147845760006001925092505061478b565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316816147ca60ff86901c601b61540f565b90506147d8878288856146a7565b935093505050935093915050565b8280546147f29061536e565b90600052602060002090601f016020900481019282614814576000855561485a565b82601f1061482d57805160ff191683800117855561485a565b8280016001018555821561485a579182015b8281111561485a57825182559160200191906001019061483f565b506148669291506148de565b5090565b8280546148769061536e565b90600052602060002090601f016020900481019282614898576000855561485a565b82601f106148b15782800160ff1982351617855561485a565b8280016001018555821561485a579182015b8281111561485a5782358255916020019190600101906148c3565b5b8082111561486657600081556001016148df565b6001600160e01b0319811681146114e757600080fd5b60006020828403121561491b57600080fd5b8135611f95816148f3565b60005b83811015614941578181015183820152602001614929565b838111156115c65750506000910152565b6000815180845261496a816020860160208601614926565b601f01601f19169290920160200192915050565b602081526000611f956020830184614952565b6000602082840312156149a357600080fd5b5035919050565b6001600160a01b03811681146114e757600080fd5b600080604083850312156149d257600080fd5b82356149dd816149aa565b946020939093013593505050565b6000602082840312156149fd57600080fd5b8135611f95816149aa565b60008083601f840112614a1a57600080fd5b50813567ffffffffffffffff811115614a3257600080fd5b6020830191508360208285010111156144b657600080fd5b600080600080600060608688031215614a6257600080fd5b85359450602086013567ffffffffffffffff80821115614a8157600080fd5b614a8d89838a01614a08565b90965094506040880135915080821115614aa657600080fd5b50614ab388828901614a08565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b0357614b03614ac4565b604052919050565b600067ffffffffffffffff821115614b2557614b25614ac4565b5060051b60200190565b600082601f830112614b4057600080fd5b81356020614b55614b5083614b0b565b614ada565b82815260059290921b84018101918181019086841115614b7457600080fd5b8286015b84811015614b98578035614b8b816149aa565b8352918301918301614b78565b509695505050505050565b60008060408385031215614bb657600080fd5b823567ffffffffffffffff811115614bcd57600080fd5b614bd985828601614b2f565b95602094909401359450505050565b600080600060608486031215614bfd57600080fd5b8335614c08816149aa565b92506020840135614c18816149aa565b929592945050506040919091013590565b60008060408385031215614c3c57600080fd5b50508035926020909101359150565b80358015158114614c5b57600080fd5b919050565b600080600060608486031215614c7557600080fd5b614c7e84614c4b565b9250614c8c60208501614c4b565b9150604084013590509250925092565b600067ffffffffffffffff831115614cb657614cb6614ac4565b614cc9601f8401601f1916602001614ada565b9050828152838383011115614cdd57600080fd5b828260208301376000602084830101529392505050565b600082601f830112614d0557600080fd5b611f9583833560208501614c9c565b600060208284031215614d2657600080fd5b813567ffffffffffffffff811115614d3d57600080fd5b6117e784828501614cf4565b600082601f830112614d5a57600080fd5b81356020614d6a614b5083614b0b565b82815260059290921b84018101918181019086841115614d8957600080fd5b8286015b84811015614b9857803567ffffffffffffffff811115614dad5760008081fd5b614dbb8986838b0101614cf4565b845250918301918301614d8d565b60008060408385031215614ddc57600080fd5b823567ffffffffffffffff80821115614df457600080fd5b818501915085601f830112614e0857600080fd5b81356020614e18614b5083614b0b565b82815260059290921b84018101918181019089841115614e3757600080fd5b948201945b83861015614e5557853582529482019490820190614e3c565b96505086013592505080821115614e6b57600080fd5b50614e7885828601614d49565b9150509250929050565b60008083601f840112614e9457600080fd5b50813567ffffffffffffffff811115614eac57600080fd5b6020830191508360208260051b85010111156144b657600080fd5b60008060208385031215614eda57600080fd5b823567ffffffffffffffff811115614ef157600080fd5b614efd85828601614e82565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561209857614f738385516001600160a01b03815116825267ffffffffffffffff602082015116602083015260408101511515604083015262ffffff60608201511660608301525050565b9284019260809290920191600101614f25565b600080600060608486031215614f9b57600080fd5b833567ffffffffffffffff811115614fb257600080fd5b614fbe86828701614b2f565b9660208601359650604090950135949350505050565b60008060008060008060c08789031215614fed57600080fd5b614ff687614c4b565b955061500460208801614c4b565b945061501260408801614c4b565b9350606087013592506080870135915060a087013590509295509295509295565b60008060006040848603121561504857600080fd5b83359250602084013567ffffffffffffffff81111561506657600080fd5b61507286828701614a08565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156120985783518352928401929184019160010161509b565b600080600080606085870312156150cd57600080fd5b843567ffffffffffffffff8111156150e457600080fd5b6150f087828801614e82565b9095509350506020850135615104816149aa565b9396929550929360400135925050565b60008060006060848603121561512957600080fd5b8335615134816149aa565b95602085013595506040909401359392505050565b6000806000806060858703121561515f57600080fd5b843567ffffffffffffffff81111561517657600080fd5b61518287828801614e82565b90989097506020870135966040013595509350505050565b600080604083850312156151ad57600080fd5b82356151b8816149aa565b91506151c660208401614c4b565b90509250929050565b600080600080608085870312156151e557600080fd5b84356151f0816149aa565b93506020850135615200816149aa565b925060408501359150606085013567ffffffffffffffff81111561522357600080fd5b8501601f8101871361523457600080fd5b61524387823560208401614c9c565b91505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff169082015260408083015115159082015260608083015162ffffff16908201526080810161114d565b600080604083850312156152a757600080fd5b82356152b2816149aa565b915060208301356152c2816149aa565b809150509250929050565b6000806000606084860312156152e257600080fd5b833592506020840135915060408401356152fb816149aa565b809150509250925092565b60008060008060006080868803121561531e57600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561534357600080fd5b61534f88828901614a08565b9094509250615362905060608701614c4b565b90509295509295909350565b600181811c9082168061538257607f821691505b602082108114156153a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153e9576153e96153bf565b5060010190565b600081600019048311821515161561540a5761540a6153bf565b500290565b60008219821115615422576154226153bf565b500190565b8183823760009101908152919050565b600081546154448161536e565b6001828116801561545c576001811461546d5761549c565b60ff1984168752828701945061549c565b8560005260208060002060005b858110156154935781548a82015290840190820161547a565b50505082870194505b5050505092915050565b6000611f958284615437565b600084516154c4818460208901614926565b6154d081840186615437565b905083516154e2818360208801614926565b0195945050505050565b600083516154fe818460208801614926565b61215e81840185615437565b60008282101561551c5761551c6153bf565b500390565b600067ffffffffffffffff808316818516808303821115615544576155446153bf565b01949350505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261557f6080830184614952565b9695505050505050565b60006020828403121561559b57600080fd5b8151611f95816148f3565b7f2f000000000000000000000000000000000000000000000000000000000000008152600082516155de816001850160208701614926565b9190910160010192915050565b8381526000602067ffffffffffffffff85168184015260606040840152600084546156158161536e565b8060608701526080600180841660008114615637576001811461564b57615679565b60ff1985168984015260a089019550615679565b896000528660002060005b858110156156715781548b8201860152908301908801615656565b8a0184019650505b50939a9950505050505050505050565b600067ffffffffffffffff808316818114156156a7576156a76153bf565b6001019392505050565b634e487b7160e01b600052601260045260246000fd5b6000826156d6576156d66156b1565b500490565b6bffffffffffffffffffffffff198660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b600082615724576157246156b1565b500690565b634e487b7160e01b600052602160045260246000fdfea264697066735822122091042f0fe0084b1e999013c018d555cd1a84ca7b2df373ff6e0d01c08f71b7c564736f6c634300080b0033516d544c704b684e6475475264444668415a514a4d3664503136535961626d69623459534e3474426f457542456f516d5438397a714d34537a43756f77364c615a585366733850584d4841453838464a4c324b6a5851676662446334516d556747634b6e4754595845686f4a7836706a544e51554468627a516d6f6a3156423966585067375479355239516d613879386e68554a4e796d4e6438623277373738636747466470734a576d366475373544537863353336424768747470733a2f2f33666163652e6d7970696e6174612e636c6f75642f697066732f

Deployed Bytecode

0x6080604052600436106105985760003560e01c80638462151c116102e0578063c4f5758411610184578063e27c429c116100e1578063e985e9c511610095578063f48f800e1161006f578063f48f800e14611083578063fce2d35614611096578063fdb8e8a2146107fe57600080fd5b8063e985e9c514610fdd578063ec0cd2da14611026578063f2fde38b1461106357600080fd5b8063e8338882116100c6578063e833888214610f47578063e8ad246f14610f8a578063e8d4c20e14610fbd57600080fd5b8063e27c429c14610f12578063e33b7de314610f3257600080fd5b8063d1d130ae11610138578063db828e5d1161011d578063db828e5d14610ed2578063e1a2fe7614610ee7578063e228c6fe14610efd57600080fd5b8063d1d130ae14610eaa578063d5abeb0114610ebd57600080fd5b8063ca2d83f511610169578063ca2d83f514610e34578063ce7c2ac214610e54578063cfb00c6d14610e8a57600080fd5b8063c4f5758414610dff578063c87b56dd14610e1457600080fd5b806399a2557a1161023d578063a22cb465116101f1578063b7438d66116101cb578063b7438d6614610d9c578063b88d4fde14610db2578063c23dc68f14610dd257600080fd5b8063a22cb46514610d47578063a43a030814610d67578063a5e8516a14610d8757600080fd5b80639e04c452116102225780639e04c45214610d08578063a0e2406214610d1e578063a19835c514610d3457600080fd5b806399a2557a14610cc85780639a48eb5114610ce857600080fd5b806395d89b411161029457806396863230116102795780639686323014610c5d5780639794242114610c725780639852595c14610c9257600080fd5b806395d89b4114610c33578063961d128414610c4857600080fd5b80638b83209b116102c55780638b83209b14610be05780638da5cb5b14610c005780639392e30b14610c1e57600080fd5b80638462151c14610b7257806388b9516214610b9f57600080fd5b806342842e0e116104475780635bbb2177116103a45780636c0360eb116103585780637721f401116103325780637721f40114610b2a57806378a84d9314610b3f5780637c4712c414610b5257600080fd5b80636c0360eb14610ae057806370a0823114610af5578063715018a614610b1557600080fd5b806363ea0b361161038957806363ea0b3614610a98578063661c3c7f14610aad57806366e590e414610ac057600080fd5b80635bbb217714610a4b5780636352211e14610a7857600080fd5b80634f558e79116103fb57806355f804b3116103e057806355f804b314610a0b578063590a095e14610a2b5780635b18692b146107fe57600080fd5b80634f558e79146109cb57806354b8087e146109eb57600080fd5b806343a2b5761161042c57806343a2b5761461097657806348f271191461098b5780634d73f5f7146109ab57600080fd5b806342842e0e1461093657806342966c681461095657600080fd5b806320f22351116104f557806335841e50116104a95780633a98ef391161048e5780633a98ef39146108e15780633f0eaf67146108f657806340a4c9b61461091657600080fd5b806335841e50146108ad578063371ba7e2146108c157600080fd5b806323b872dd116104da57806323b872dd1461084557806333f587061461086557806334a7c2e71461089a57600080fd5b806320f223511461081257806321f2f8021461083257600080fd5b8063163480091161054c578063191655871161053157806319165587146107be5780631cf964a9146107de5780631df6051e146107fe57600080fd5b8063163480091461077b57806318160ddd1461079b57600080fd5b8063081812fc1161057d578063081812fc1461063d578063095ea7b3146106755780630ec37c3c1461069757600080fd5b806301ffc9a7146105e657806306fdde031461061b57600080fd5b366105e1577f6ef95f06320e7a25a04a175ca677b7052bdd97131872c2192525a629f51be77033604080516001600160a01b0390921682523460208301520160405180910390a1005b600080fd5b3480156105f257600080fd5b50610606610601366004614909565b6110b6565b60405190151581526020015b60405180910390f35b34801561062757600080fd5b50610630611153565b604051610612919061497e565b34801561064957600080fd5b5061065d610658366004614991565b6111e5565b6040516001600160a01b039091168152602001610612565b34801561068157600080fd5b506106956106903660046149bf565b611242565b005b3480156106a357600080fd5b506107376106b2366004614991565b604080516080810182526000808252602082018190529181018290526060810191909152506000908152601c60209081526040918290208251608081018452905467ffffffffffffffff8082168352680100000000000000008204811693830193909352600160801b8104831693820193909352600160c01b90920416606082015290565b6040516106129190815167ffffffffffffffff9081168252602080840151821690830152604080840151821690830152606092830151169181019190915260800190565b34801561078757600080fd5b506106956107963660046149eb565b6112fb565b3480156107a757600080fd5b50600354600254035b604051908152602001610612565b3480156107ca57600080fd5b506106956107d93660046149eb565b6114d6565b3480156107ea57600080fd5b506107b06107f93660046149eb565b6114ea565b34801561080a57600080fd5b50600a6107b0565b34801561081e57600080fd5b5061069561082d366004614a4a565b61152e565b610695610840366004614ba3565b611542565b34801561085157600080fd5b50610695610860366004614be8565b6115cc565b34801561087157600080fd5b506108856108803660046149eb565b6117bf565b60405163ffffffff9091168152602001610612565b6106956108a8366004614c29565b6117ef565b3480156108b957600080fd5b506000610606565b3480156108cd57600080fd5b506106956108dc3660046149eb565b611927565b3480156108ed57600080fd5b50600a546107b0565b34801561090257600080fd5b506107b0610911366004614991565b611951565b34801561092257600080fd5b506107b06109313660046149eb565b61195c565b34801561094257600080fd5b50610695610951366004614be8565b611992565b34801561096257600080fd5b50610695610971366004614991565b6119b2565b34801561098257600080fd5b506106066119bd565b34801561099757600080fd5b506106306109a6366004614991565b6119cc565b3480156109b757600080fd5b506106956109c6366004614c60565b611a6e565b3480156109d757600080fd5b506106066109e6366004614991565b611aa8565b3480156109f757600080fd5b50610885610a063660046149eb565b611ab3565b348015610a1757600080fd5b50610695610a26366004614d14565b611ae3565b348015610a3757600080fd5b50610695610a46366004614dc9565b611b02565b348015610a5757600080fd5b50610a6b610a66366004614ec7565b611b14565b6040516106129190614f09565b348015610a8457600080fd5b5061065d610a93366004614991565b611be0565b348015610aa457600080fd5b506107b0600081565b610695610abb366004614f86565b611beb565b348015610acc57600080fd5b50610695610adb366004614fd4565b611c7a565b348015610aec57600080fd5b50610630611cd2565b348015610b0157600080fd5b506107b0610b103660046149eb565b611d60565b348015610b2157600080fd5b50610695611dc8565b348015610b3657600080fd5b50610606611ddc565b610695610b4d366004614991565b611de6565b348015610b5e57600080fd5b506107b0610b6d366004615033565b611f1e565b348015610b7e57600080fd5b50610b92610b8d3660046149eb565b611f9c565b604051610612919061507f565b348015610bab57600080fd5b50610606610bba366004614991565b6000908152601c6020526040902054600160801b900467ffffffffffffffff1660011490565b348015610bec57600080fd5b5061065d610bfb366004614991565b6120a4565b348015610c0c57600080fd5b50600f546001600160a01b031661065d565b348015610c2a57600080fd5b506107686107b0565b348015610c3f57600080fd5b506106306120d4565b348015610c5457600080fd5b506106066120e3565b348015610c6957600080fd5b506106066120ed565b348015610c7e57600080fd5b50610606610c8d3660046150b7565b6120f7565b348015610c9e57600080fd5b506107b0610cad3660046149eb565b6001600160a01b03166000908152600d602052604090205490565b348015610cd457600080fd5b50610b92610ce3366004615114565b612167565b348015610cf457600080fd5b50610695610d03366004614c29565b6122fc565b348015610d1457600080fd5b506107b060135481565b348015610d2a57600080fd5b506107b060125481565b610695610d42366004615149565b61230e565b348015610d5357600080fd5b50610695610d6236600461519a565b6124c8565b348015610d7357600080fd5b50610695610d823660046149eb565b612577565b348015610d9357600080fd5b506107b0600381565b348015610da857600080fd5b506107b060145481565b348015610dbe57600080fd5b50610695610dcd3660046151cf565b6125a1565b348015610dde57600080fd5b50610df2610ded366004614991565b6125e5565b604051610612919061524f565b348015610e0b57600080fd5b506107b0606481565b348015610e2057600080fd5b50610630610e2f366004614991565b61265d565b348015610e4057600080fd5b50610606610e4f3660046150b7565b612799565b348015610e6057600080fd5b506107b0610e6f3660046149eb565b6001600160a01b03166000908152600c602052604090205490565b348015610e9657600080fd5b506107b0610ea53660046149bf565b612800565b610695610eb8366004615149565b612852565b348015610ec957600080fd5b506110006107b0565b348015610ede57600080fd5b506106066129bf565b348015610ef357600080fd5b506107b060165481565b348015610f0957600080fd5b506106956129c9565b348015610f1e57600080fd5b506107b0610f2d3660046149eb565b6129d2565b348015610f3e57600080fd5b50600b546107b0565b348015610f5357600080fd5b506107b0610f62366004614991565b6000908152601c602052604090205468010000000000000000900467ffffffffffffffff1690565b348015610f9657600080fd5b507f00000000000000000000000000000000000000000000000000000000000000036107b0565b348015610fc957600080fd5b50610695610fd8366004614c29565b6129dd565b348015610fe957600080fd5b50610606610ff8366004615294565b6001600160a01b03918216600090815260096020908152604080832093909416825291909152205460ff1690565b34801561103257600080fd5b506110466110413660046149eb565b612a07565b6040805163ffffffff938416815292909116602083015201610612565b34801561106f57600080fd5b5061069561107e3660046149eb565b612a38565b6106956110913660046152cd565b612ac5565b3480156110a257600080fd5b506106956110b1366004615306565b612c5a565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000006001600160e01b03198316148061111957507f80ac58cd000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b8061114d57507f5b5e139f000000000000000000000000000000000000000000000000000000006001600160e01b03198316145b92915050565b6060600480546111629061536e565b80601f016020809104026020016040519081016040528092919081815260200182805461118e9061536e565b80156111db5780601f106111b0576101008083540402835291602001916111db565b820191906000526020600020905b8154815290600101906020018083116111be57829003601f168201915b5050505050905090565b60006111f082612d3d565b611226576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506000908152600860205260409020546001600160a01b031690565b600061124d82611be0565b9050336001600160a01b0382161461129f576112698133610ff8565b61129f576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008281526008602052604080822080546001600160a01b0319166001600160a01b0387811691821790925591518593918516917f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92591a4505050565b6001600160a01b03811661137c5760405162461bcd60e51b815260206004820152602f60248201527f5061796d656e7453706c69747465723a204e657720706179656520697320746860448201527f65207a65726f20616464726573732e000000000000000000000000000000000060648201526084015b60405180910390fd5b336000908152600c60205260409020546113fd5760405162461bcd60e51b8152602060048201526024808201527f5061796d656e7453706c69747465723a20596f752068617665206e6f2073686160448201527f7265732e000000000000000000000000000000000000000000000000000000006064820152608401611373565b6001600160a01b0381166000908152600c6020526040902054156114895760405162461bcd60e51b815260206004820152602e60248201527f5061796d656e7453706c69747465723a204e657720706179656520616c72656160448201527f647920686173207368617265732e0000000000000000000000000000000000006064820152608401611373565b61149281612d65565b604080513381526001600160a01b03831660208201527f6829b4029cd073199f80f49556d32953c9bc4e14d395388e678d2cc4604d4819910160405180910390a150565b6114de612e2f565b6114e781612e89565b50565b600080611520611512846001600160a01b031660009081526007602052604090205460c01c90565b63ffffffff602082901c1691565b5063ffffffff169392505050565b61153b8585858585613063565b5050505050565b61154a612e2f565b8015806115575750602081115b15611575576040516302c4a14f60e21b815260040160405180910390fd5b600061158060025490565b905060005b83518110156115c6576115b28482815181106115a3576115a36153a9565b6020026020010151838561325f565b9150806115be816153d5565b915050611585565b50505050565b60006115d7826132d7565b9050836001600160a01b0316816001600160a01b031614611624576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600082815260086020526040902080546116508187335b6001600160a01b039081169116811491141790565b61167b5761165e8633610ff8565b61167b57604051632ce44b5f60e11b815260040160405180910390fd5b6001600160a01b0385166116bb576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80156116c657600082555b6001600160a01b038681166000908152600760205260408082208054600019019055918716808252919020805460010190554260a01b7fffffff000000000000000000000000000000000000000000000000000000000085161717600160e11b17600085815260066020526040902055600160e11b831661177557600184016000818152600660205260409020546117735760025481146117735760008181526006602052604090208490555b505b83856001600160a01b0316876001600160a01b03167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b505050505050565b6000806117e7611512846001600160a01b031660009081526007602052604090205460c01c90565b949350505050565b600260105414156118425760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154611874907f0000000000000000000000000000000000000000000000000000000000000003613351565b6118b25760405162461bcd60e51b815260206004820152600f60248201526e135a5b9d1a5b99c81cdd1bdc1c1959608a1b6044820152606401611373565b8115806118bf5750600a82115b156118dd5760405163c2d95d8760e01b815260040160405180910390fd5b816012546118eb91906153f0565b341461190a57604051632756c96160e21b815260040160405180910390fd5b61191e3361191760025490565b8484613372565b50506001601055565b61192f612e2f565b601d80546001600160a01b0319166001600160a01b0392909216919091179055565b600061114d82613469565b600080611984611512846001600160a01b031660009081526007602052604090205460c01c90565b63ffffffff16949350505050565b6119ad838383604051806020016040528060008152506125a1565b505050565b6114e7816001613485565b60006119c7613606565b905090565b6000818152601b602052604090208054606091906119e99061536e565b80601f0160208091040260200160405190810160405280929190818152602001828054611a159061536e565b8015611a625780601f10611a3757610100808354040283529160200191611a62565b820191906000526020600020905b815481529060010190602001808311611a4557829003601f168201915b50505050509050919050565b611a76612e2f565b601554611a8581600586613617565b9050611a9381600685613617565b6015819055905081156115c657506016555050565b600061114d82612d3d565b600080611adb611512846001600160a01b031660009081526007602052604090205460c01c90565b509392505050565b611aeb612e2f565b8051611afe9060179060208401906147e6565b5050565b611b0a612e2f565b611afe8282613640565b60608160008167ffffffffffffffff811115611b3257611b32614ac4565b604051908082528060200260200182016040528015611b8457816020015b604080516080810182526000808252602080830182905292820181905260608201528252600019909201910181611b505790505b50905060005b828114611bd757611bb2868683818110611ba657611ba66153a9565b905060200201356125e5565b828281518110611bc457611bc46153a9565b6020908102919091010152600101611b8a565b50949350505050565b600061114d826132d7565b611bf3612e2f565b811580611c005750602082115b15611c1e576040516302c4a14f60e21b815260040160405180910390fd5b6000611c2960025490565b905060005b845181101561153b57611c5c858281518110611c4c57611c4c6153a9565b6020026020010151838686613372565b611c66848361540f565b915080611c72816153d5565b915050611c2e565b611c82612e2f565b6000611c8e8583613709565b9050611c9c81600189613617565b9050611caa81600288613617565b601181905590508315611cbd5760138490555b8215611cc95760148390555b50505050505050565b60178054611cdf9061536e565b80601f0160208091040260200160405190810160405280929190818152602001828054611d0b9061536e565b8015611d585780601f10611d2d57610100808354040283529160200191611d58565b820191906000526020600020905b815481529060010190602001808311611d3b57829003601f168201915b505050505081565b60006001600160a01b038216611da2576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001600160a01b031660009081526007602052604090205467ffffffffffffffff1690565b611dd0612e2f565b611dda600061374b565b565b60006119c761379d565b60026010541415611e395760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154611e6b907f0000000000000000000000000000000000000000000000000000000000000003613351565b611ea95760405162461bcd60e51b815260206004820152600f60248201526e135a5b9d1a5b99c81cdd1bdc1c1959608a1b6044820152606401611373565b801580611eb65750600581115b15611ed45760405163c2d95d8760e01b815260040160405180910390fd5b611edf8160046153f0565b601254611eec91906153f0565b3414611f0b57604051632756c96160e21b815260040160405180910390fd5b61191e33611f1860025490565b8361325f565b6000808383604051602001611f34929190615427565b60408051601f1981840301815282825280516020918201206000898152601b8352929092209193508392611f699291016154a6565b604051602081830303815290604052805190602001201415611f8f576001915050611f95565b60009150505b9392505050565b60606000806000611fac85611d60565b905060008167ffffffffffffffff811115611fc957611fc9614ac4565b604051908082528060200260200182016040528015611ff2578160200160208202803683370190505b5060408051608081018252600080825260208201819052918101829052606081018290529192505b8386146120985761202a816137ae565b915081604001511561203b57612090565b81516001600160a01b03161561205057815194505b876001600160a01b0316856001600160a01b031614156120905780838780600101985081518110612083576120836153a9565b6020026020010181815250505b60010161201a565b50909695505050505050565b6000600e82815481106120b9576120b96153a9565b6000918252602090912001546001600160a01b031692915050565b6060600580546111629061536e565b60006119c761382d565b60006119c761383e565b600061215e858561215486866040516bffffffffffffffffffffffff19606084901b166020820152605f60f81b60348201526035810182905260009060550160405160208183030381529060405280519060200120905092915050565b601892919061384f565b95945050505050565b60608183106121a2576040517f32c1995a00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000806121ae60025490565b9050808411156121bc578093505b60006121c787611d60565b9050848610156121e657858503818110156121e0578091505b506121ea565b5060005b60008167ffffffffffffffff81111561220557612205614ac4565b60405190808252806020026020018201604052801561222e578160200160208202803683370190505b50905081612241579350611f9592505050565b600061224c886125e5565b90506000816040015161225d575080515b885b88811415801561226f5750848714155b156122eb5761227d816137ae565b925082604001511561228e576122e3565b82516001600160a01b0316156122a357825191505b8a6001600160a01b0316826001600160a01b031614156122e357808488806001019950815181106122d6576122d66153a9565b6020026020010181815250505b60010161225f565b505050928352509095945050505050565b612304612e2f565b611afe8282613860565b600260105414156123615760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154612374906001613351565b6123c05760405162461bcd60e51b815260206004820152601160248201527f5068617365206f6e652073746f707065640000000000000000000000000000006044820152606401611373565b8115806123cd5750600a82115b156123eb5760405163d9e9e03f60e01b815260040160405180910390fd5b816013546123f991906153f0565b341461241857604051635a36be4d60e01b815260040160405180910390fd5b3360009081526007602052604081205481906124369060c01c611512565b9092509050600061244d8563ffffffff851661540f565b90506124ac3365ffff00000000602084901b1663ffffffff8516175b6001600160a01b039091166000908152600760205260409020805477ffffffffffffffffffffffffffffffffffffffffffffffff1660c09290921b919091179055565b6124ba338888848989613880565b505060016010555050505050565b6001600160a01b03821633141561250b576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b3360008181526009602090815260408083206001600160a01b03871680855290835292819020805460ff191686151590811790915590519081529192917f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a35050565b61257f612e2f565b601e80546001600160a01b0319166001600160a01b0392909216919091179055565b6125ac8484846115cc565b6001600160a01b0383163b156115c6576125c884848484613960565b6115c6576040516368d2bf6b60e11b815260040160405180910390fd5b60408051608080820183526000808352602080840182905283850182905260608085018390528551938401865282845290830182905293820181905292810183905290915060025483106126395792915050565b612642836137ae565b90508060400151156126545792915050565b611f9583613a45565b606061266882612d3d565b61269f5760405162461bcd60e51b81526020600482015260086024820152672737903a37b5b2b760c11b6044820152606401611373565b60006126a9613abd565b905060008151116126fc5760405162461bcd60e51b815260206004820152600a60248201527f4261736520756e736574000000000000000000000000000000000000000000006044820152606401611373565b600061270784613469565b6000858152601c6020526040902054909150600160801b900467ffffffffffffffff16600114612774576000818152601a60205260409020829061274a86613acc565b60405160200161275c939291906154b2565b60405160208183030381529060405292505050919050565b81601b600086815260200190815260200160002060405160200161275c9291906154ec565b600061215e85856127f686866040516bffffffffffffffffffffffff19606084901b166020820152605f60f81b60348201526035810182905260009060550160405160208183030381529060405280519060200120905092915050565b601992919061384f565b60408051606084901b6bffffffffffffffffffffffff1916602080830191909152605f60f81b603483015260358083018590528351808403909101815260559092019092528051910120600090611f95565b600260105414156128a55760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b600260108190556011546128b891613351565b6129045760405162461bcd60e51b815260206004820152601160248201527f50686173652074776f2073746f707065640000000000000000000000000000006044820152606401611373565b8115806129115750600a82115b1561292f5760405163d9e9e03f60e01b815260040160405180910390fd5b8160145461293d91906153f0565b341461295c57604051635a36be4d60e01b815260040160405180910390fd5b33600090815260076020526040812054819061297a9060c01c611512565b909250905060006129918563ffffffff841661540f565b90506129b13367ffffffff00000000602086901b1661ffff841617612469565b6124ba338888848989613afd565b60006119c7613b3b565b611dda33612e89565b600061114d82613b6b565b6129e5612e2f565b6000828152601c60205260408120556129fd82613bab565b611afe8282613bd9565b600080612a2f611512846001600160a01b031660009081526007602052604090205460c01c90565b91509150915091565b612a40612e2f565b6001600160a01b038116612abc5760405162461bcd60e51b815260206004820152602660248201527f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160448201527f64647265737300000000000000000000000000000000000000000000000000006064820152608401611373565b6114e78161374b565b60026010541415612b185760405162461bcd60e51b815260206004820152601f60248201527f5265656e7472616e637947756172643a207265656e7472616e742063616c6c006044820152606401611373565b6002601055601154612b4a907f0000000000000000000000000000000000000000000000000000000000000003613351565b612b885760405162461bcd60e51b815260206004820152600f60248201526e135a5b9d1a5b99c81cdd1bdc1c1959608a1b6044820152606401611373565b821580612b955750600a83115b15612bb35760405163c2d95d8760e01b815260040160405180910390fd5b82601254612bc191906153f0565b3414612be057604051632756c96160e21b815260040160405180910390fd5b601e546001600160a01b03163314801590612c055750601e546001600160a01b031615155b15612c3c576040517fa3a7336e00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b612c5081612c4960025490565b8585613372565b5050600160105550565b612c62612e2f565b8015612c78576000858152601c60205260408120555b6000858152601c60209081526040918290208251608081018452905467ffffffffffffffff8082168352680100000000000000008204811693830193909352600160801b8104831693820193909352600160c01b909204166060820152612ce29086908585613c2e565b50801561153b576000858152601c60205260409020805467ffffffffffffffff861668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000ffffffffffffffff9091161790555050505050565b60006002548210801561114d575050600090815260066020526040902054600160e01b161590565b600e54612d6f5750565b60005b600e54612d819060019061550a565b811015611afe57336001600160a01b0316600e8281548110612da557612da56153a9565b6000918252602090912001546001600160a01b03161415612e1d5781600e8281548110612dd457612dd46153a9565b600091825260208083209190910180546001600160a01b0319166001600160a01b0394851617905533808352600c90915260408083208054948716845290832093909355815290555b80612e27816153d5565b915050612d72565b600f546001600160a01b03163314611dda5760405162461bcd60e51b815260206004820181905260248201527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e65726044820152606401611373565b6001600160a01b0381166000908152600c6020526040902054612f145760405162461bcd60e51b815260206004820152602660248201527f5061796d656e7453706c69747465723a206163636f756e7420686173206e6f2060448201527f73686172657300000000000000000000000000000000000000000000000000006064820152608401611373565b6000612f1f600b5490565b612f29904761540f565b90506000612f568383612f51866001600160a01b03166000908152600d602052604090205490565b613da7565b905080612fcb5760405162461bcd60e51b815260206004820152602b60248201527f5061796d656e7453706c69747465723a206163636f756e74206973206e6f742060448201527f647565207061796d656e740000000000000000000000000000000000000000006064820152608401611373565b6001600160a01b0383166000908152600d602052604081208054839290612ff390849061540f565b9250508190555080600b600082825461300c919061540f565b9091555061301c90508382613de5565b604080516001600160a01b0385168152602081018390527fdf20fd1e76bc69d672e4814fafb2c449bba3a5369d8359adf9e05e6fde87b056910160405180910390a1505050565b601554613071906005613351565b6130a7576040517f0d7251e100000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6130b085612d3d565b6130e75760405162461bcd60e51b81526020600482015260086024820152672737903a37b5b2b760c11b6044820152606401611373565b6130f085613a45565b516001600160a01b031633146131485760405162461bcd60e51b815260206004820152600960248201527f4e6f74206f776e657200000000000000000000000000000000000000000000006044820152606401611373565b6000858152601c602090815260408083208151608081018352905467ffffffffffffffff80821683526801000000000000000082048116948301859052600160801b8204811693830193909352600160c01b9004909116606082015291906131b1906001615521565b67ffffffffffffffff1690506131cc33888389898989613efe565b5060006131db88848989613c2e565b90508080156131ed57506131ed61382d565b1561325557601654604051339180156108fc02916000818181858888f19350505050158015613220573d6000803e3d6000fd5b506040518881527f41ea3f7d6e2fe3836ff4767bc7706d53a0afdde6d93b9e98ff79de9b8024e5a69060200160405180910390a15b5050505050505050565b600061326e8484846064613372565b613278828461540f565b925061329184848461328c6064600161540f565b613372565b61329b828461540f565b92506132af84848461328c6064600261540f565b6132b9828461540f565b92506132cd84848461328c6064600361540f565b6117e7828461540f565b60008160025481101561331f57600081815260066020526040902054600160e01b811661331d575b80611f955750600019016000818152600660205260409020546132ff565b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000600183831c81169081146133685760006117e7565b6001949350505050565b61100061337f838561540f565b11156133b7576040517fc30436e900000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6133c36000606461540f565b8110806133da57506133d76003606461540f565b81115b156133f857604051634c847c8760e11b815260040160405180910390fd5b80600061340460025490565b90506134108685613f8c565b61341a8183613bd9565b60018411156117b757600061343082600161540f565b90505b61343d858361540f565b811015611cc95761344d81613bab565b6134578184613bd9565b80613461816153d5565b915050613433565b600080613475836137ae565b6060015162ffffff169392505050565b6000613490836132d7565b9050806000806134ae86600090815260086020526040902080549091565b9150915084156134ee576134c381843361163b565b6134ee576134d18333610ff8565b6134ee57604051632ce44b5f60e11b815260040160405180910390fd5b80156134f957600082555b6001600160a01b038316600081815260076020526040902080546fffffffffffffffffffffffffffffffff0190554260a01b7fffffff0000000000000000000000000000000000000000000000000000000000861617177c030000000000000000000000000000000000000000000000000000000017600087815260066020526040902055600160e11b84166135bd57600186016000818152600660205260409020546135bb5760025481146135bb5760008181526006602052604090208590555b505b60405186906000906001600160a01b038616907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef908390a4505060038054600101905550505050565b6011546000906119c7906001613351565b6000811561362f57506001821b929092179182611f95565b506001821b19929092169182611f95565b80518251146136915760405162461bcd60e51b815260206004820152601060248201527f556e6d61746368656420617272617973000000000000000000000000000000006044820152606401611373565b60005b82518110156119ad578181815181106136af576136af6153a9565b6020026020010151601a60008584815181106136cd576136cd6153a9565b6020026020010151815260200190815260200160002090805190602001906136f69291906147e6565b5080613701816153d5565b915050613694565b600080613737817f000000000000000000000000000000000000000000000000000000000000000386613617565b90508215611f955760128390559392505050565b600f80546001600160a01b038381166001600160a01b0319831681179093556040519116919082907f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e090600090a35050565b6015546000906119c7906005613351565b60408051608081018252600080825260208201819052918101829052606081019190915260008281526006602052604090205461114d90604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6015546000906119c7906006613351565b6011546000906119c7906002613351565b835460009061215e90858585613fa6565b8115613870576138706018839055565b8015611afe57611afe6019829055565b600061388b60025490565b905061076861389a848361540f565b11156138d2576040517f7b771dc200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61393786866121548a6138e660018a61550a565b6040516bffffffffffffffffffffffff19606084901b166020820152605f60f81b60348201526035810182905260009060550160405160208183030381529060405280519060200120905092915050565b61395457604051630c7296bb60e11b815260040160405180910390fd5b611cc987828585613372565b604051630a85bd0160e11b81526000906001600160a01b0385169063150b7a029061399590339089908890889060040161554d565b6020604051808303816000875af19250505080156139d0575060408051601f3d908101601f191682019092526139cd91810190615589565b60015b613a2b573d8080156139fe576040519150601f19603f3d011682016040523d82523d6000602084013e613a03565b606091505b508051613a23576040516368d2bf6b60e11b815260040160405180910390fd5b805181602001fd5b6001600160e01b031916630a85bd0160e11b1490506117e7565b60408051608081018252600080825260208201819052918101829052606081019190915261114d613a75836132d7565b604080516080810182526001600160a01b038316815260a083901c67ffffffffffffffff166020820152600160e01b831615159181019190915260e89190911c606082015290565b6060601780546111629061536e565b6060613ad782613fea565b604051602001613ae791906155a6565b6040516020818303038152906040529050919050565b613b1185856127f6896138e660018961550a565b613b2e57604051630c7296bb60e11b815260040160405180910390fd5b6117b78661191760025490565b6011546000906119c7907f0000000000000000000000000000000000000000000000000000000000000003613351565b6040516bffffffffffffffffffffffff19606083901b1660208201526000906034015b604051602081830303815290604052805190602001209050919050565b6000818152600660205260409020546114e757613bc7816132d7565b60008281526006602052604090205550565b613be56000606461540f565b8162ffffff161080613c065750613bfe6003606461540f565b8162ffffff16115b15613c2457604051634c847c8760e11b815260040160405180910390fd5b611afe828261411c565b6040830151600090819067ffffffffffffffff16613c62575067ffffffffffffffff85168452600160408501819052613cb4565b7f59ebe37edcc33bfbd8c05f098812c0e2f24e3bb8b2687deb4ef467e5740fc47b868660200151601b60008a8152602001908152602001600020604051613cab939291906155eb565b60405180910390a15b60208501805190613cc482615689565b67ffffffffffffffff169052506000868152601b60205260409020613cea90858561486a565b506000868152601c602090815260409182902087518154928901519389015160608a015167ffffffffffffffff908116600160c01b0277ffffffffffffffffffffffffffffffffffffffffffffffff928216600160801b02929092166fffffffffffffffffffffffffffffffff96821668010000000000000000027fffffffffffffffffffffffffffffffff0000000000000000000000000000000090961691909316179390931793909316929092171790559050949350505050565b600a546001600160a01b0384166000908152600c602052604081205490918391613dd190866153f0565b613ddb91906156c7565b6117e7919061550a565b80471015613e355760405162461bcd60e51b815260206004820152601d60248201527f416464726573733a20696e73756666696369656e742062616c616e63650000006044820152606401611373565b6000826001600160a01b03168260405160006040518083038185875af1925050503d8060008114613e82576040519150601f19603f3d011682016040523d82523d6000602084013e613e87565b606091505b50509050806119ad5760405162461bcd60e51b815260206004820152603a60248201527f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260448201527f6563697069656e74206d617920686176652072657665727465640000000000006064820152608401611373565b6000808888888888604051602001613f1a9594939291906156db565b604051602081830303815290604052805190602001209050613f7f8185858080601f01602080910402602001604051908101604052809392919081815260200183838082843760009201919091525050601d546001600160a01b0316915061419d9050565b9998505050505050505050565b611afe82826040518060200160405280600081525061420b565b600061215e85838686808060200260200160405190810160405280939291908181526020018383602002808284376000920191909152509294939250506142719050565b60608161402a57505060408051808201909152600181527f3000000000000000000000000000000000000000000000000000000000000000602082015290565b8160005b8115614054578061403e816153d5565b915061404d9050600a836156c7565b915061402e565b60008167ffffffffffffffff81111561406f5761406f614ac4565b6040519080825280601f01601f191660200182016040528015614099576020820181803683370190505b5090505b84156117e7576140ae60018361550a565b91506140bb600a86615715565b6140c690603061540f565b60f81b8183815181106140db576140db6153a9565b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350614115600a866156c7565b945061409d565b60008281526006602052604090205480614161576040517ed5815300000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6000928352600660205260409092207cffffffffffffffffffffffffffffffffffffffffffffffffffffffffff9290921660e89190911b179055565b6000806141b3846141ad87614287565b906142c2565b9050826001600160a01b0316816001600160a01b031614614200576040517f8baa579f00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b506001949350505050565b61421583836142de565b6001600160a01b0383163b156119ad576002548281035b61423f6000868380600101945086613960565b61425c576040516368d2bf6b60e11b815260040160405180910390fd5b81811061422c57816002541461153b57600080fd5b60008261427e8584614408565b14949350505050565b6040517f19457468657265756d205369676e6564204d6573736167653a0a3332000000006020820152603c8101829052600090605c01613b8e565b60008060006142d1858561444d565b91509150611adb816144bd565b60025481614318576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6001600160a01b03831660008181526007602090815260408083208054680100000000000000018802019055848352600690915281206001851460e11b4260a01b178317905582840190839083907fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef8180a4600183015b8181146143c757808360007fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef600080a460010161438f565b50816143ff576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60025550505050565b600081815b8451811015611adb576144398286838151811061442c5761442c6153a9565b6020026020010151614678565b915080614445816153d5565b91505061440d565b6000808251604114156144845760208301516040840151606085015160001a614478878285856146a7565b945094505050506144b6565b8251604014156144ae57602083015160408401516144a3868383614794565b9350935050506144b6565b506000905060025b9250929050565b60008160048111156144d1576144d1615729565b14156144da5750565b60018160048111156144ee576144ee615729565b141561453c5760405162461bcd60e51b815260206004820152601860248201527f45434453413a20696e76616c6964207369676e617475726500000000000000006044820152606401611373565b600281600481111561455057614550615729565b141561459e5760405162461bcd60e51b815260206004820152601f60248201527f45434453413a20696e76616c6964207369676e6174757265206c656e677468006044820152606401611373565b60038160048111156145b2576145b2615729565b141561460b5760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202773272076616c604482015261756560f01b6064820152608401611373565b600481600481111561461f5761461f615729565b14156114e75760405162461bcd60e51b815260206004820152602260248201527f45434453413a20696e76616c6964207369676e6174757265202776272076616c604482015261756560f01b6064820152608401611373565b6000818310614694576000828152602084905260409020611f95565b6000838152602083905260409020611f95565b6000807f7fffffffffffffffffffffffffffffff5d576e7357a4501ddfe92f46681b20a08311156146de575060009050600361478b565b8460ff16601b141580156146f657508460ff16601c14155b15614707575060009050600461478b565b6040805160008082526020820180845289905260ff881692820192909252606081018690526080810185905260019060a0016020604051602081039080840390855afa15801561475b573d6000803e3d6000fd5b5050604051601f1901519150506001600160a01b0381166147845760006001925092505061478b565b9150600090505b94509492505050565b6000807f7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8316816147ca60ff86901c601b61540f565b90506147d8878288856146a7565b935093505050935093915050565b8280546147f29061536e565b90600052602060002090601f016020900481019282614814576000855561485a565b82601f1061482d57805160ff191683800117855561485a565b8280016001018555821561485a579182015b8281111561485a57825182559160200191906001019061483f565b506148669291506148de565b5090565b8280546148769061536e565b90600052602060002090601f016020900481019282614898576000855561485a565b82601f106148b15782800160ff1982351617855561485a565b8280016001018555821561485a579182015b8281111561485a5782358255916020019190600101906148c3565b5b8082111561486657600081556001016148df565b6001600160e01b0319811681146114e757600080fd5b60006020828403121561491b57600080fd5b8135611f95816148f3565b60005b83811015614941578181015183820152602001614929565b838111156115c65750506000910152565b6000815180845261496a816020860160208601614926565b601f01601f19169290920160200192915050565b602081526000611f956020830184614952565b6000602082840312156149a357600080fd5b5035919050565b6001600160a01b03811681146114e757600080fd5b600080604083850312156149d257600080fd5b82356149dd816149aa565b946020939093013593505050565b6000602082840312156149fd57600080fd5b8135611f95816149aa565b60008083601f840112614a1a57600080fd5b50813567ffffffffffffffff811115614a3257600080fd5b6020830191508360208285010111156144b657600080fd5b600080600080600060608688031215614a6257600080fd5b85359450602086013567ffffffffffffffff80821115614a8157600080fd5b614a8d89838a01614a08565b90965094506040880135915080821115614aa657600080fd5b50614ab388828901614a08565b969995985093965092949392505050565b634e487b7160e01b600052604160045260246000fd5b604051601f8201601f1916810167ffffffffffffffff81118282101715614b0357614b03614ac4565b604052919050565b600067ffffffffffffffff821115614b2557614b25614ac4565b5060051b60200190565b600082601f830112614b4057600080fd5b81356020614b55614b5083614b0b565b614ada565b82815260059290921b84018101918181019086841115614b7457600080fd5b8286015b84811015614b98578035614b8b816149aa565b8352918301918301614b78565b509695505050505050565b60008060408385031215614bb657600080fd5b823567ffffffffffffffff811115614bcd57600080fd5b614bd985828601614b2f565b95602094909401359450505050565b600080600060608486031215614bfd57600080fd5b8335614c08816149aa565b92506020840135614c18816149aa565b929592945050506040919091013590565b60008060408385031215614c3c57600080fd5b50508035926020909101359150565b80358015158114614c5b57600080fd5b919050565b600080600060608486031215614c7557600080fd5b614c7e84614c4b565b9250614c8c60208501614c4b565b9150604084013590509250925092565b600067ffffffffffffffff831115614cb657614cb6614ac4565b614cc9601f8401601f1916602001614ada565b9050828152838383011115614cdd57600080fd5b828260208301376000602084830101529392505050565b600082601f830112614d0557600080fd5b611f9583833560208501614c9c565b600060208284031215614d2657600080fd5b813567ffffffffffffffff811115614d3d57600080fd5b6117e784828501614cf4565b600082601f830112614d5a57600080fd5b81356020614d6a614b5083614b0b565b82815260059290921b84018101918181019086841115614d8957600080fd5b8286015b84811015614b9857803567ffffffffffffffff811115614dad5760008081fd5b614dbb8986838b0101614cf4565b845250918301918301614d8d565b60008060408385031215614ddc57600080fd5b823567ffffffffffffffff80821115614df457600080fd5b818501915085601f830112614e0857600080fd5b81356020614e18614b5083614b0b565b82815260059290921b84018101918181019089841115614e3757600080fd5b948201945b83861015614e5557853582529482019490820190614e3c565b96505086013592505080821115614e6b57600080fd5b50614e7885828601614d49565b9150509250929050565b60008083601f840112614e9457600080fd5b50813567ffffffffffffffff811115614eac57600080fd5b6020830191508360208260051b85010111156144b657600080fd5b60008060208385031215614eda57600080fd5b823567ffffffffffffffff811115614ef157600080fd5b614efd85828601614e82565b90969095509350505050565b6020808252825182820181905260009190848201906040850190845b8181101561209857614f738385516001600160a01b03815116825267ffffffffffffffff602082015116602083015260408101511515604083015262ffffff60608201511660608301525050565b9284019260809290920191600101614f25565b600080600060608486031215614f9b57600080fd5b833567ffffffffffffffff811115614fb257600080fd5b614fbe86828701614b2f565b9660208601359650604090950135949350505050565b60008060008060008060c08789031215614fed57600080fd5b614ff687614c4b565b955061500460208801614c4b565b945061501260408801614c4b565b9350606087013592506080870135915060a087013590509295509295509295565b60008060006040848603121561504857600080fd5b83359250602084013567ffffffffffffffff81111561506657600080fd5b61507286828701614a08565b9497909650939450505050565b6020808252825182820181905260009190848201906040850190845b818110156120985783518352928401929184019160010161509b565b600080600080606085870312156150cd57600080fd5b843567ffffffffffffffff8111156150e457600080fd5b6150f087828801614e82565b9095509350506020850135615104816149aa565b9396929550929360400135925050565b60008060006060848603121561512957600080fd5b8335615134816149aa565b95602085013595506040909401359392505050565b6000806000806060858703121561515f57600080fd5b843567ffffffffffffffff81111561517657600080fd5b61518287828801614e82565b90989097506020870135966040013595509350505050565b600080604083850312156151ad57600080fd5b82356151b8816149aa565b91506151c660208401614c4b565b90509250929050565b600080600080608085870312156151e557600080fd5b84356151f0816149aa565b93506020850135615200816149aa565b925060408501359150606085013567ffffffffffffffff81111561522357600080fd5b8501601f8101871361523457600080fd5b61524387823560208401614c9c565b91505092959194509250565b81516001600160a01b0316815260208083015167ffffffffffffffff169082015260408083015115159082015260608083015162ffffff16908201526080810161114d565b600080604083850312156152a757600080fd5b82356152b2816149aa565b915060208301356152c2816149aa565b809150509250929050565b6000806000606084860312156152e257600080fd5b833592506020840135915060408401356152fb816149aa565b809150509250925092565b60008060008060006080868803121561531e57600080fd5b8535945060208601359350604086013567ffffffffffffffff81111561534357600080fd5b61534f88828901614a08565b9094509250615362905060608701614c4b565b90509295509295909350565b600181811c9082168061538257607f821691505b602082108114156153a357634e487b7160e01b600052602260045260246000fd5b50919050565b634e487b7160e01b600052603260045260246000fd5b634e487b7160e01b600052601160045260246000fd5b60006000198214156153e9576153e96153bf565b5060010190565b600081600019048311821515161561540a5761540a6153bf565b500290565b60008219821115615422576154226153bf565b500190565b8183823760009101908152919050565b600081546154448161536e565b6001828116801561545c576001811461546d5761549c565b60ff1984168752828701945061549c565b8560005260208060002060005b858110156154935781548a82015290840190820161547a565b50505082870194505b5050505092915050565b6000611f958284615437565b600084516154c4818460208901614926565b6154d081840186615437565b905083516154e2818360208801614926565b0195945050505050565b600083516154fe818460208801614926565b61215e81840185615437565b60008282101561551c5761551c6153bf565b500390565b600067ffffffffffffffff808316818516808303821115615544576155446153bf565b01949350505050565b60006001600160a01b0380871683528086166020840152508360408301526080606083015261557f6080830184614952565b9695505050505050565b60006020828403121561559b57600080fd5b8151611f95816148f3565b7f2f000000000000000000000000000000000000000000000000000000000000008152600082516155de816001850160208701614926565b9190910160010192915050565b8381526000602067ffffffffffffffff85168184015260606040840152600084546156158161536e565b8060608701526080600180841660008114615637576001811461564b57615679565b60ff1985168984015260a089019550615679565b896000528660002060005b858110156156715781548b8201860152908301908801615656565b8a0184019650505b50939a9950505050505050505050565b600067ffffffffffffffff808316818114156156a7576156a76153bf565b6001019392505050565b634e487b7160e01b600052601260045260246000fd5b6000826156d6576156d66156b1565b500490565b6bffffffffffffffffffffffff198660601b1681528460148201528360348201528183605483013760009101605401908152949350505050565b600082615724576157246156b1565b500690565b634e487b7160e01b600052602160045260246000fdfea264697066735822122091042f0fe0084b1e999013c018d555cd1a84ca7b2df373ff6e0d01c08f71b7c564736f6c634300080b0033

Loading...
Loading
Loading...
Loading
[ Download: CSV Export  ]
[ Download: CSV Export  ]

A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.