ERC-721
Overview
Max Total Supply
666 JBB
Holders
19
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 JBBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Jamzbonbon
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-03 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees 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. */ 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. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // 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; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.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 * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: erc721a/contracts/ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.4; error ApprovalCallerNotOwnerNorApproved(); error ApprovalQueryForNonexistentToken(); error ApproveToCaller(); error ApprovalToCurrentOwner(); error BalanceQueryForZeroAddress(); error MintToZeroAddress(); error MintZeroQuantity(); error OwnerQueryForNonexistentToken(); error TransferCallerNotOwnerNorApproved(); error TransferFromIncorrectOwner(); error TransferToNonERC721ReceiverImplementer(); error TransferToZeroAddress(); error URIQueryForNonexistentToken(); /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at _startTokenId() (defaults to 0, e.g. 0, 1, 2, 3..). * * Assumes that an owner cannot have more than 2**64 - 1 (max value of uint64) of supply. * * Assumes that the maximum token id cannot exceed 2**256 - 1 (max value of uint256). */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Compiler will pack this into a single 256bit word. struct TokenOwnership { // The address of the owner. address addr; // Keeps track of the start time of ownership with minimal overhead for tokenomics. uint64 startTimestamp; // Whether the token has been burned. bool burned; } // Compiler will pack this into a single 256bit word. struct AddressData { // Realistically, 2**64-1 is more than enough. uint64 balance; // Keeps track of mint count with minimal overhead for tokenomics. uint64 numberMinted; // Keeps track of burn count with minimal overhead for tokenomics. uint64 numberBurned; // For miscellaneous variable(s) pertaining to the address // (e.g. number of whitelist mint slots used). // If there are multiple variables, please pack them into a uint64. uint64 aux; } // The tokenId of the next token to be minted. uint256 internal _currentIndex; // The number of tokens burned. uint256 internal _burnCounter; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See _ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; _currentIndex = _startTokenId(); } /** * To change the starting tokenId, please override this function. */ function _startTokenId() internal view virtual returns (uint256) { return 0; } /** * @dev Burned tokens are calculated here, use _totalMinted() if you want to count just minted tokens. */ function totalSupply() public view returns (uint256) { // Counter underflow is impossible as _burnCounter cannot be incremented // more than _currentIndex - _startTokenId() times unchecked { return _currentIndex - _burnCounter - _startTokenId(); } } /** * Returns the total amount of tokens minted in the contract. */ function _totalMinted() internal view returns (uint256) { // Counter underflow is impossible as _currentIndex does not decrement, // and it is initialized to _startTokenId() unchecked { return _currentIndex - _startTokenId(); } } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { if (owner == address(0)) revert BalanceQueryForZeroAddress(); return uint256(_addressData[owner].balance); } /** * Returns the number of tokens minted by `owner`. */ function _numberMinted(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberMinted); } /** * Returns the number of tokens burned by or on behalf of `owner`. */ function _numberBurned(address owner) internal view returns (uint256) { return uint256(_addressData[owner].numberBurned); } /** * Returns the auxillary data for `owner`. (e.g. number of whitelist mint slots used). */ function _getAux(address owner) internal view returns (uint64) { return _addressData[owner].aux; } /** * Sets the auxillary data for `owner`. (e.g. number of whitelist mint slots used). * If there are multiple variables, please pack them into a uint64. */ function _setAux(address owner, uint64 aux) internal { _addressData[owner].aux = aux; } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function _ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { uint256 curr = tokenId; unchecked { if (_startTokenId() <= curr && curr < _currentIndex) { TokenOwnership memory ownership = _ownerships[curr]; if (!ownership.burned) { if (ownership.addr != address(0)) { return ownership; } // Invariant: // There will always be an ownership that has an address and is not burned // before an ownership that does not have an address and is not burned. // Hence, curr will not underflow. while (true) { curr--; ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } } } revert OwnerQueryForNonexistentToken(); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return _ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { if (!_exists(tokenId)) revert URIQueryForNonexistentToken(); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); if (to == owner) revert ApprovalToCurrentOwner(); if (_msgSender() != owner && !isApprovedForAll(owner, _msgSender())) { revert ApprovalCallerNotOwnerNorApproved(); } _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { if (!_exists(tokenId)) revert ApprovalQueryForNonexistentToken(); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { if (operator == _msgSender()) revert ApproveToCaller(); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { _transfer(from, to, tokenId); if (to.isContract() && !_checkContractOnERC721Received(from, to, tokenId, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), */ function _exists(uint256 tokenId) internal view returns (bool) { return _startTokenId() <= tokenId && tokenId < _currentIndex && !_ownerships[tokenId].burned; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = _currentIndex; if (to == address(0)) revert MintToZeroAddress(); if (quantity == 0) revert MintZeroQuantity(); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 1.8e19 (2**64) - 1 // updatedIndex overflows if _currentIndex + quantity > 1.2e77 (2**256) - 1 unchecked { _addressData[to].balance += uint64(quantity); _addressData[to].numberMinted += uint64(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; uint256 end = updatedIndex + quantity; if (safe && to.isContract()) { do { emit Transfer(address(0), to, updatedIndex); if (!_checkContractOnERC721Received(address(0), to, updatedIndex++, _data)) { revert TransferToNonERC721ReceiverImplementer(); } } while (updatedIndex != end); // Reentrancy protection if (_currentIndex != startTokenId) revert(); } else { do { emit Transfer(address(0), to, updatedIndex++); } while (updatedIndex != end); } _currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); if (prevOwnership.addr != from) revert TransferFromIncorrectOwner(); bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); if (to == address(0)) revert TransferToZeroAddress(); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = to; currSlot.startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev This is equivalent to _burn(tokenId, false) */ function _burn(uint256 tokenId) internal virtual { _burn(tokenId, false); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId, bool approvalCheck) internal virtual { TokenOwnership memory prevOwnership = _ownershipOf(tokenId); address from = prevOwnership.addr; if (approvalCheck) { bool isApprovedOrOwner = (_msgSender() == from || isApprovedForAll(from, _msgSender()) || getApproved(tokenId) == _msgSender()); if (!isApprovedOrOwner) revert TransferCallerNotOwnerNorApproved(); } _beforeTokenTransfers(from, address(0), tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, from); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { AddressData storage addressData = _addressData[from]; addressData.balance -= 1; addressData.numberBurned += 1; // Keep track of who burned the token, and the timestamp of burning. TokenOwnership storage currSlot = _ownerships[tokenId]; currSlot.addr = from; currSlot.startTimestamp = uint64(block.timestamp); currSlot.burned = true; // If the ownership slot of tokenId+1 is not explicitly set, that means the burn initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; TokenOwnership storage nextSlot = _ownerships[nextTokenId]; if (nextSlot.addr == address(0)) { // This will suffice for checking _exists(nextTokenId), // as a burned slot cannot contain the zero address. if (nextTokenId != _currentIndex) { nextSlot.addr = from; nextSlot.startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, address(0), tokenId); _afterTokenTransfers(from, address(0), tokenId, 1); // Overflow not possible, as _burnCounter cannot be exceed _currentIndex times. unchecked { _burnCounter++; } } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkContractOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert TransferToNonERC721ReceiverImplementer(); } else { assembly { revert(add(32, reason), mload(reason)) } } } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * And also called before burning one token. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, `tokenId` will be burned by `from`. * - `from` and `to` are never both zero. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * And also called after one token has been burned. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, `from`'s `tokenId` has been * transferred to `to`. * - When `from` is zero, `tokenId` has been minted for `to`. * - When `to` is zero, `tokenId` has been burned by `from`. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: contracts/Jamzbonbon.sol pragma solidity 0.8.11; contract Jamzbonbon is ERC721A, Ownable { uint256 public constant MAX_SUPPLY = 666; uint256 public constant BONBON_LIST_SALE_PRICE = 0.03 ether; uint256 public constant PRIMARY_SALE_PRICE = 0.04 ether; uint256 public constant MAX_MINT_PER_TX = 10; uint256 public constant MAX_BONBON_LIST_MINT_PER_ADDRESS = 2; uint256 public tokenCounter; bool private bonBonListSaleEnabled; bool private primarySaleEnabled; string public baseTokenURI; bytes32 private merkleRoot; mapping(address => uint256) private bonBonClaimedList; constructor(string memory _baseTokenURI) ERC721A("Jamzbonbon", "JBB") { baseTokenURI = _baseTokenURI; } function setBonBonListSaleEnabled(bool _bonBonListSaleEnabled) external onlyOwner { bonBonListSaleEnabled = _bonBonListSaleEnabled; } function setPrimarySaleEnabled(bool _primarySaleEnabled) external onlyOwner { primarySaleEnabled = _primarySaleEnabled; } function startPrimarySale() external onlyOwner { primarySaleEnabled = true; bonBonListSaleEnabled = false; } function setMerkleRoot(bytes32 _merkleRoot) external onlyOwner { merkleRoot = _merkleRoot; } function withdraw() external onlyOwner { (bool success, ) = msg.sender.call{value: address(this).balance}(""); require(success, "WITHDRAWAL_FAILED"); } function _baseURI() internal view override returns (string memory) { return baseTokenURI; } function setBaseURI(string calldata baseURI) external onlyOwner { baseTokenURI = baseURI; } function bonBonListMint(bytes32[] calldata proof, uint256 n) external payable { require(bonBonListSaleEnabled, "BONBON_LIST_SALE_NOT_ACTIVE"); require(BONBON_LIST_SALE_PRICE * n <= msg.value , "NOT_ENOUGH_ETHER"); require(bonBonClaimedList[msg.sender] + n <= MAX_BONBON_LIST_MINT_PER_ADDRESS, "EXCEEDED_MAX_BONBON_LIST_MINT_LIMIT"); bytes32 leaf = keccak256(abi.encodePacked(msg.sender)); require(MerkleProof.verify(proof,merkleRoot,leaf),"NOT_BONBON_LISTED"); tokenCounter += n; require(tokenCounter <= MAX_SUPPLY,"NOT_ENOUGH_SUPPLY"); bonBonClaimedList[msg.sender] += n; _safeMint(msg.sender, n); } function reserveMint(uint256 n) external onlyOwner { tokenCounter += n; require(tokenCounter <= MAX_SUPPLY,"NOT_ENOUGH_SUPPLY"); _safeMint(msg.sender, n); } function mint(uint256 n) external payable { require(primarySaleEnabled, "PRIMARY_SALE_NOT_ACTIVE"); require(n <= MAX_MINT_PER_TX, "EXCEEDED_MAX_MINT_LIMIT"); require(PRIMARY_SALE_PRICE * n <= msg.value, "NOT_ENOUGH_ETHER"); tokenCounter += n; require(tokenCounter <= MAX_SUPPLY,"NOT_ENOUGH_SUPPLY"); _safeMint(msg.sender, n); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[],"name":"ApprovalCallerNotOwnerNorApproved","type":"error"},{"inputs":[],"name":"ApprovalQueryForNonexistentToken","type":"error"},{"inputs":[],"name":"ApprovalToCurrentOwner","type":"error"},{"inputs":[],"name":"ApproveToCaller","type":"error"},{"inputs":[],"name":"BalanceQueryForZeroAddress","type":"error"},{"inputs":[],"name":"MintToZeroAddress","type":"error"},{"inputs":[],"name":"MintZeroQuantity","type":"error"},{"inputs":[],"name":"OwnerQueryForNonexistentToken","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":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","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":"BONBON_LIST_SALE_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_BONBON_LIST_MINT_PER_ADDRESS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRIMARY_SALE_PRICE","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":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"},{"internalType":"uint256","name":"n","type":"uint256"}],"name":"bonBonListMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"mint","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":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"n","type":"uint256"}],"name":"reserveMint","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":"_bonBonListSaleEnabled","type":"bool"}],"name":"setBonBonListSaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes32","name":"_merkleRoot","type":"bytes32"}],"name":"setMerkleRoot","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_primarySaleEnabled","type":"bool"}],"name":"setPrimarySaleEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startPrimarySale","outputs":[],"stateMutability":"nonpayable","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":[],"name":"tokenCounter","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"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":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b506040516200433e3803806200433e83398181016040528101906200003791906200044d565b6040518060400160405280600a81526020017f4a616d7a626f6e626f6e000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f4a424200000000000000000000000000000000000000000000000000000000008152508160029080519060200190620000bb92919062000200565b508060039080519060200190620000d492919062000200565b50620000e56200012d60201b60201c565b60008190555050506200010d620001016200013260201b60201c565b6200013a60201b60201c565b80600b90805190602001906200012592919062000200565b505062000503565b600090565b600033905090565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200020e90620004cd565b90600052602060002090601f0160209004810192826200023257600085556200027e565b82601f106200024d57805160ff19168380011785556200027e565b828001600101855582156200027e579182015b828111156200027d57825182559160200191906001019062000260565b5b5090506200028d919062000291565b5090565b5b80821115620002ac57600081600090555060010162000292565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200031982620002ce565b810181811067ffffffffffffffff821117156200033b576200033a620002df565b5b80604052505050565b600062000350620002b0565b90506200035e82826200030e565b919050565b600067ffffffffffffffff821115620003815762000380620002df565b5b6200038c82620002ce565b9050602081019050919050565b60005b83811015620003b95780820151818401526020810190506200039c565b83811115620003c9576000848401525b50505050565b6000620003e6620003e08462000363565b62000344565b905082815260208101848484011115620004055762000404620002c9565b5b6200041284828562000399565b509392505050565b600082601f830112620004325762000431620002c4565b5b815162000444848260208601620003cf565b91505092915050565b600060208284031215620004665762000465620002ba565b5b600082015167ffffffffffffffff811115620004875762000486620002bf565b5b62000495848285016200041a565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620004e657607f821691505b60208210811415620004fd57620004fc6200049e565b5b50919050565b613e2b80620005136000396000f3fe6080604052600436106101ee5760003560e01c8063715018a61161010d578063b99a1a9a116100a0578063e985e9c51161006f578063e985e9c5146106ab578063eab70ccd146106e8578063f2d1a24114610711578063f2fde38b1461073a578063fb270bf714610763576101ee565b8063b99a1a9a146105ed578063c87b56dd14610618578063d082e38114610655578063d547cfb714610680576101ee565b806395d89b41116100dc57806395d89b4114610554578063a0712d681461057f578063a22cb4651461059b578063b88d4fde146105c4576101ee565b8063715018a6146104be5780637cb64759146104d55780638da5cb5b146104fe5780638ecad72114610529576101ee565b80632db88de41161018557806355f804b31161015457806355f804b3146103f05780636352211e146104195780636727e2d21461045657806370a0823114610481576101ee565b80632db88de41461036957806332cb6b0c146103855780633ccfd60b146103b057806342842e0e146103c7576101ee565b80631342ff4c116101c15780631342ff4c146102c157806318160ddd146102ea57806318cd2dd01461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612dbe565b61077a565b6040516102279190612e06565b60405180910390f35b34801561023c57600080fd5b5061024561085c565b6040516102529190612eba565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612f12565b6108ee565b60405161028f9190612f80565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612fc7565b61096a565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190612f12565b610a75565b005b3480156102f657600080fd5b506102ff610b5e565b60405161030c9190613016565b60405180910390f35b34801561032157600080fd5b5061032a610b75565b6040516103379190613016565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613031565b610b80565b005b610383600480360381019061037e91906130e9565b610b90565b005b34801561039157600080fd5b5061039a610e40565b6040516103a79190613016565b60405180910390f35b3480156103bc57600080fd5b506103c5610e46565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190613031565b610f71565b005b3480156103fc57600080fd5b506104176004803603810190610412919061319f565b610f91565b005b34801561042557600080fd5b50610440600480360381019061043b9190612f12565b611023565b60405161044d9190612f80565b60405180910390f35b34801561046257600080fd5b5061046b611039565b6040516104789190613016565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906131ec565b611044565b6040516104b59190613016565b60405180910390f35b3480156104ca57600080fd5b506104d3611114565b005b3480156104e157600080fd5b506104fc60048036038101906104f7919061324f565b61119c565b005b34801561050a57600080fd5b50610513611222565b6040516105209190612f80565b60405180910390f35b34801561053557600080fd5b5061053e61124c565b60405161054b9190613016565b60405180910390f35b34801561056057600080fd5b50610569611251565b6040516105769190612eba565b60405180910390f35b61059960048036038101906105949190612f12565b6112e3565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906132a8565b611438565b005b3480156105d057600080fd5b506105eb60048036038101906105e69190613418565b6115b0565b005b3480156105f957600080fd5b5061060261162c565b60405161060f9190613016565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612f12565b611631565b60405161064c9190612eba565b60405180910390f35b34801561066157600080fd5b5061066a6116d0565b6040516106779190613016565b60405180910390f35b34801561068c57600080fd5b506106956116d6565b6040516106a29190612eba565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd919061349b565b611764565b6040516106df9190612e06565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a91906134db565b6117f8565b005b34801561071d57600080fd5b50610738600480360381019061073391906134db565b611891565b005b34801561074657600080fd5b50610761600480360381019061075c91906131ec565b61192a565b005b34801561076f57600080fd5b50610778611a22565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610855575061085482611ad6565b5b9050919050565b60606002805461086b90613537565b80601f016020809104026020016040519081016040528092919081815260200182805461089790613537565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f982611b40565b61092f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097582611023565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109dd576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109fc611b8e565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a2e5750610a2c81610a27611b8e565b611764565b155b15610a65576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a70838383611b96565b505050565b610a7d611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610a9b611222565b73ffffffffffffffffffffffffffffffffffffffff1614610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae8906135b5565b60405180910390fd5b8060096000828254610b039190613604565b9250508190555061029a6009541115610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906136a6565b60405180910390fd5b610b5b3382611c48565b50565b6000610b68611c66565b6001546000540303905090565b666a94d74f43000081565b610b8b838383611c6b565b505050565b600a60009054906101000a900460ff16610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613712565b60405180910390fd5b3481666a94d74f430000610bf39190613732565b1115610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b906137d8565b60405180910390fd5b600281600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c819190613604565b1115610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061386a565b60405180910390fd5b600033604051602001610cd591906138d2565b604051602081830303815290604052805190602001209050610d3b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5483612121565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613939565b60405180910390fd5b8160096000828254610d8c9190613604565b9250508190555061029a6009541115610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906136a6565b60405180910390fd5b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e299190613604565b92505081905550610e3a3383611c48565b50505050565b61029a81565b610e4e611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611222565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906135b5565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ee89061398a565b60006040518083038185875af1925050503d8060008114610f25576040519150601f19603f3d011682016040523d82523d6000602084013e610f2a565b606091505b5050905080610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f65906139eb565b60405180910390fd5b50565b610f8c838383604051806020016040528060008152506115b0565b505050565b610f99611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610fb7611222565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906135b5565b60405180910390fd5b8181600b919061101e929190612c6c565b505050565b600061102e82612138565b600001519050919050565b668e1bc9bf04000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ac576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61111c611b8e565b73ffffffffffffffffffffffffffffffffffffffff1661113a611222565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611187906135b5565b60405180910390fd5b61119a60006123c7565b565b6111a4611b8e565b73ffffffffffffffffffffffffffffffffffffffff166111c2611222565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906135b5565b60405180910390fd5b80600c8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a81565b60606003805461126090613537565b80601f016020809104026020016040519081016040528092919081815260200182805461128c90613537565b80156112d95780601f106112ae576101008083540402835291602001916112d9565b820191906000526020600020905b8154815290600101906020018083116112bc57829003601f168201915b5050505050905090565b600a60019054906101000a900460ff16611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990613a57565b60405180910390fd5b600a811115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d90613ac3565b60405180910390fd5b3481668e1bc9bf04000061138a9190613732565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906137d8565b60405180910390fd5b80600960008282546113dd9190613604565b9250508190555061029a600954111561142b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611422906136a6565b60405180910390fd5b6114353382611c48565b50565b611440611b8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a5576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114b2611b8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661155f611b8e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115a49190612e06565b60405180910390a35050565b6115bb848484611c6b565b6115da8373ffffffffffffffffffffffffffffffffffffffff1661248d565b80156115ef57506115ed848484846124b0565b155b15611626576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600281565b606061163c82611b40565b611672576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061167c612601565b905060008151141561169d57604051806020016040528060008152506116c8565b806116a784612693565b6040516020016116b8929190613b1f565b6040516020818303038152906040525b915050919050565b60095481565b600b80546116e390613537565b80601f016020809104026020016040519081016040528092919081815260200182805461170f90613537565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b505050505081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611800611b8e565b73ffffffffffffffffffffffffffffffffffffffff1661181e611222565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b906135b5565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b611899611b8e565b73ffffffffffffffffffffffffffffffffffffffff166118b7611222565b73ffffffffffffffffffffffffffffffffffffffff161461190d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611904906135b5565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611932611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611950611222565b73ffffffffffffffffffffffffffffffffffffffff16146119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d906135b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613bb5565b60405180910390fd5b611a1f816123c7565b50565b611a2a611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611a48611222565b73ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906135b5565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506000600a60006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611b4b611c66565b11158015611b5a575060005482105b8015611b87575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611c628282604051806020016040528060008152506127f4565b5050565b600090565b6000611c7682612138565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611d02611b8e565b73ffffffffffffffffffffffffffffffffffffffff161480611d315750611d3085611d2b611b8e565b611764565b5b80611d765750611d3f611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611d5e846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611daf576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e16576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e238585856001612806565b611e2f60008487611b96565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120af5760005482146120ae57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461211a858585600161280c565b5050505050565b60008261212e8584612812565b1490509392505050565b612140612cf2565b60008290508061214e611c66565b1115801561215d575060005481105b15612390576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161238e57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122725780925050506123c2565b5b60011561238d57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123885780925050506123c2565b612273565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124d6611b8e565b8786866040518563ffffffff1660e01b81526004016124f89493929190613c2a565b6020604051808303816000875af192505050801561253457506040513d601f19601f820116820180604052508101906125319190613c8b565b60015b6125ae573d8060008114612564576040519150601f19603f3d011682016040523d82523d6000602084013e612569565b606091505b506000815114156125a6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b805461261090613537565b80601f016020809104026020016040519081016040528092919081815260200182805461263c90613537565b80156126895780601f1061265e57610100808354040283529160200191612689565b820191906000526020600020905b81548152906001019060200180831161266c57829003601f168201915b5050505050905090565b606060008214156126db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ef565b600082905060005b6000821461270d5780806126f690613cb8565b915050600a826127069190613d30565b91506126e3565b60008167ffffffffffffffff811115612729576127286132ed565b5b6040519080825280601f01601f19166020018201604052801561275b5781602001600182028036833780820191505090505b5090505b600085146127e8576001826127749190613d61565b9150600a856127839190613d95565b603061278f9190613604565b60f81b8183815181106127a5576127a4613dc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127e19190613d30565b945061275f565b8093505050505b919050565b6128018383836001612887565b505050565b50505050565b50505050565b60008082905060005b845181101561287c57600085828151811061283957612838613dc6565b5b6020026020010151905080831161285b576128548382612c55565b9250612868565b6128658184612c55565b92505b50808061287490613cb8565b91505061281b565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128f4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561292f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61293c6000868387612806565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612b065750612b058773ffffffffffffffffffffffffffffffffffffffff1661248d565b5b15612bcc575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b7b60008884806001019550886124b0565b612bb1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612b0c578260005414612bc757600080fd5b612c38565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612bcd575b816000819055505050612c4e600086838761280c565b5050505050565b600082600052816020526040600020905092915050565b828054612c7890613537565b90600052602060002090601f016020900481019282612c9a5760008555612ce1565b82601f10612cb357803560ff1916838001178555612ce1565b82800160010185558215612ce1579182015b82811115612ce0578235825591602001919060010190612cc5565b5b509050612cee9190612d35565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612d4e576000816000905550600101612d36565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d9b81612d66565b8114612da657600080fd5b50565b600081359050612db881612d92565b92915050565b600060208284031215612dd457612dd3612d5c565b5b6000612de284828501612da9565b91505092915050565b60008115159050919050565b612e0081612deb565b82525050565b6000602082019050612e1b6000830184612df7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e5b578082015181840152602081019050612e40565b83811115612e6a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e8c82612e21565b612e968185612e2c565b9350612ea6818560208601612e3d565b612eaf81612e70565b840191505092915050565b60006020820190508181036000830152612ed48184612e81565b905092915050565b6000819050919050565b612eef81612edc565b8114612efa57600080fd5b50565b600081359050612f0c81612ee6565b92915050565b600060208284031215612f2857612f27612d5c565b5b6000612f3684828501612efd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f6a82612f3f565b9050919050565b612f7a81612f5f565b82525050565b6000602082019050612f956000830184612f71565b92915050565b612fa481612f5f565b8114612faf57600080fd5b50565b600081359050612fc181612f9b565b92915050565b60008060408385031215612fde57612fdd612d5c565b5b6000612fec85828601612fb2565b9250506020612ffd85828601612efd565b9150509250929050565b61301081612edc565b82525050565b600060208201905061302b6000830184613007565b92915050565b60008060006060848603121561304a57613049612d5c565b5b600061305886828701612fb2565b935050602061306986828701612fb2565b925050604061307a86828701612efd565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126130a9576130a8613084565b5b8235905067ffffffffffffffff8111156130c6576130c5613089565b5b6020830191508360208202830111156130e2576130e161308e565b5b9250929050565b60008060006040848603121561310257613101612d5c565b5b600084013567ffffffffffffffff8111156131205761311f612d61565b5b61312c86828701613093565b9350935050602061313f86828701612efd565b9150509250925092565b60008083601f84011261315f5761315e613084565b5b8235905067ffffffffffffffff81111561317c5761317b613089565b5b6020830191508360018202830111156131985761319761308e565b5b9250929050565b600080602083850312156131b6576131b5612d5c565b5b600083013567ffffffffffffffff8111156131d4576131d3612d61565b5b6131e085828601613149565b92509250509250929050565b60006020828403121561320257613201612d5c565b5b600061321084828501612fb2565b91505092915050565b6000819050919050565b61322c81613219565b811461323757600080fd5b50565b60008135905061324981613223565b92915050565b60006020828403121561326557613264612d5c565b5b60006132738482850161323a565b91505092915050565b61328581612deb565b811461329057600080fd5b50565b6000813590506132a28161327c565b92915050565b600080604083850312156132bf576132be612d5c565b5b60006132cd85828601612fb2565b92505060206132de85828601613293565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61332582612e70565b810181811067ffffffffffffffff82111715613344576133436132ed565b5b80604052505050565b6000613357612d52565b9050613363828261331c565b919050565b600067ffffffffffffffff821115613383576133826132ed565b5b61338c82612e70565b9050602081019050919050565b82818337600083830152505050565b60006133bb6133b684613368565b61334d565b9050828152602081018484840111156133d7576133d66132e8565b5b6133e2848285613399565b509392505050565b600082601f8301126133ff576133fe613084565b5b813561340f8482602086016133a8565b91505092915050565b6000806000806080858703121561343257613431612d5c565b5b600061344087828801612fb2565b945050602061345187828801612fb2565b935050604061346287828801612efd565b925050606085013567ffffffffffffffff81111561348357613482612d61565b5b61348f878288016133ea565b91505092959194509250565b600080604083850312156134b2576134b1612d5c565b5b60006134c085828601612fb2565b92505060206134d185828601612fb2565b9150509250929050565b6000602082840312156134f1576134f0612d5c565b5b60006134ff84828501613293565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061354f57607f821691505b6020821081141561356357613562613508565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061359f602083612e2c565b91506135aa82613569565b602082019050919050565b600060208201905081810360008301526135ce81613592565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360f82612edc565b915061361a83612edc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561364f5761364e6135d5565b5b828201905092915050565b7f4e4f545f454e4f5547485f535550504c59000000000000000000000000000000600082015250565b6000613690601183612e2c565b915061369b8261365a565b602082019050919050565b600060208201905081810360008301526136bf81613683565b9050919050565b7f424f4e424f4e5f4c4953545f53414c455f4e4f545f4143544956450000000000600082015250565b60006136fc601b83612e2c565b9150613707826136c6565b602082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b600061373d82612edc565b915061374883612edc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613781576137806135d5565b5b828202905092915050565b7f4e4f545f454e4f5547485f455448455200000000000000000000000000000000600082015250565b60006137c2601083612e2c565b91506137cd8261378c565b602082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f45584345454445445f4d41585f424f4e424f4e5f4c4953545f4d494e545f4c4960008201527f4d49540000000000000000000000000000000000000000000000000000000000602082015250565b6000613854602383612e2c565b915061385f826137f8565b604082019050919050565b6000602082019050818103600083015261388381613847565b9050919050565b60008160601b9050919050565b60006138a28261388a565b9050919050565b60006138b482613897565b9050919050565b6138cc6138c782612f5f565b6138a9565b82525050565b60006138de82846138bb565b60148201915081905092915050565b7f4e4f545f424f4e424f4e5f4c4953544544000000000000000000000000000000600082015250565b6000613923601183612e2c565b915061392e826138ed565b602082019050919050565b6000602082019050818103600083015261395281613916565b9050919050565b600081905092915050565b50565b6000613974600083613959565b915061397f82613964565b600082019050919050565b600061399582613967565b9150819050919050565b7f5749544844524157414c5f4641494c4544000000000000000000000000000000600082015250565b60006139d5601183612e2c565b91506139e08261399f565b602082019050919050565b60006020820190508181036000830152613a04816139c8565b9050919050565b7f5052494d4152595f53414c455f4e4f545f414354495645000000000000000000600082015250565b6000613a41601783612e2c565b9150613a4c82613a0b565b602082019050919050565b60006020820190508181036000830152613a7081613a34565b9050919050565b7f45584345454445445f4d41585f4d494e545f4c494d4954000000000000000000600082015250565b6000613aad601783612e2c565b9150613ab882613a77565b602082019050919050565b60006020820190508181036000830152613adc81613aa0565b9050919050565b600081905092915050565b6000613af982612e21565b613b038185613ae3565b9350613b13818560208601612e3d565b80840191505092915050565b6000613b2b8285613aee565b9150613b378284613aee565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9f602683612e2c565b9150613baa82613b43565b604082019050919050565b60006020820190508181036000830152613bce81613b92565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613bfc82613bd5565b613c068185613be0565b9350613c16818560208601612e3d565b613c1f81612e70565b840191505092915050565b6000608082019050613c3f6000830187612f71565b613c4c6020830186612f71565b613c596040830185613007565b8181036060830152613c6b8184613bf1565b905095945050505050565b600081519050613c8581612d92565b92915050565b600060208284031215613ca157613ca0612d5c565b5b6000613caf84828501613c76565b91505092915050565b6000613cc382612edc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cf657613cf56135d5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d3b82612edc565b9150613d4683612edc565b925082613d5657613d55613d01565b5b828204905092915050565b6000613d6c82612edc565b9150613d7783612edc565b925082821015613d8a57613d896135d5565b5b828203905092915050565b6000613da082612edc565b9150613dab83612edc565b925082613dbb57613dba613d01565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212208730b81b8ba7060fad70d1b4b8b14ee30947840baa13b462e32f1c368a6de94e64736f6c634300080b00330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6a616d7a626f6e626f6e2e6d7970696e6174612e636c6f75642f697066732f516d616458707a48384873613241377673786447503955524470626574714c6467706e4270757769356150656d732f00000000000000000000
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063715018a61161010d578063b99a1a9a116100a0578063e985e9c51161006f578063e985e9c5146106ab578063eab70ccd146106e8578063f2d1a24114610711578063f2fde38b1461073a578063fb270bf714610763576101ee565b8063b99a1a9a146105ed578063c87b56dd14610618578063d082e38114610655578063d547cfb714610680576101ee565b806395d89b41116100dc57806395d89b4114610554578063a0712d681461057f578063a22cb4651461059b578063b88d4fde146105c4576101ee565b8063715018a6146104be5780637cb64759146104d55780638da5cb5b146104fe5780638ecad72114610529576101ee565b80632db88de41161018557806355f804b31161015457806355f804b3146103f05780636352211e146104195780636727e2d21461045657806370a0823114610481576101ee565b80632db88de41461036957806332cb6b0c146103855780633ccfd60b146103b057806342842e0e146103c7576101ee565b80631342ff4c116101c15780631342ff4c146102c157806318160ddd146102ea57806318cd2dd01461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a60048036038101906102159190612dbe565b61077a565b6040516102279190612e06565b60405180910390f35b34801561023c57600080fd5b5061024561085c565b6040516102529190612eba565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190612f12565b6108ee565b60405161028f9190612f80565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba9190612fc7565b61096a565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190612f12565b610a75565b005b3480156102f657600080fd5b506102ff610b5e565b60405161030c9190613016565b60405180910390f35b34801561032157600080fd5b5061032a610b75565b6040516103379190613016565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190613031565b610b80565b005b610383600480360381019061037e91906130e9565b610b90565b005b34801561039157600080fd5b5061039a610e40565b6040516103a79190613016565b60405180910390f35b3480156103bc57600080fd5b506103c5610e46565b005b3480156103d357600080fd5b506103ee60048036038101906103e99190613031565b610f71565b005b3480156103fc57600080fd5b506104176004803603810190610412919061319f565b610f91565b005b34801561042557600080fd5b50610440600480360381019061043b9190612f12565b611023565b60405161044d9190612f80565b60405180910390f35b34801561046257600080fd5b5061046b611039565b6040516104789190613016565b60405180910390f35b34801561048d57600080fd5b506104a860048036038101906104a391906131ec565b611044565b6040516104b59190613016565b60405180910390f35b3480156104ca57600080fd5b506104d3611114565b005b3480156104e157600080fd5b506104fc60048036038101906104f7919061324f565b61119c565b005b34801561050a57600080fd5b50610513611222565b6040516105209190612f80565b60405180910390f35b34801561053557600080fd5b5061053e61124c565b60405161054b9190613016565b60405180910390f35b34801561056057600080fd5b50610569611251565b6040516105769190612eba565b60405180910390f35b61059960048036038101906105949190612f12565b6112e3565b005b3480156105a757600080fd5b506105c260048036038101906105bd91906132a8565b611438565b005b3480156105d057600080fd5b506105eb60048036038101906105e69190613418565b6115b0565b005b3480156105f957600080fd5b5061060261162c565b60405161060f9190613016565b60405180910390f35b34801561062457600080fd5b5061063f600480360381019061063a9190612f12565b611631565b60405161064c9190612eba565b60405180910390f35b34801561066157600080fd5b5061066a6116d0565b6040516106779190613016565b60405180910390f35b34801561068c57600080fd5b506106956116d6565b6040516106a29190612eba565b60405180910390f35b3480156106b757600080fd5b506106d260048036038101906106cd919061349b565b611764565b6040516106df9190612e06565b60405180910390f35b3480156106f457600080fd5b5061070f600480360381019061070a91906134db565b6117f8565b005b34801561071d57600080fd5b50610738600480360381019061073391906134db565b611891565b005b34801561074657600080fd5b50610761600480360381019061075c91906131ec565b61192a565b005b34801561076f57600080fd5b50610778611a22565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610855575061085482611ad6565b5b9050919050565b60606002805461086b90613537565b80601f016020809104026020016040519081016040528092919081815260200182805461089790613537565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f982611b40565b61092f576040517fcf4700e400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b6006600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097582611023565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109dd576040517f943f7b8c00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109fc611b8e565b73ffffffffffffffffffffffffffffffffffffffff1614158015610a2e5750610a2c81610a27611b8e565b611764565b155b15610a65576040517fcfb3b94200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b610a70838383611b96565b505050565b610a7d611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610a9b611222565b73ffffffffffffffffffffffffffffffffffffffff1614610af1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae8906135b5565b60405180910390fd5b8060096000828254610b039190613604565b9250508190555061029a6009541115610b51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b48906136a6565b60405180910390fd5b610b5b3382611c48565b50565b6000610b68611c66565b6001546000540303905090565b666a94d74f43000081565b610b8b838383611c6b565b505050565b600a60009054906101000a900460ff16610bdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bd690613712565b60405180910390fd5b3481666a94d74f430000610bf39190613732565b1115610c34576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2b906137d8565b60405180910390fd5b600281600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610c819190613604565b1115610cc2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cb99061386a565b60405180910390fd5b600033604051602001610cd591906138d2565b604051602081830303815290604052805190602001209050610d3b848480806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f82011690508083019250505050505050600c5483612121565b610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7190613939565b60405180910390fd5b8160096000828254610d8c9190613604565b9250508190555061029a6009541115610dda576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd1906136a6565b60405180910390fd5b81600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e299190613604565b92505081905550610e3a3383611c48565b50505050565b61029a81565b610e4e611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610e6c611222565b73ffffffffffffffffffffffffffffffffffffffff1614610ec2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eb9906135b5565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff1647604051610ee89061398a565b60006040518083038185875af1925050503d8060008114610f25576040519150601f19603f3d011682016040523d82523d6000602084013e610f2a565b606091505b5050905080610f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f65906139eb565b60405180910390fd5b50565b610f8c838383604051806020016040528060008152506115b0565b505050565b610f99611b8e565b73ffffffffffffffffffffffffffffffffffffffff16610fb7611222565b73ffffffffffffffffffffffffffffffffffffffff161461100d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611004906135b5565b60405180910390fd5b8181600b919061101e929190612c6c565b505050565b600061102e82612138565b600001519050919050565b668e1bc9bf04000081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110ac576040517f8f4eb60400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600560008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900467ffffffffffffffff1667ffffffffffffffff169050919050565b61111c611b8e565b73ffffffffffffffffffffffffffffffffffffffff1661113a611222565b73ffffffffffffffffffffffffffffffffffffffff1614611190576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611187906135b5565b60405180910390fd5b61119a60006123c7565b565b6111a4611b8e565b73ffffffffffffffffffffffffffffffffffffffff166111c2611222565b73ffffffffffffffffffffffffffffffffffffffff1614611218576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161120f906135b5565b60405180910390fd5b80600c8190555050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600a81565b60606003805461126090613537565b80601f016020809104026020016040519081016040528092919081815260200182805461128c90613537565b80156112d95780601f106112ae576101008083540402835291602001916112d9565b820191906000526020600020905b8154815290600101906020018083116112bc57829003601f168201915b5050505050905090565b600a60019054906101000a900460ff16611332576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161132990613a57565b60405180910390fd5b600a811115611376576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161136d90613ac3565b60405180910390fd5b3481668e1bc9bf04000061138a9190613732565b11156113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c2906137d8565b60405180910390fd5b80600960008282546113dd9190613604565b9250508190555061029a600954111561142b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611422906136a6565b60405180910390fd5b6114353382611c48565b50565b611440611b8e565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156114a5576040517fb06307db00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80600760006114b2611b8e565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661155f611b8e565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115a49190612e06565b60405180910390a35050565b6115bb848484611c6b565b6115da8373ffffffffffffffffffffffffffffffffffffffff1661248d565b80156115ef57506115ed848484846124b0565b155b15611626576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b50505050565b600281565b606061163c82611b40565b611672576040517fa14c4b5000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600061167c612601565b905060008151141561169d57604051806020016040528060008152506116c8565b806116a784612693565b6040516020016116b8929190613b1f565b6040516020818303038152906040525b915050919050565b60095481565b600b80546116e390613537565b80601f016020809104026020016040519081016040528092919081815260200182805461170f90613537565b801561175c5780601f106117315761010080835404028352916020019161175c565b820191906000526020600020905b81548152906001019060200180831161173f57829003601f168201915b505050505081565b6000600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611800611b8e565b73ffffffffffffffffffffffffffffffffffffffff1661181e611222565b73ffffffffffffffffffffffffffffffffffffffff1614611874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161186b906135b5565b60405180910390fd5b80600a60016101000a81548160ff02191690831515021790555050565b611899611b8e565b73ffffffffffffffffffffffffffffffffffffffff166118b7611222565b73ffffffffffffffffffffffffffffffffffffffff161461190d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611904906135b5565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b611932611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611950611222565b73ffffffffffffffffffffffffffffffffffffffff16146119a6576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161199d906135b5565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611a16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0d90613bb5565b60405180910390fd5b611a1f816123c7565b50565b611a2a611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611a48611222565b73ffffffffffffffffffffffffffffffffffffffff1614611a9e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a95906135b5565b60405180910390fd5b6001600a60016101000a81548160ff0219169083151502179055506000600a60006101000a81548160ff021916908315150217905550565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600081611b4b611c66565b11158015611b5a575060005482105b8015611b87575060046000838152602001908152602001600020600001601c9054906101000a900460ff16155b9050919050565b600033905090565b826006600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b611c628282604051806020016040528060008152506127f4565b5050565b600090565b6000611c7682612138565b90508373ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614611ce1576040517fa114810000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b60008473ffffffffffffffffffffffffffffffffffffffff16611d02611b8e565b73ffffffffffffffffffffffffffffffffffffffff161480611d315750611d3085611d2b611b8e565b611764565b5b80611d765750611d3f611b8e565b73ffffffffffffffffffffffffffffffffffffffff16611d5e846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b905080611daf576040517f59c896be00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415611e16576040517fea553b3400000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b611e238585856001612806565b611e2f60008487611b96565b6001600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160392506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506001600560008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600460008581526020019081526020016000209050848160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550428160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555060006001850190506000600460008381526020019081526020016000209050600073ffffffffffffffffffffffffffffffffffffffff168160000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614156120af5760005482146120ae57878160000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555084602001518160000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b505050828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461211a858585600161280c565b5050505050565b60008261212e8584612812565b1490509392505050565b612140612cf2565b60008290508061214e611c66565b1115801561215d575060005481105b15612390576000600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050806040015161238e57600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146122725780925050506123c2565b5b60011561238d57818060019003925050600460008381526020019081526020016000206040518060600160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815260200160008201601c9054906101000a900460ff1615151515815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146123885780925050506123c2565b612273565b5b505b6040517fdf2d9b4200000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b919050565b6000600860009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600860006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b60008373ffffffffffffffffffffffffffffffffffffffff1663150b7a026124d6611b8e565b8786866040518563ffffffff1660e01b81526004016124f89493929190613c2a565b6020604051808303816000875af192505050801561253457506040513d601f19601f820116820180604052508101906125319190613c8b565b60015b6125ae573d8060008114612564576040519150601f19603f3d011682016040523d82523d6000602084013e612569565b606091505b506000815114156125a6576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050949350505050565b6060600b805461261090613537565b80601f016020809104026020016040519081016040528092919081815260200182805461263c90613537565b80156126895780601f1061265e57610100808354040283529160200191612689565b820191906000526020600020905b81548152906001019060200180831161266c57829003601f168201915b5050505050905090565b606060008214156126db576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506127ef565b600082905060005b6000821461270d5780806126f690613cb8565b915050600a826127069190613d30565b91506126e3565b60008167ffffffffffffffff811115612729576127286132ed565b5b6040519080825280601f01601f19166020018201604052801561275b5781602001600182028036833780820191505090505b5090505b600085146127e8576001826127749190613d61565b9150600a856127839190613d95565b603061278f9190613604565b60f81b8183815181106127a5576127a4613dc6565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127e19190613d30565b945061275f565b8093505050505b919050565b6128018383836001612887565b505050565b50505050565b50505050565b60008082905060005b845181101561287c57600085828151811061283957612838613dc6565b5b6020026020010151905080831161285b576128548382612c55565b9250612868565b6128658184612c55565b92505b50808061287490613cb8565b91505061281b565b508091505092915050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156128f4576040517f2e07630000000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b600084141561292f576040517fb562e8dd00000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b61293c6000868387612806565b83600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff16021790555083600560008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160088282829054906101000a900467ffffffffffffffff160192506101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550846004600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426004600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060008582019050838015612b065750612b058773ffffffffffffffffffffffffffffffffffffffff1661248d565b5b15612bcc575b818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612b7b60008884806001019550886124b0565b612bb1576040517fd1a57ed600000000000000000000000000000000000000000000000000000000815260040160405180910390fd5b80821415612b0c578260005414612bc757600080fd5b612c38565b5b818060010192508773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a480821415612bcd575b816000819055505050612c4e600086838761280c565b5050505050565b600082600052816020526040600020905092915050565b828054612c7890613537565b90600052602060002090601f016020900481019282612c9a5760008555612ce1565b82601f10612cb357803560ff1916838001178555612ce1565b82800160010185558215612ce1579182015b82811115612ce0578235825591602001919060010190612cc5565b5b509050612cee9190612d35565b5090565b6040518060600160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681526020016000151581525090565b5b80821115612d4e576000816000905550600101612d36565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612d9b81612d66565b8114612da657600080fd5b50565b600081359050612db881612d92565b92915050565b600060208284031215612dd457612dd3612d5c565b5b6000612de284828501612da9565b91505092915050565b60008115159050919050565b612e0081612deb565b82525050565b6000602082019050612e1b6000830184612df7565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612e5b578082015181840152602081019050612e40565b83811115612e6a576000848401525b50505050565b6000601f19601f8301169050919050565b6000612e8c82612e21565b612e968185612e2c565b9350612ea6818560208601612e3d565b612eaf81612e70565b840191505092915050565b60006020820190508181036000830152612ed48184612e81565b905092915050565b6000819050919050565b612eef81612edc565b8114612efa57600080fd5b50565b600081359050612f0c81612ee6565b92915050565b600060208284031215612f2857612f27612d5c565b5b6000612f3684828501612efd565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612f6a82612f3f565b9050919050565b612f7a81612f5f565b82525050565b6000602082019050612f956000830184612f71565b92915050565b612fa481612f5f565b8114612faf57600080fd5b50565b600081359050612fc181612f9b565b92915050565b60008060408385031215612fde57612fdd612d5c565b5b6000612fec85828601612fb2565b9250506020612ffd85828601612efd565b9150509250929050565b61301081612edc565b82525050565b600060208201905061302b6000830184613007565b92915050565b60008060006060848603121561304a57613049612d5c565b5b600061305886828701612fb2565b935050602061306986828701612fb2565b925050604061307a86828701612efd565b9150509250925092565b600080fd5b600080fd5b600080fd5b60008083601f8401126130a9576130a8613084565b5b8235905067ffffffffffffffff8111156130c6576130c5613089565b5b6020830191508360208202830111156130e2576130e161308e565b5b9250929050565b60008060006040848603121561310257613101612d5c565b5b600084013567ffffffffffffffff8111156131205761311f612d61565b5b61312c86828701613093565b9350935050602061313f86828701612efd565b9150509250925092565b60008083601f84011261315f5761315e613084565b5b8235905067ffffffffffffffff81111561317c5761317b613089565b5b6020830191508360018202830111156131985761319761308e565b5b9250929050565b600080602083850312156131b6576131b5612d5c565b5b600083013567ffffffffffffffff8111156131d4576131d3612d61565b5b6131e085828601613149565b92509250509250929050565b60006020828403121561320257613201612d5c565b5b600061321084828501612fb2565b91505092915050565b6000819050919050565b61322c81613219565b811461323757600080fd5b50565b60008135905061324981613223565b92915050565b60006020828403121561326557613264612d5c565b5b60006132738482850161323a565b91505092915050565b61328581612deb565b811461329057600080fd5b50565b6000813590506132a28161327c565b92915050565b600080604083850312156132bf576132be612d5c565b5b60006132cd85828601612fb2565b92505060206132de85828601613293565b9150509250929050565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61332582612e70565b810181811067ffffffffffffffff82111715613344576133436132ed565b5b80604052505050565b6000613357612d52565b9050613363828261331c565b919050565b600067ffffffffffffffff821115613383576133826132ed565b5b61338c82612e70565b9050602081019050919050565b82818337600083830152505050565b60006133bb6133b684613368565b61334d565b9050828152602081018484840111156133d7576133d66132e8565b5b6133e2848285613399565b509392505050565b600082601f8301126133ff576133fe613084565b5b813561340f8482602086016133a8565b91505092915050565b6000806000806080858703121561343257613431612d5c565b5b600061344087828801612fb2565b945050602061345187828801612fb2565b935050604061346287828801612efd565b925050606085013567ffffffffffffffff81111561348357613482612d61565b5b61348f878288016133ea565b91505092959194509250565b600080604083850312156134b2576134b1612d5c565b5b60006134c085828601612fb2565b92505060206134d185828601612fb2565b9150509250929050565b6000602082840312156134f1576134f0612d5c565b5b60006134ff84828501613293565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061354f57607f821691505b6020821081141561356357613562613508565b5b50919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b600061359f602083612e2c565b91506135aa82613569565b602082019050919050565b600060208201905081810360008301526135ce81613592565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b600061360f82612edc565b915061361a83612edc565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561364f5761364e6135d5565b5b828201905092915050565b7f4e4f545f454e4f5547485f535550504c59000000000000000000000000000000600082015250565b6000613690601183612e2c565b915061369b8261365a565b602082019050919050565b600060208201905081810360008301526136bf81613683565b9050919050565b7f424f4e424f4e5f4c4953545f53414c455f4e4f545f4143544956450000000000600082015250565b60006136fc601b83612e2c565b9150613707826136c6565b602082019050919050565b6000602082019050818103600083015261372b816136ef565b9050919050565b600061373d82612edc565b915061374883612edc565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613781576137806135d5565b5b828202905092915050565b7f4e4f545f454e4f5547485f455448455200000000000000000000000000000000600082015250565b60006137c2601083612e2c565b91506137cd8261378c565b602082019050919050565b600060208201905081810360008301526137f1816137b5565b9050919050565b7f45584345454445445f4d41585f424f4e424f4e5f4c4953545f4d494e545f4c4960008201527f4d49540000000000000000000000000000000000000000000000000000000000602082015250565b6000613854602383612e2c565b915061385f826137f8565b604082019050919050565b6000602082019050818103600083015261388381613847565b9050919050565b60008160601b9050919050565b60006138a28261388a565b9050919050565b60006138b482613897565b9050919050565b6138cc6138c782612f5f565b6138a9565b82525050565b60006138de82846138bb565b60148201915081905092915050565b7f4e4f545f424f4e424f4e5f4c4953544544000000000000000000000000000000600082015250565b6000613923601183612e2c565b915061392e826138ed565b602082019050919050565b6000602082019050818103600083015261395281613916565b9050919050565b600081905092915050565b50565b6000613974600083613959565b915061397f82613964565b600082019050919050565b600061399582613967565b9150819050919050565b7f5749544844524157414c5f4641494c4544000000000000000000000000000000600082015250565b60006139d5601183612e2c565b91506139e08261399f565b602082019050919050565b60006020820190508181036000830152613a04816139c8565b9050919050565b7f5052494d4152595f53414c455f4e4f545f414354495645000000000000000000600082015250565b6000613a41601783612e2c565b9150613a4c82613a0b565b602082019050919050565b60006020820190508181036000830152613a7081613a34565b9050919050565b7f45584345454445445f4d41585f4d494e545f4c494d4954000000000000000000600082015250565b6000613aad601783612e2c565b9150613ab882613a77565b602082019050919050565b60006020820190508181036000830152613adc81613aa0565b9050919050565b600081905092915050565b6000613af982612e21565b613b038185613ae3565b9350613b13818560208601612e3d565b80840191505092915050565b6000613b2b8285613aee565b9150613b378284613aee565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613b9f602683612e2c565b9150613baa82613b43565b604082019050919050565b60006020820190508181036000830152613bce81613b92565b9050919050565b600081519050919050565b600082825260208201905092915050565b6000613bfc82613bd5565b613c068185613be0565b9350613c16818560208601612e3d565b613c1f81612e70565b840191505092915050565b6000608082019050613c3f6000830187612f71565b613c4c6020830186612f71565b613c596040830185613007565b8181036060830152613c6b8184613bf1565b905095945050505050565b600081519050613c8581612d92565b92915050565b600060208284031215613ca157613ca0612d5c565b5b6000613caf84828501613c76565b91505092915050565b6000613cc382612edc565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613cf657613cf56135d5565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d3b82612edc565b9150613d4683612edc565b925082613d5657613d55613d01565b5b828204905092915050565b6000613d6c82612edc565b9150613d7783612edc565b925082821015613d8a57613d896135d5565b5b828203905092915050565b6000613da082612edc565b9150613dab83612edc565b925082613dbb57613dba613d01565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fdfea26469706673582212208730b81b8ba7060fad70d1b4b8b14ee30947840baa13b462e32f1c368a6de94e64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000005668747470733a2f2f6a616d7a626f6e626f6e2e6d7970696e6174612e636c6f75642f697066732f516d616458707a48384873613241377673786447503955524470626574714c6467706e4270757769356150656d732f00000000000000000000
-----Decoded View---------------
Arg [0] : _baseTokenURI (string): https://jamzbonbon.mypinata.cloud/ipfs/QmadXpzH8Hsa2A7vsxdGP9URDpbetqLdgpnBpuwi5aPems/
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000056
Arg [2] : 68747470733a2f2f6a616d7a626f6e626f6e2e6d7970696e6174612e636c6f75
Arg [3] : 642f697066732f516d616458707a483848736132413776737864475039555244
Arg [4] : 70626574714c6467706e4270757769356150656d732f00000000000000000000
Deployed Bytecode Sourcemap
47191:2963:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29361:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32474:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33977:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33540:371;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49567:189;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28610:303;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47285:59;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34842:170;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48867:692;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47238:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48453:174;;;;;;;;;;;;;:::i;:::-;;35083:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48754:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32282:125;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47351:55;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29730:206;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7119:103;;;;;;;;;;;;;:::i;:::-;;48339:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6468:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47413:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32643:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49764:387;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34253:287;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35339:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47464:60;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32818:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47531:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47646:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34611:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48054:135;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47899:147;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;7377:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48201:132;;;;;;;;;;;;;:::i;:::-;;29361:305;29463:4;29515:25;29500:40;;;:11;:40;;;;:105;;;;29572:33;29557:48;;;:11;:48;;;;29500:105;:158;;;;29622:36;29646:11;29622:23;:36::i;:::-;29500:158;29480:178;;29361:305;;;:::o;32474:100::-;32528:13;32561:5;32554:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32474:100;:::o;33977:204::-;34045:7;34070:16;34078:7;34070;:16::i;:::-;34065:64;;34095:34;;;;;;;;;;;;;;34065:64;34149:15;:24;34165:7;34149:24;;;;;;;;;;;;;;;;;;;;;34142:31;;33977:204;;;:::o;33540:371::-;33613:13;33629:24;33645:7;33629:15;:24::i;:::-;33613:40;;33674:5;33668:11;;:2;:11;;;33664:48;;;33688:24;;;;;;;;;;;;;;33664:48;33745:5;33729:21;;:12;:10;:12::i;:::-;:21;;;;:63;;;;;33755:37;33772:5;33779:12;:10;:12::i;:::-;33755:16;:37::i;:::-;33754:38;33729:63;33725:138;;;33816:35;;;;;;;;;;;;;;33725:138;33875:28;33884:2;33888:7;33897:5;33875:8;:28::i;:::-;33602:309;33540:371;;:::o;49567:189::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49645:1:::1;49629:12;;:17;;;;;;;:::i;:::-;;;;;;;;47275:3;49665:12;;:26;;49657:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49723:24;49733:10;49745:1;49723:9;:24::i;:::-;49567:189:::0;:::o;28610:303::-;28654:7;28879:15;:13;:15::i;:::-;28864:12;;28848:13;;:28;:46;28841:53;;28610:303;:::o;47285:59::-;47334:10;47285:59;:::o;34842:170::-;34976:28;34986:4;34992:2;34996:7;34976:9;:28::i;:::-;34842:170;;;:::o;48867:692::-;48964:21;;;;;;;;;;;48956:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;49066:9;49061:1;47334:10;49036:26;;;;:::i;:::-;:39;;49028:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;47523:1;49149;49117:17;:29;49135:10;49117:29;;;;;;;;;;;;;;;;:33;;;;:::i;:::-;:69;;49109:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;49237:12;49279:10;49262:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;49252:39;;;;;;49237:54;;49314:41;49333:5;;49314:41;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49339:10;;49350:4;49314:18;:41::i;:::-;49306:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;49403:1;49387:12;;:17;;;;;;;:::i;:::-;;;;;;;;47275:3;49423:12;;:26;;49415:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;49514:1;49481:17;:29;49499:10;49481:29;;;;;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;49526:24;49536:10;49548:1;49526:9;:24::i;:::-;48945:614;48867:692;;;:::o;47238:40::-;47275:3;47238:40;:::o;48453:174::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48504:12:::1;48522:10;:15;;48545:21;48522:49;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48503:68;;;48590:7;48582:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;48492:135;48453:174::o:0;35083:185::-;35221:39;35238:4;35244:2;35248:7;35221:39;;;;;;;;;;;;:16;:39::i;:::-;35083:185;;;:::o;48754:105::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48844:7:::1;;48829:12;:22;;;;;;;:::i;:::-;;48754:105:::0;;:::o;32282:125::-;32346:7;32373:21;32386:7;32373:12;:21::i;:::-;:26;;;32366:33;;32282:125;;;:::o;47351:55::-;47396:10;47351:55;:::o;29730:206::-;29794:7;29835:1;29818:19;;:5;:19;;;29814:60;;;29846:28;;;;;;;;;;;;;;29814:60;29900:12;:19;29913:5;29900:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;29892:36;;29885:43;;29730:206;;;:::o;7119:103::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7184:30:::1;7211:1;7184:18;:30::i;:::-;7119:103::o:0;48339:106::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48426:11:::1;48413:10;:24;;;;48339:106:::0;:::o;6468:87::-;6514:7;6541:6;;;;;;;;;;;6534:13;;6468:87;:::o;47413:44::-;47455:2;47413:44;:::o;32643:104::-;32699:13;32732:7;32725:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32643:104;:::o;49764:387::-;49825:18;;;;;;;;;;;49817:54;;;;;;;;;;;;:::i;:::-;;;;;;;;;47455:2;49890:1;:20;;49882:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;49983:9;49978:1;47396:10;49957:22;;;;:::i;:::-;:35;;49949:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;50040:1;50024:12;;:17;;;;;;;:::i;:::-;;;;;;;;47275:3;50060:12;;:26;;50052:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;50118:24;50128:10;50140:1;50118:9;:24::i;:::-;49764:387;:::o;34253:287::-;34364:12;:10;:12::i;:::-;34352:24;;:8;:24;;;34348:54;;;34385:17;;;;;;;;;;;;;;34348:54;34460:8;34415:18;:32;34434:12;:10;:12::i;:::-;34415:32;;;;;;;;;;;;;;;:42;34448:8;34415:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;34513:8;34484:48;;34499:12;:10;:12::i;:::-;34484:48;;;34523:8;34484:48;;;;;;:::i;:::-;;;;;;;;34253:287;;:::o;35339:369::-;35506:28;35516:4;35522:2;35526:7;35506:9;:28::i;:::-;35549:15;:2;:13;;;:15::i;:::-;:76;;;;;35569:56;35600:4;35606:2;35610:7;35619:5;35569:30;:56::i;:::-;35568:57;35549:76;35545:156;;;35649:40;;;;;;;;;;;;;;35545:156;35339:369;;;;:::o;47464:60::-;47523:1;47464:60;:::o;32818:318::-;32891:13;32922:16;32930:7;32922;:16::i;:::-;32917:59;;32947:29;;;;;;;;;;;;;;32917:59;32989:21;33013:10;:8;:10::i;:::-;32989:34;;33066:1;33047:7;33041:21;:26;;:87;;;;;;;;;;;;;;;;;33094:7;33103:18;:7;:16;:18::i;:::-;33077:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;33041:87;33034:94;;;32818:318;;;:::o;47531:27::-;;;;:::o;47646:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34611:164::-;34708:4;34732:18;:25;34751:5;34732:25;;;;;;;;;;;;;;;:35;34758:8;34732:35;;;;;;;;;;;;;;;;;;;;;;;;;34725:42;;34611:164;;;;:::o;48054:135::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48162:19:::1;48141:18;;:40;;;;;;;;;;;;;;;;;;48054:135:::0;:::o;47899:147::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48016:22:::1;47992:21;;:46;;;;;;;;;;;;;;;;;;47899:147:::0;:::o;7377:201::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;7486:1:::1;7466:22;;:8;:22;;;;7458:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7542:28;7561:8;7542:18;:28::i;:::-;7377:201:::0;:::o;48201:132::-;6699:12;:10;:12::i;:::-;6688:23;;:7;:5;:7::i;:::-;:23;;;6680:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48280:4:::1;48259:18;;:25;;;;;;;;;;;;;;;;;;48320:5;48296:21;;:29;;;;;;;;;;;;;;;;;;48201:132::o:0;19252:157::-;19337:4;19376:25;19361:40;;;:11;:40;;;;19354:47;;19252:157;;;:::o;35963:187::-;36020:4;36063:7;36044:15;:13;:15::i;:::-;:26;;:53;;;;;36084:13;;36074:7;:23;36044:53;:98;;;;;36115:11;:20;36127:7;36115:20;;;;;;;;;;;:27;;;;;;;;;;;;36114:28;36044:98;36037:105;;35963:187;;;:::o;5192:98::-;5245:7;5272:10;5265:17;;5192:98;:::o;44133:196::-;44275:2;44248:15;:24;44264:7;44248:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;44313:7;44309:2;44293:28;;44302:5;44293:28;;;;;;;;;;;;44133:196;;;:::o;36158:104::-;36227:27;36237:2;36241:8;36227:27;;;;;;;;;;;;:9;:27::i;:::-;36158:104;;:::o;28384:92::-;28440:7;28384:92;:::o;39076:2130::-;39191:35;39229:21;39242:7;39229:12;:21::i;:::-;39191:59;;39289:4;39267:26;;:13;:18;;;:26;;;39263:67;;39302:28;;;;;;;;;;;;;;39263:67;39343:22;39385:4;39369:20;;:12;:10;:12::i;:::-;:20;;;:73;;;;39406:36;39423:4;39429:12;:10;:12::i;:::-;39406:16;:36::i;:::-;39369:73;:126;;;;39483:12;:10;:12::i;:::-;39459:36;;:20;39471:7;39459:11;:20::i;:::-;:36;;;39369:126;39343:153;;39514:17;39509:66;;39540:35;;;;;;;;;;;;;;39509:66;39604:1;39590:16;;:2;:16;;;39586:52;;;39615:23;;;;;;;;;;;;;;39586:52;39651:43;39673:4;39679:2;39683:7;39692:1;39651:21;:43::i;:::-;39759:35;39776:1;39780:7;39789:4;39759:8;:35::i;:::-;40120:1;40090:12;:18;40103:4;40090:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40164:1;40136:12;:16;40149:2;40136:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40182:31;40216:11;:20;40228:7;40216:20;;;;;;;;;;;40182:54;;40267:2;40251:8;:13;;;:18;;;;;;;;;;;;;;;;;;40317:15;40284:8;:23;;;:49;;;;;;;;;;;;;;;;;;40585:19;40617:1;40607:7;:11;40585:33;;40633:31;40667:11;:24;40679:11;40667:24;;;;;;;;;;;40633:58;;40735:1;40710:27;;:8;:13;;;;;;;;;;;;:27;;;40706:384;;;40920:13;;40905:11;:28;40901:174;;40974:4;40958:8;:13;;;:20;;;;;;;;;;;;;;;;;;41027:13;:28;;;41001:8;:23;;;:54;;;;;;;;;;;;;;;;;;40901:174;40706:384;40065:1036;;;41137:7;41133:2;41118:27;;41127:4;41118:27;;;;;;;;;;;;41156:42;41177:4;41183:2;41187:7;41196:1;41156:20;:42::i;:::-;39180:2026;;39076:2130;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;31111:1109::-;31173:21;;:::i;:::-;31207:12;31222:7;31207:22;;31290:4;31271:15;:13;:15::i;:::-;:23;;:47;;;;;31305:13;;31298:4;:20;31271:47;31267:886;;;31339:31;31373:11;:17;31385:4;31373:17;;;;;;;;;;;31339:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31414:9;:16;;;31409:729;;31485:1;31459:28;;:9;:14;;;:28;;;31455:101;;31523:9;31516:16;;;;;;31455:101;31858:261;31865:4;31858:261;;;31898:6;;;;;;;;31943:11;:17;31955:4;31943:17;;;;;;;;;;;31931:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32017:1;31991:28;;:9;:14;;;:28;;;31987:109;;32059:9;32052:16;;;;;;31987:109;31858:261;;;31409:729;31320:833;31267:886;32181:31;;;;;;;;;;;;;;31111:1109;;;;:::o;7738:191::-;7812:16;7831:6;;;;;;;;;;;7812:25;;7857:8;7848:6;;:17;;;;;;;;;;;;;;;;;;7912:8;7881:40;;7902:8;7881:40;;;;;;;;;;;;7801:128;7738:191;:::o;9169:326::-;9229:4;9486:1;9464:7;:19;;;:23;9457:30;;9169:326;;;:::o;44821:667::-;44984:4;45021:2;45005:36;;;45042:12;:10;:12::i;:::-;45056:4;45062:7;45071:5;45005:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45001:480;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45256:1;45239:6;:13;:18;45235:235;;;45285:40;;;;;;;;;;;;;;45235:235;45428:6;45422:13;45413:6;45409:2;45405:15;45398:38;45001:480;45134:45;;;45124:55;;;:6;:55;;;;45117:62;;;44821:667;;;;;;:::o;48637:105::-;48689:13;48722:12;48715:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48637:105;:::o;2754:723::-;2810:13;3040:1;3031:5;:10;3027:53;;;3058:10;;;;;;;;;;;;;;;;;;;;;3027:53;3090:12;3105:5;3090:20;;3121:14;3146:78;3161:1;3153:4;:9;3146:78;;3179:8;;;;;:::i;:::-;;;;3210:2;3202:10;;;;;:::i;:::-;;;3146:78;;;3234:19;3266:6;3256:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3234:39;;3284:154;3300:1;3291:5;:10;3284:154;;3328:1;3318:11;;;;;:::i;:::-;;;3395:2;3387:5;:10;;;;:::i;:::-;3374:2;:24;;;;:::i;:::-;3361:39;;3344:6;3351;3344:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3424:2;3415:11;;;;;:::i;:::-;;;3284:154;;;3462:6;3448:21;;;;;2754:723;;;;:::o;36625:163::-;36748:32;36754:2;36758:8;36768:5;36775:4;36748:5;:32::i;:::-;36625:163;;;:::o;46136:159::-;;;;;:::o;46954:158::-;;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;37047:1775::-;37186:20;37209:13;;37186:36;;37251:1;37237:16;;:2;:16;;;37233:48;;;37262:19;;;;;;;;;;;;;;37233:48;37308:1;37296:8;:13;37292:44;;;37318:18;;;;;;;;;;;;;;37292:44;37349:61;37379:1;37383:2;37387:12;37401:8;37349:21;:61::i;:::-;37722:8;37687:12;:16;37700:2;37687:16;;;;;;;;;;;;;;;:24;;;:44;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37786:8;37746:12;:16;37759:2;37746:16;;;;;;;;;;;;;;;:29;;;:49;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37845:2;37812:11;:25;37824:12;37812:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;37912:15;37862:11;:25;37874:12;37862:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;37945:20;37968:12;37945:35;;37995:11;38024:8;38009:12;:23;37995:37;;38053:4;:23;;;;;38061:15;:2;:13;;;:15::i;:::-;38053:23;38049:641;;;38097:314;38153:12;38149:2;38128:38;;38145:1;38128:38;;;;;;;;;;;;38194:69;38233:1;38237:2;38241:14;;;;;;38257:5;38194:30;:69::i;:::-;38189:174;;38299:40;;;;;;;;;;;;;;38189:174;38406:3;38390:12;:19;;38097:314;;38492:12;38475:13;;:29;38471:43;;38506:8;;;38471:43;38049:641;;;38555:120;38611:14;;;;;;38607:2;38586:40;;38603:1;38586:40;;;;;;;;;;;;38670:3;38654:12;:19;;38555:120;;38049:641;38720:12;38704:13;:28;;;;37662:1082;;38754:60;38783:1;38787:2;38791:12;38805:8;38754:20;:60::i;:::-;37175:1647;37047:1775;;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:99::-;1570:6;1604:5;1598:12;1588:22;;1518:99;;;:::o;1623:169::-;1707:11;1741:6;1736:3;1729:19;1781:4;1776:3;1772:14;1757:29;;1623:169;;;;:::o;1798:307::-;1866:1;1876:113;1890:6;1887:1;1884:13;1876:113;;;1975:1;1970:3;1966:11;1960:18;1956:1;1951:3;1947:11;1940:39;1912:2;1909:1;1905:10;1900:15;;1876:113;;;2007:6;2004:1;2001:13;1998:101;;;2087:1;2078:6;2073:3;2069:16;2062:27;1998:101;1847:258;1798:307;;;:::o;2111:102::-;2152:6;2203:2;2199:7;2194:2;2187:5;2183:14;2179:28;2169:38;;2111:102;;;:::o;2219:364::-;2307:3;2335:39;2368:5;2335:39;:::i;:::-;2390:71;2454:6;2449:3;2390:71;:::i;:::-;2383:78;;2470:52;2515:6;2510:3;2503:4;2496:5;2492:16;2470:52;:::i;:::-;2547:29;2569:6;2547:29;:::i;:::-;2542:3;2538:39;2531:46;;2311:272;2219:364;;;;:::o;2589:313::-;2702:4;2740:2;2729:9;2725:18;2717:26;;2789:9;2783:4;2779:20;2775:1;2764:9;2760:17;2753:47;2817:78;2890:4;2881:6;2817:78;:::i;:::-;2809:86;;2589:313;;;;:::o;2908:77::-;2945:7;2974:5;2963:16;;2908:77;;;:::o;2991:122::-;3064:24;3082:5;3064:24;:::i;:::-;3057:5;3054:35;3044:63;;3103:1;3100;3093:12;3044:63;2991:122;:::o;3119:139::-;3165:5;3203:6;3190:20;3181:29;;3219:33;3246:5;3219:33;:::i;:::-;3119:139;;;;:::o;3264:329::-;3323:6;3372:2;3360:9;3351:7;3347:23;3343:32;3340:119;;;3378:79;;:::i;:::-;3340:119;3498:1;3523:53;3568:7;3559:6;3548:9;3544:22;3523:53;:::i;:::-;3513:63;;3469:117;3264:329;;;;:::o;3599:126::-;3636:7;3676:42;3669:5;3665:54;3654:65;;3599:126;;;:::o;3731:96::-;3768:7;3797:24;3815:5;3797:24;:::i;:::-;3786:35;;3731:96;;;:::o;3833:118::-;3920:24;3938:5;3920:24;:::i;:::-;3915:3;3908:37;3833:118;;:::o;3957:222::-;4050:4;4088:2;4077:9;4073:18;4065:26;;4101:71;4169:1;4158:9;4154:17;4145:6;4101:71;:::i;:::-;3957:222;;;;:::o;4185:122::-;4258:24;4276:5;4258:24;:::i;:::-;4251:5;4248:35;4238:63;;4297:1;4294;4287:12;4238:63;4185:122;:::o;4313:139::-;4359:5;4397:6;4384:20;4375:29;;4413:33;4440:5;4413:33;:::i;:::-;4313:139;;;;:::o;4458:474::-;4526:6;4534;4583:2;4571:9;4562:7;4558:23;4554:32;4551:119;;;4589:79;;:::i;:::-;4551:119;4709:1;4734:53;4779:7;4770:6;4759:9;4755:22;4734:53;:::i;:::-;4724:63;;4680:117;4836:2;4862:53;4907:7;4898:6;4887:9;4883:22;4862:53;:::i;:::-;4852:63;;4807:118;4458:474;;;;;:::o;4938:118::-;5025:24;5043:5;5025:24;:::i;:::-;5020:3;5013:37;4938:118;;:::o;5062:222::-;5155:4;5193:2;5182:9;5178:18;5170:26;;5206:71;5274:1;5263:9;5259:17;5250:6;5206:71;:::i;:::-;5062:222;;;;:::o;5290:619::-;5367:6;5375;5383;5432:2;5420:9;5411:7;5407:23;5403:32;5400:119;;;5438:79;;:::i;:::-;5400:119;5558:1;5583:53;5628:7;5619:6;5608:9;5604:22;5583:53;:::i;:::-;5573:63;;5529:117;5685:2;5711:53;5756:7;5747:6;5736:9;5732:22;5711:53;:::i;:::-;5701:63;;5656:118;5813:2;5839:53;5884:7;5875:6;5864:9;5860:22;5839:53;:::i;:::-;5829:63;;5784:118;5290:619;;;;;:::o;5915:117::-;6024:1;6021;6014:12;6038:117;6147:1;6144;6137:12;6161:117;6270:1;6267;6260:12;6301:568;6374:8;6384:6;6434:3;6427:4;6419:6;6415:17;6411:27;6401:122;;6442:79;;:::i;:::-;6401:122;6555:6;6542:20;6532:30;;6585:18;6577:6;6574:30;6571:117;;;6607:79;;:::i;:::-;6571:117;6721:4;6713:6;6709:17;6697:29;;6775:3;6767:4;6759:6;6755:17;6745:8;6741:32;6738:41;6735:128;;;6782:79;;:::i;:::-;6735:128;6301:568;;;;;:::o;6875:704::-;6970:6;6978;6986;7035:2;7023:9;7014:7;7010:23;7006:32;7003:119;;;7041:79;;:::i;:::-;7003:119;7189:1;7178:9;7174:17;7161:31;7219:18;7211:6;7208:30;7205:117;;;7241:79;;:::i;:::-;7205:117;7354:80;7426:7;7417:6;7406:9;7402:22;7354:80;:::i;:::-;7336:98;;;;7132:312;7483:2;7509:53;7554:7;7545:6;7534:9;7530:22;7509:53;:::i;:::-;7499:63;;7454:118;6875:704;;;;;:::o;7599:553::-;7657:8;7667:6;7717:3;7710:4;7702:6;7698:17;7694:27;7684:122;;7725:79;;:::i;:::-;7684:122;7838:6;7825:20;7815:30;;7868:18;7860:6;7857:30;7854:117;;;7890:79;;:::i;:::-;7854:117;8004:4;7996:6;7992:17;7980:29;;8058:3;8050:4;8042:6;8038:17;8028:8;8024:32;8021:41;8018:128;;;8065:79;;:::i;:::-;8018:128;7599:553;;;;;:::o;8158:529::-;8229:6;8237;8286:2;8274:9;8265:7;8261:23;8257:32;8254:119;;;8292:79;;:::i;:::-;8254:119;8440:1;8429:9;8425:17;8412:31;8470:18;8462:6;8459:30;8456:117;;;8492:79;;:::i;:::-;8456:117;8605:65;8662:7;8653:6;8642:9;8638:22;8605:65;:::i;:::-;8587:83;;;;8383:297;8158:529;;;;;:::o;8693:329::-;8752:6;8801:2;8789:9;8780:7;8776:23;8772:32;8769:119;;;8807:79;;:::i;:::-;8769:119;8927:1;8952:53;8997:7;8988:6;8977:9;8973:22;8952:53;:::i;:::-;8942:63;;8898:117;8693:329;;;;:::o;9028:77::-;9065:7;9094:5;9083:16;;9028:77;;;:::o;9111:122::-;9184:24;9202:5;9184:24;:::i;:::-;9177:5;9174:35;9164:63;;9223:1;9220;9213:12;9164:63;9111:122;:::o;9239:139::-;9285:5;9323:6;9310:20;9301:29;;9339:33;9366:5;9339:33;:::i;:::-;9239:139;;;;:::o;9384:329::-;9443:6;9492:2;9480:9;9471:7;9467:23;9463:32;9460:119;;;9498:79;;:::i;:::-;9460:119;9618:1;9643:53;9688:7;9679:6;9668:9;9664:22;9643:53;:::i;:::-;9633:63;;9589:117;9384:329;;;;:::o;9719:116::-;9789:21;9804:5;9789:21;:::i;:::-;9782:5;9779:32;9769:60;;9825:1;9822;9815:12;9769:60;9719:116;:::o;9841:133::-;9884:5;9922:6;9909:20;9900:29;;9938:30;9962:5;9938:30;:::i;:::-;9841:133;;;;:::o;9980:468::-;10045:6;10053;10102:2;10090:9;10081:7;10077:23;10073:32;10070:119;;;10108:79;;:::i;:::-;10070:119;10228:1;10253:53;10298:7;10289:6;10278:9;10274:22;10253:53;:::i;:::-;10243:63;;10199:117;10355:2;10381:50;10423:7;10414:6;10403:9;10399:22;10381:50;:::i;:::-;10371:60;;10326:115;9980:468;;;;;:::o;10454:117::-;10563:1;10560;10553:12;10577:180;10625:77;10622:1;10615:88;10722:4;10719:1;10712:15;10746:4;10743:1;10736:15;10763:281;10846:27;10868:4;10846:27;:::i;:::-;10838:6;10834:40;10976:6;10964:10;10961:22;10940:18;10928:10;10925:34;10922:62;10919:88;;;10987:18;;:::i;:::-;10919:88;11027:10;11023:2;11016:22;10806:238;10763:281;;:::o;11050:129::-;11084:6;11111:20;;:::i;:::-;11101:30;;11140:33;11168:4;11160:6;11140:33;:::i;:::-;11050:129;;;:::o;11185:307::-;11246:4;11336:18;11328:6;11325:30;11322:56;;;11358:18;;:::i;:::-;11322:56;11396:29;11418:6;11396:29;:::i;:::-;11388:37;;11480:4;11474;11470:15;11462:23;;11185:307;;;:::o;11498:154::-;11582:6;11577:3;11572;11559:30;11644:1;11635:6;11630:3;11626:16;11619:27;11498:154;;;:::o;11658:410::-;11735:5;11760:65;11776:48;11817:6;11776:48;:::i;:::-;11760:65;:::i;:::-;11751:74;;11848:6;11841:5;11834:21;11886:4;11879:5;11875:16;11924:3;11915:6;11910:3;11906:16;11903:25;11900:112;;;11931:79;;:::i;:::-;11900:112;12021:41;12055:6;12050:3;12045;12021:41;:::i;:::-;11741:327;11658:410;;;;;:::o;12087:338::-;12142:5;12191:3;12184:4;12176:6;12172:17;12168:27;12158:122;;12199:79;;:::i;:::-;12158:122;12316:6;12303:20;12341:78;12415:3;12407:6;12400:4;12392:6;12388:17;12341:78;:::i;:::-;12332:87;;12148:277;12087:338;;;;:::o;12431:943::-;12526:6;12534;12542;12550;12599:3;12587:9;12578:7;12574:23;12570:33;12567:120;;;12606:79;;:::i;:::-;12567:120;12726:1;12751:53;12796:7;12787:6;12776:9;12772:22;12751:53;:::i;:::-;12741:63;;12697:117;12853:2;12879:53;12924:7;12915:6;12904:9;12900:22;12879:53;:::i;:::-;12869:63;;12824:118;12981:2;13007:53;13052:7;13043:6;13032:9;13028:22;13007:53;:::i;:::-;12997:63;;12952:118;13137:2;13126:9;13122:18;13109:32;13168:18;13160:6;13157:30;13154:117;;;13190:79;;:::i;:::-;13154:117;13295:62;13349:7;13340:6;13329:9;13325:22;13295:62;:::i;:::-;13285:72;;13080:287;12431:943;;;;;;;:::o;13380:474::-;13448:6;13456;13505:2;13493:9;13484:7;13480:23;13476:32;13473:119;;;13511:79;;:::i;:::-;13473:119;13631:1;13656:53;13701:7;13692:6;13681:9;13677:22;13656:53;:::i;:::-;13646:63;;13602:117;13758:2;13784:53;13829:7;13820:6;13809:9;13805:22;13784:53;:::i;:::-;13774:63;;13729:118;13380:474;;;;;:::o;13860:323::-;13916:6;13965:2;13953:9;13944:7;13940:23;13936:32;13933:119;;;13971:79;;:::i;:::-;13933:119;14091:1;14116:50;14158:7;14149:6;14138:9;14134:22;14116:50;:::i;:::-;14106:60;;14062:114;13860:323;;;;:::o;14189:180::-;14237:77;14234:1;14227:88;14334:4;14331:1;14324:15;14358:4;14355:1;14348:15;14375:320;14419:6;14456:1;14450:4;14446:12;14436:22;;14503:1;14497:4;14493:12;14524:18;14514:81;;14580:4;14572:6;14568:17;14558:27;;14514:81;14642:2;14634:6;14631:14;14611:18;14608:38;14605:84;;;14661:18;;:::i;:::-;14605:84;14426:269;14375:320;;;:::o;14701:182::-;14841:34;14837:1;14829:6;14825:14;14818:58;14701:182;:::o;14889:366::-;15031:3;15052:67;15116:2;15111:3;15052:67;:::i;:::-;15045:74;;15128:93;15217:3;15128:93;:::i;:::-;15246:2;15241:3;15237:12;15230:19;;14889:366;;;:::o;15261:419::-;15427:4;15465:2;15454:9;15450:18;15442:26;;15514:9;15508:4;15504:20;15500:1;15489:9;15485:17;15478:47;15542:131;15668:4;15542:131;:::i;:::-;15534:139;;15261:419;;;:::o;15686:180::-;15734:77;15731:1;15724:88;15831:4;15828:1;15821:15;15855:4;15852:1;15845:15;15872:305;15912:3;15931:20;15949:1;15931:20;:::i;:::-;15926:25;;15965:20;15983:1;15965:20;:::i;:::-;15960:25;;16119:1;16051:66;16047:74;16044:1;16041:81;16038:107;;;16125:18;;:::i;:::-;16038:107;16169:1;16166;16162:9;16155:16;;15872:305;;;;:::o;16183:167::-;16323:19;16319:1;16311:6;16307:14;16300:43;16183:167;:::o;16356:366::-;16498:3;16519:67;16583:2;16578:3;16519:67;:::i;:::-;16512:74;;16595:93;16684:3;16595:93;:::i;:::-;16713:2;16708:3;16704:12;16697:19;;16356:366;;;:::o;16728:419::-;16894:4;16932:2;16921:9;16917:18;16909:26;;16981:9;16975:4;16971:20;16967:1;16956:9;16952:17;16945:47;17009:131;17135:4;17009:131;:::i;:::-;17001:139;;16728:419;;;:::o;17153:177::-;17293:29;17289:1;17281:6;17277:14;17270:53;17153:177;:::o;17336:366::-;17478:3;17499:67;17563:2;17558:3;17499:67;:::i;:::-;17492:74;;17575:93;17664:3;17575:93;:::i;:::-;17693:2;17688:3;17684:12;17677:19;;17336:366;;;:::o;17708:419::-;17874:4;17912:2;17901:9;17897:18;17889:26;;17961:9;17955:4;17951:20;17947:1;17936:9;17932:17;17925:47;17989:131;18115:4;17989:131;:::i;:::-;17981:139;;17708:419;;;:::o;18133:348::-;18173:7;18196:20;18214:1;18196:20;:::i;:::-;18191:25;;18230:20;18248:1;18230:20;:::i;:::-;18225:25;;18418:1;18350:66;18346:74;18343:1;18340:81;18335:1;18328:9;18321:17;18317:105;18314:131;;;18425:18;;:::i;:::-;18314:131;18473:1;18470;18466:9;18455:20;;18133:348;;;;:::o;18487:166::-;18627:18;18623:1;18615:6;18611:14;18604:42;18487:166;:::o;18659:366::-;18801:3;18822:67;18886:2;18881:3;18822:67;:::i;:::-;18815:74;;18898:93;18987:3;18898:93;:::i;:::-;19016:2;19011:3;19007:12;19000:19;;18659:366;;;:::o;19031:419::-;19197:4;19235:2;19224:9;19220:18;19212:26;;19284:9;19278:4;19274:20;19270:1;19259:9;19255:17;19248:47;19312:131;19438:4;19312:131;:::i;:::-;19304:139;;19031:419;;;:::o;19456:222::-;19596:34;19592:1;19584:6;19580:14;19573:58;19665:5;19660:2;19652:6;19648:15;19641:30;19456:222;:::o;19684:366::-;19826:3;19847:67;19911:2;19906:3;19847:67;:::i;:::-;19840:74;;19923:93;20012:3;19923:93;:::i;:::-;20041:2;20036:3;20032:12;20025:19;;19684:366;;;:::o;20056:419::-;20222:4;20260:2;20249:9;20245:18;20237:26;;20309:9;20303:4;20299:20;20295:1;20284:9;20280:17;20273:47;20337:131;20463:4;20337:131;:::i;:::-;20329:139;;20056:419;;;:::o;20481:94::-;20514:8;20562:5;20558:2;20554:14;20533:35;;20481:94;;;:::o;20581:::-;20620:7;20649:20;20663:5;20649:20;:::i;:::-;20638:31;;20581:94;;;:::o;20681:100::-;20720:7;20749:26;20769:5;20749:26;:::i;:::-;20738:37;;20681:100;;;:::o;20787:157::-;20892:45;20912:24;20930:5;20912:24;:::i;:::-;20892:45;:::i;:::-;20887:3;20880:58;20787:157;;:::o;20950:256::-;21062:3;21077:75;21148:3;21139:6;21077:75;:::i;:::-;21177:2;21172:3;21168:12;21161:19;;21197:3;21190:10;;20950:256;;;;:::o;21212:167::-;21352:19;21348:1;21340:6;21336:14;21329:43;21212:167;:::o;21385:366::-;21527:3;21548:67;21612:2;21607:3;21548:67;:::i;:::-;21541:74;;21624:93;21713:3;21624:93;:::i;:::-;21742:2;21737:3;21733:12;21726:19;;21385:366;;;:::o;21757:419::-;21923:4;21961:2;21950:9;21946:18;21938:26;;22010:9;22004:4;22000:20;21996:1;21985:9;21981:17;21974:47;22038:131;22164:4;22038:131;:::i;:::-;22030:139;;21757:419;;;:::o;22182:147::-;22283:11;22320:3;22305:18;;22182:147;;;;:::o;22335:114::-;;:::o;22455:398::-;22614:3;22635:83;22716:1;22711:3;22635:83;:::i;:::-;22628:90;;22727:93;22816:3;22727:93;:::i;:::-;22845:1;22840:3;22836:11;22829:18;;22455:398;;;:::o;22859:379::-;23043:3;23065:147;23208:3;23065:147;:::i;:::-;23058:154;;23229:3;23222:10;;22859:379;;;:::o;23244:167::-;23384:19;23380:1;23372:6;23368:14;23361:43;23244:167;:::o;23417:366::-;23559:3;23580:67;23644:2;23639:3;23580:67;:::i;:::-;23573:74;;23656:93;23745:3;23656:93;:::i;:::-;23774:2;23769:3;23765:12;23758:19;;23417:366;;;:::o;23789:419::-;23955:4;23993:2;23982:9;23978:18;23970:26;;24042:9;24036:4;24032:20;24028:1;24017:9;24013:17;24006:47;24070:131;24196:4;24070:131;:::i;:::-;24062:139;;23789:419;;;:::o;24214:173::-;24354:25;24350:1;24342:6;24338:14;24331:49;24214:173;:::o;24393:366::-;24535:3;24556:67;24620:2;24615:3;24556:67;:::i;:::-;24549:74;;24632:93;24721:3;24632:93;:::i;:::-;24750:2;24745:3;24741:12;24734:19;;24393:366;;;:::o;24765:419::-;24931:4;24969:2;24958:9;24954:18;24946:26;;25018:9;25012:4;25008:20;25004:1;24993:9;24989:17;24982:47;25046:131;25172:4;25046:131;:::i;:::-;25038:139;;24765:419;;;:::o;25190:173::-;25330:25;25326:1;25318:6;25314:14;25307:49;25190:173;:::o;25369:366::-;25511:3;25532:67;25596:2;25591:3;25532:67;:::i;:::-;25525:74;;25608:93;25697:3;25608:93;:::i;:::-;25726:2;25721:3;25717:12;25710:19;;25369:366;;;:::o;25741:419::-;25907:4;25945:2;25934:9;25930:18;25922:26;;25994:9;25988:4;25984:20;25980:1;25969:9;25965:17;25958:47;26022:131;26148:4;26022:131;:::i;:::-;26014:139;;25741:419;;;:::o;26166:148::-;26268:11;26305:3;26290:18;;26166:148;;;;:::o;26320:377::-;26426:3;26454:39;26487:5;26454:39;:::i;:::-;26509:89;26591:6;26586:3;26509:89;:::i;:::-;26502:96;;26607:52;26652:6;26647:3;26640:4;26633:5;26629:16;26607:52;:::i;:::-;26684:6;26679:3;26675:16;26668:23;;26430:267;26320:377;;;;:::o;26703:435::-;26883:3;26905:95;26996:3;26987:6;26905:95;:::i;:::-;26898:102;;27017:95;27108:3;27099:6;27017:95;:::i;:::-;27010:102;;27129:3;27122:10;;26703:435;;;;;:::o;27144:225::-;27284:34;27280:1;27272:6;27268:14;27261:58;27353:8;27348:2;27340:6;27336:15;27329:33;27144:225;:::o;27375:366::-;27517:3;27538:67;27602:2;27597:3;27538:67;:::i;:::-;27531:74;;27614:93;27703:3;27614:93;:::i;:::-;27732:2;27727:3;27723:12;27716:19;;27375:366;;;:::o;27747:419::-;27913:4;27951:2;27940:9;27936:18;27928:26;;28000:9;27994:4;27990:20;27986:1;27975:9;27971:17;27964:47;28028:131;28154:4;28028:131;:::i;:::-;28020:139;;27747:419;;;:::o;28172:98::-;28223:6;28257:5;28251:12;28241:22;;28172:98;;;:::o;28276:168::-;28359:11;28393:6;28388:3;28381:19;28433:4;28428:3;28424:14;28409:29;;28276:168;;;;:::o;28450:360::-;28536:3;28564:38;28596:5;28564:38;:::i;:::-;28618:70;28681:6;28676:3;28618:70;:::i;:::-;28611:77;;28697:52;28742:6;28737:3;28730:4;28723:5;28719:16;28697:52;:::i;:::-;28774:29;28796:6;28774:29;:::i;:::-;28769:3;28765:39;28758:46;;28540:270;28450:360;;;;:::o;28816:640::-;29011:4;29049:3;29038:9;29034:19;29026:27;;29063:71;29131:1;29120:9;29116:17;29107:6;29063:71;:::i;:::-;29144:72;29212:2;29201:9;29197:18;29188:6;29144:72;:::i;:::-;29226;29294:2;29283:9;29279:18;29270:6;29226:72;:::i;:::-;29345:9;29339:4;29335:20;29330:2;29319:9;29315:18;29308:48;29373:76;29444:4;29435:6;29373:76;:::i;:::-;29365:84;;28816:640;;;;;;;:::o;29462:141::-;29518:5;29549:6;29543:13;29534:22;;29565:32;29591:5;29565:32;:::i;:::-;29462:141;;;;:::o;29609:349::-;29678:6;29727:2;29715:9;29706:7;29702:23;29698:32;29695:119;;;29733:79;;:::i;:::-;29695:119;29853:1;29878:63;29933:7;29924:6;29913:9;29909:22;29878:63;:::i;:::-;29868:73;;29824:127;29609:349;;;;:::o;29964:233::-;30003:3;30026:24;30044:5;30026:24;:::i;:::-;30017:33;;30072:66;30065:5;30062:77;30059:103;;;30142:18;;:::i;:::-;30059:103;30189:1;30182:5;30178:13;30171:20;;29964:233;;;:::o;30203:180::-;30251:77;30248:1;30241:88;30348:4;30345:1;30338:15;30372:4;30369:1;30362:15;30389:185;30429:1;30446:20;30464:1;30446:20;:::i;:::-;30441:25;;30480:20;30498:1;30480:20;:::i;:::-;30475:25;;30519:1;30509:35;;30524:18;;:::i;:::-;30509:35;30566:1;30563;30559:9;30554:14;;30389:185;;;;:::o;30580:191::-;30620:4;30640:20;30658:1;30640:20;:::i;:::-;30635:25;;30674:20;30692:1;30674:20;:::i;:::-;30669:25;;30713:1;30710;30707:8;30704:34;;;30718:18;;:::i;:::-;30704:34;30763:1;30760;30756:9;30748:17;;30580:191;;;;:::o;30777:176::-;30809:1;30826:20;30844:1;30826:20;:::i;:::-;30821:25;;30860:20;30878:1;30860:20;:::i;:::-;30855:25;;30899:1;30889:35;;30904:18;;:::i;:::-;30889:35;30945:1;30942;30938:9;30933:14;;30777:176;;;;:::o;30959:180::-;31007:77;31004:1;30997:88;31104:4;31101:1;31094:15;31128:4;31125:1;31118:15
Swarm Source
ipfs://8730b81b8ba7060fad70d1b4b8b14ee30947840baa13b462e32f1c368a6de94e
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.