ERC-721
Source Code
Overview
Max Total Supply
3,333 BaoBao
Holders
844
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
4 BaoBaoLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
MyNFT
Compiler Version
v0.8.26+commit.8a97fa7a
Contract Source Code (Solidity)
/**
*Submitted for verification at Arbiscan.io on 2024-12-03
*/
pragma solidity ^0.8.20;
interface ArbSys {
function arbBlockNumber() external view returns (uint256);
}
interface IERC165 {
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
interface IERC721 is IERC165 {
event Transfer(address indexed from, address indexed to, uint256 indexed tokenId);
event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId);
event ApprovalForAll(address indexed owner, address indexed operator, bool approved);
function balanceOf(address owner) external view returns (uint256 balance);
function ownerOf(uint256 tokenId) external view returns (address owner);
function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external;
function safeTransferFrom(address from, address to, uint256 tokenId) external;
function transferFrom(address from, address to, uint256 tokenId) external;
function approve(address to, uint256 tokenId) external;
function setApprovalForAll(address operator, bool approved) external;
function getApproved(uint256 tokenId) external view returns (address operator);
function isApprovedForAll(address owner, address operator) external view returns (bool);
}
// pragma solidity ^0.8.20;
interface IERC721Receiver {
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
interface IERC721Metadata is IERC721 {
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// pragma solidity ^0.8.20;
abstract contract Context {
struct CreateInfo {
string[5] strarr;
address[4] addarr;
uint256[8] arr;
}
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
function _contextSuffixLength() internal view virtual returns (uint256) {
return 0;
}
}
// pragma solidity ^0.8.20;
library Math {
error MathOverflowedMulDiv();
enum Rounding {
Floor, // Toward negative infinity
Ceil, // Toward positive infinity
Trunc, // Toward zero
Expand // Away from zero
}
function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
uint256 c = a + b;
if (c < a) return (false, 0);
return (true, c);
}
}
function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b > a) return (false, 0);
return (true, a - b);
}
}
function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (a == 0) return (true, 0);
uint256 c = a * b;
if (c / a != b) return (false, 0);
return (true, c);
}
}
function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a / b);
}
}
function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) {
unchecked {
if (b == 0) return (false, 0);
return (true, a % b);
}
}
function max(uint256 a, uint256 b) internal pure returns (uint256) {
return a > b ? a : b;
}
function min(uint256 a, uint256 b) internal pure returns (uint256) {
return a < b ? a : b;
}
function average(uint256 a, uint256 b) internal pure returns (uint256) {
return (a & b) + (a ^ b) / 2;
}
function ceilDiv(uint256 a, uint256 b) internal pure returns (uint256) {
if (b == 0) {
return a / b;
}
return a == 0 ? 0 : (a - 1) / b + 1;
}
function mulDiv(uint256 x, uint256 y, uint256 denominator) internal pure returns (uint256 result) {
unchecked {
uint256 prod0 = x * y; // Least significant 256 bits of the product
uint256 prod1; // Most significant 256 bits of the product
assembly {
let mm := mulmod(x, y, not(0))
prod1 := sub(sub(mm, prod0), lt(mm, prod0))
}
// Handle non-overflow cases, 256 by 256 division.
if (prod1 == 0) {
return prod0 / denominator;
}
// Make sure the result is less than 2^256. Also prevents denominator == 0.
if (denominator <= prod1) {
revert MathOverflowedMulDiv();
}
///////////////////////////////////////////////
// 512 by 256 division.
///////////////////////////////////////////////
// Make division exact by subtracting the remainder from [prod1 prod0].
uint256 remainder;
assembly {
// Compute remainder using mulmod.
remainder := mulmod(x, y, denominator)
// Subtract 256 bit number from 512 bit number.
prod1 := sub(prod1, gt(remainder, prod0))
prod0 := sub(prod0, remainder)
}
// Factor powers of two out of denominator and compute largest power of two divisor of denominator.
// Always >= 1. See https://cs.stackexchange.com/q/138556/92363.
uint256 twos = denominator & (0 - denominator);
assembly {
// Divide denominator by twos.
denominator := div(denominator, twos)
// Divide [prod1 prod0] by twos.
prod0 := div(prod0, twos)
// Flip twos such that it is 2^256 / twos. If twos is zero, then it becomes one.
twos := add(div(sub(0, twos), twos), 1)
}
// Shift in bits from prod1 into prod0.
prod0 |= prod1 * twos;
// Invert denominator mod 2^256. Now that denominator is an odd number, it has an inverse modulo 2^256 such
// that denominator * inv = 1 mod 2^256. Compute the inverse by starting with a seed that is correct for
// four bits. That is, denominator * inv = 1 mod 2^4.
uint256 inverse = (3 * denominator) ^ 2;
// Use the Newton-Raphson iteration to improve the precision. Thanks to Hensel's lifting lemma, this also
// works in modular arithmetic, doubling the correct bits in each step.
inverse *= 2 - denominator * inverse; // inverse mod 2^8
inverse *= 2 - denominator * inverse; // inverse mod 2^16
inverse *= 2 - denominator * inverse; // inverse mod 2^32
inverse *= 2 - denominator * inverse; // inverse mod 2^64
inverse *= 2 - denominator * inverse; // inverse mod 2^128
inverse *= 2 - denominator * inverse; // inverse mod 2^256
// Because the division is now exact we can divide by multiplying with the modular inverse of denominator.
// This will give us the correct result modulo 2^256. Since the preconditions guarantee that the outcome is
// less than 2^256, this is the final result. We don't need to compute the high bits of the result and prod1
// is no longer required.
result = prod0 * inverse;
return result;
}
}
function mulDiv(uint256 x, uint256 y, uint256 denominator, Rounding rounding) internal pure returns (uint256) {
uint256 result = mulDiv(x, y, denominator);
if (unsignedRoundsUp(rounding) && mulmod(x, y, denominator) > 0) {
result += 1;
}
return result;
}
function sqrt(uint256 a) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 result = 1 << (log2(a) >> 1);
unchecked {
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
result = (result + a / result) >> 1;
return min(result, a / result);
}
}
function sqrt(uint256 a, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = sqrt(a);
return result + (unsignedRoundsUp(rounding) && result * result < a ? 1 : 0);
}
}
function log2(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 128;
}
if (value >> 64 > 0) {
value >>= 64;
result += 64;
}
if (value >> 32 > 0) {
value >>= 32;
result += 32;
}
if (value >> 16 > 0) {
value >>= 16;
result += 16;
}
if (value >> 8 > 0) {
value >>= 8;
result += 8;
}
if (value >> 4 > 0) {
value >>= 4;
result += 4;
}
if (value >> 2 > 0) {
value >>= 2;
result += 2;
}
if (value >> 1 > 0) {
result += 1;
}
}
return result;
}
function log2(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log2(value);
return result + (unsignedRoundsUp(rounding) && 1 << result < value ? 1 : 0);
}
}
function log10(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >= 10 ** 64) {
value /= 10 ** 64;
result += 64;
}
if (value >= 10 ** 32) {
value /= 10 ** 32;
result += 32;
}
if (value >= 10 ** 16) {
value /= 10 ** 16;
result += 16;
}
if (value >= 10 ** 8) {
value /= 10 ** 8;
result += 8;
}
if (value >= 10 ** 4) {
value /= 10 ** 4;
result += 4;
}
if (value >= 10 ** 2) {
value /= 10 ** 2;
result += 2;
}
if (value >= 10 ** 1) {
result += 1;
}
}
return result;
}
function log10(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log10(value);
return result + (unsignedRoundsUp(rounding) && 10 ** result < value ? 1 : 0);
}
}
function log256(uint256 value) internal pure returns (uint256) {
uint256 result = 0;
unchecked {
if (value >> 128 > 0) {
value >>= 128;
result += 16;
}
if (value >> 64 > 0) {
value >>= 64;
result += 8;
}
if (value >> 32 > 0) {
value >>= 32;
result += 4;
}
if (value >> 16 > 0) {
value >>= 16;
result += 2;
}
if (value >> 8 > 0) {
result += 1;
}
}
return result;
}
function log256(uint256 value, Rounding rounding) internal pure returns (uint256) {
unchecked {
uint256 result = log256(value);
return result + (unsignedRoundsUp(rounding) && 1 << (result << 3) < value ? 1 : 0);
}
}
function unsignedRoundsUp(Rounding rounding) internal pure returns (bool) {
return uint8(rounding) % 2 == 1;
}
}
// pragma solidity ^0.8.20;
library SignedMath {
function max(int256 a, int256 b) internal pure returns (int256) {
return a > b ? a : b;
}
function min(int256 a, int256 b) internal pure returns (int256) {
return a < b ? a : b;
}
function average(int256 a, int256 b) internal pure returns (int256) {
// Formula from the book "Hacker's Delight"
int256 x = (a & b) + ((a ^ b) >> 1);
return x + (int256(uint256(x) >> 255) & (a ^ b));
}
function abs(int256 n) internal pure returns (uint256) {
unchecked {
// must be unchecked in order to support `n = type(int256).min`
return uint256(n >= 0 ? n : -n);
}
}
}
// pragma solidity ^0.8.20;
library Strings {
bytes16 private constant HEX_DIGITS = "0123456789abcdef";
uint8 private constant ADDRESS_LENGTH = 20;
error StringsInsufficientHexLength(uint256 value, uint256 length);
function toString(uint256 value) internal pure returns (string memory) {
unchecked {
uint256 length = Math.log10(value) + 1;
string memory buffer = new string(length);
uint256 ptr;
/// @solidity memory-safe-assembly
assembly {
ptr := add(buffer, add(32, length))
}
while (true) {
ptr--;
/// @solidity memory-safe-assembly
assembly {
mstore8(ptr, byte(mod(value, 10), HEX_DIGITS))
}
value /= 10;
if (value == 0) break;
}
return buffer;
}
}
function toStringSigned(int256 value) internal pure returns (string memory) {
return string.concat(value < 0 ? "-" : "", toString(SignedMath.abs(value)));
}
function toHexString(uint256 value) internal pure returns (string memory) {
unchecked {
return toHexString(value, Math.log256(value) + 1);
}
}
function toHexString(uint256 value, uint256 length) internal pure returns (string memory) {
uint256 localValue = value;
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_DIGITS[localValue & 0xf];
localValue >>= 4;
}
if (localValue != 0) {
revert StringsInsufficientHexLength(value, length);
}
return string(buffer);
}
function toHexString(address addr) internal pure returns (string memory) {
return toHexString(uint256(uint160(addr)), ADDRESS_LENGTH);
}
function equal(string memory a, string memory b) internal pure returns (bool) {
return bytes(a).length == bytes(b).length && keccak256(bytes(a)) == keccak256(bytes(b));
}
}
// pragma solidity ^0.8.20;
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId) public view virtual returns (bool) {
return interfaceId == type(IERC165).interfaceId;
}
}
// pragma solidity ^0.8.20;
interface IERC20Errors {
error ERC20InsufficientBalance(address sender, uint256 balance, uint256 needed);
error ERC20InvalidSender(address sender);
error ERC20InvalidReceiver(address receiver);
error ERC20InsufficientAllowance(address spender, uint256 allowance, uint256 needed);
error ERC20InvalidApprover(address approver);
error ERC20InvalidSpender(address spender);
}
interface IERC721Errors {
error ERC721InvalidOwner(address owner);
error ERC721NonexistentToken(uint256 tokenId);
error ERC721IncorrectOwner(address sender, uint256 tokenId, address owner);
error ERC721InvalidSender(address sender);
error ERC721InvalidReceiver(address receiver);
error ERC721InsufficientApproval(address operator, uint256 tokenId);
error ERC721InvalidApprover(address approver);
error ERC721InvalidOperator(address operator);
}
interface IERC1155Errors {
error ERC1155InsufficientBalance(address sender, uint256 balance, uint256 needed, uint256 tokenId);
error ERC1155InvalidSender(address sender);
error ERC1155InvalidReceiver(address receiver);
error ERC1155MissingApprovalForAll(address operator, address owner);
error ERC1155InvalidApprover(address approver);
error ERC1155InvalidOperator(address operator);
error ERC1155InvalidArrayLength(uint256 idsLength, uint256 valuesLength);
}
// pragma solidity ^0.8.20;
abstract contract ERC721 is Context, ERC165, IERC721, IERC721Metadata, IERC721Errors {
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
mapping(uint256 tokenId => address) private _owners;
mapping(address owner => uint256) private _balances;
mapping(uint256 tokenId => address) private _tokenApprovals;
mapping(address owner => mapping(address operator => bool)) private _operatorApprovals;
mapping(address => uint256[]) public ownerTokens;
mapping(uint256 => uint256) public tokenIndex;
/**
* @dev Initializes the contract by setting a `name` and a `symbol` to the token collection.
*/
constructor(string memory name_, string memory symbol_) {
_name = name_;
_symbol = symbol_;
}
/**
* @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 virtual returns (uint256) {
if (owner == address(0)) {
revert ERC721InvalidOwner(address(0));
}
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId) public view virtual returns (address) {
return _requireOwned(tokenId);
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId) public view virtual returns (string memory) {
_requireOwned(tokenId);
string memory baseURI = _baseURI();
return bytes(baseURI).length > 0 ? string.concat(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 overridden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual {
_approve(to, tokenId, _msgSender());
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId) public view virtual returns (address) {
_requireOwned(tokenId);
return _getApproved(tokenId);
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved) public virtual {
_setApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator) public view virtual returns (bool) {
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(address from, address to, uint256 tokenId) public virtual {
if (to == address(0)) {
revert ERC721InvalidReceiver(address(0));
}
// Setting an "auth" arguments enables the `_isAuthorized` check which verifies that the token exists
// (from != 0). Therefore, it is not needed to verify that the return value is not 0 here.
address previousOwner = _update(to, tokenId, _msgSender());
if (previousOwner != from) {
revert ERC721IncorrectOwner(from, tokenId, previousOwner);
}
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId) public {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory data) public virtual {
transferFrom(from, to, tokenId);
_checkOnERC721Received(from, to, tokenId, data);
}
/**
* @dev Returns the owner of the `tokenId`. Does NOT revert if token doesn't exist
*
* IMPORTANT: Any overrides to this function that add ownership of tokens not tracked by the
* core ERC721 logic MUST be matched with the use of {_increaseBalance} to keep balances
* consistent with ownership. The invariant to preserve is that for any address `a` the value returned by
* `balanceOf(a)` must be equal to the number of tokens such that `_ownerOf(tokenId)` is `a`.
*/
function _ownerOf(uint256 tokenId) internal view virtual returns (address) {
return _owners[tokenId];
}
/**
* @dev Returns the approved address for `tokenId`. Returns 0 if `tokenId` is not minted.
*/
function _getApproved(uint256 tokenId) internal view virtual returns (address) {
return _tokenApprovals[tokenId];
}
/**
* @dev Returns whether `spender` is allowed to manage `owner`'s tokens, or `tokenId` in
* particular (ignoring whether it is owned by `owner`).
*
* WARNING: This function assumes that `owner` is the actual owner of `tokenId` and does not verify this
* assumption.
*/
function _isAuthorized(address owner, address spender, uint256 tokenId) internal view virtual returns (bool) {
return
spender != address(0) &&
(owner == spender || isApprovedForAll(owner, spender) || _getApproved(tokenId) == spender);
}
function _checkAuthorized(address owner, address spender, uint256 tokenId) internal view virtual {
if (!_isAuthorized(owner, spender, tokenId)) {
if (owner == address(0)) {
revert ERC721NonexistentToken(tokenId);
} else {
revert ERC721InsufficientApproval(spender, tokenId);
}
}
}
function _increaseBalance(address account, uint128 value) internal virtual {
unchecked {
_balances[account] += value;
}
}
function _update(address to, uint256 tokenId, address auth) internal virtual returns (address) {
address from = _ownerOf(tokenId);
// Perform (optional) operator check
if (auth != address(0)) {
_checkAuthorized(from, auth, tokenId);
}
// Execute the update
if (from != address(0)) {
// Clear approval. No need to re-authorize or emit the Approval event
_approve(address(0), tokenId, address(0), false);
if(balanceOf(from) != 1) {
ownerTokens[from][tokenIndex[tokenId]] = ownerTokens[from][ownerTokens[from].length-1];
}
ownerTokens[from].pop();
unchecked {
_balances[from] -= 1;
}
}
if (to != address(0)) {
uint256 index = ownerTokens[to].length;
ownerTokens[to].push(tokenId);
tokenIndex[tokenId] = index;
unchecked {
_balances[to] += 1;
}
}
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
return from;
}
/**
* @dev Mints `tokenId` and transfers it to `to`.
*
* WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible
*
* Requirements:
*
* - `tokenId` must not exist.
* - `to` cannot be the zero address.
*
* Emits a {Transfer} event.
*/
function _mint(address to, uint256 tokenId) internal {
if (to == address(0)) {
revert ERC721InvalidReceiver(address(0));
}
address previousOwner = _update(to, tokenId, address(0));
if (previousOwner != address(0)) {
revert ERC721InvalidSender(address(0));
}
}
/**
* @dev Mints `tokenId`, transfers it to `to` and checks for `to` acceptance.
*
* Requirements:
*
* - `tokenId` must not exist.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeMint(address to, uint256 tokenId) internal {
_safeMint(to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeMint(address to, uint256 tokenId, bytes memory data) internal virtual {
_mint(to, tokenId);
_checkOnERC721Received(address(0), to, tokenId, data);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
* This is an internal function that does not check if the sender is authorized to operate on the token.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal {
address previousOwner = _update(address(0), tokenId, address(0));
if (previousOwner == address(0)) {
revert ERC721NonexistentToken(tokenId);
}
}
/**
* @dev Transfers `tokenId` from `from` to `to`.
* As opposed to {transferFrom}, this imposes no restrictions on msg.sender.
*
* 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) internal {
if (to == address(0)) {
revert ERC721InvalidReceiver(address(0));
}
address previousOwner = _update(to, tokenId, address(0));
if (previousOwner == address(0)) {
revert ERC721NonexistentToken(tokenId);
} else if (previousOwner != from) {
revert ERC721IncorrectOwner(from, tokenId, previousOwner);
}
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking that contract recipients
* are aware of the ERC721 standard to prevent tokens from being forever locked.
*
* `data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is like {safeTransferFrom} in the sense that it invokes
* {IERC721Receiver-onERC721Received} on the receiver, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `tokenId` token must exist and be owned by `from`.
* - `to` cannot be the zero address.
* - `from` cannot be the zero address.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function _safeTransfer(address from, address to, uint256 tokenId) internal {
_safeTransfer(from, to, tokenId, "");
}
/**
* @dev Same as {xref-ERC721-_safeTransfer-address-address-uint256-}[`_safeTransfer`], with an additional `data` parameter which is
* forwarded in {IERC721Receiver-onERC721Received} to contract recipients.
*/
function _safeTransfer(address from, address to, uint256 tokenId, bytes memory data) internal virtual {
_transfer(from, to, tokenId);
_checkOnERC721Received(from, to, tokenId, data);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* The `auth` argument is optional. If the value passed is non 0, then this function will check that `auth` is
* either the owner of the token, or approved to operate on all tokens held by this owner.
*
* Emits an {Approval} event.
*
* Overrides to this logic should be done to the variant with an additional `bool emitEvent` argument.
*/
function _approve(address to, uint256 tokenId, address auth) internal {
_approve(to, tokenId, auth, true);
}
/**
* @dev Variant of `_approve` with an optional flag to enable or disable the {Approval} event. The event is not
* emitted in the context of transfers.
*/
function _approve(address to, uint256 tokenId, address auth, bool emitEvent) internal virtual {
// Avoid reading the owner unless necessary
if (emitEvent || auth != address(0)) {
address owner = _requireOwned(tokenId);
// We do not use _isAuthorized because single-token approvals should not be able to call approve
if (auth != address(0) && owner != auth && !isApprovedForAll(owner, auth)) {
revert ERC721InvalidApprover(auth);
}
if (emitEvent) {
emit Approval(owner, to, tokenId);
}
}
_tokenApprovals[tokenId] = to;
}
/**
* @dev Approve `operator` to operate on all of `owner` tokens
*
* Requirements:
* - operator can't be the address zero.
*
* Emits an {ApprovalForAll} event.
*/
function _setApprovalForAll(address owner, address operator, bool approved) internal virtual {
if (operator == address(0)) {
revert ERC721InvalidOperator(operator);
}
_operatorApprovals[owner][operator] = approved;
emit ApprovalForAll(owner, operator, approved);
}
/**
* @dev Reverts if the `tokenId` doesn't have a current owner (it hasn't been minted, or it has been burned).
* Returns the owner.
*
* Overrides to ownership logic should be done to {_ownerOf}.
*/
function _requireOwned(uint256 tokenId) internal view returns (address) {
address owner = _ownerOf(tokenId);
if (owner == address(0)) {
revert ERC721NonexistentToken(tokenId);
}
return owner;
}
/**
* @dev Private function to invoke {IERC721Receiver-onERC721Received} on a target address. This will revert if the
* recipient doesn't accept the token transfer. The call is not executed if the target address is not a 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
*/
function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory data) private {
if (to.code.length > 0) {
try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, data) returns (bytes4 retval) {
if (retval != IERC721Receiver.onERC721Received.selector) {
revert ERC721InvalidReceiver(to);
}
} catch (bytes memory reason) {
if (reason.length == 0) {
revert ERC721InvalidReceiver(to);
} else {
/// @solidity memory-safe-assembly
assembly {
revert(add(32, reason), mload(reason))
}
}
}
}
}
}
interface IERC20 {
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
interface Factory {
function mintSuccessFee() external returns (uint256);
function mintFailFee() external returns (uint256);
function mintGasFee() external returns (uint256);
}
contract MyNFT is ERC721 {
using Strings for uint256;
mapping(uint256 => string) private _tokenURIs;
uint256 private _tokenCounter = 0;
uint256 public createBlockNumber;
uint256 public totalSupply = 0;
uint256 public publicMintCount = 0;
uint256 public publicMintFinishCount = 0;
string public imageURI;
string public baseURI;
string public describe;
uint256 public mintPrice;
uint256 public mintPriceWhile;
uint256 private randNonce;
uint256 public mintProbability;
uint256 public mintType;
address public factoryAddress;
address public mintTokenAddress;
address public mintFeeAddress;
address public owner;
address public adminAddress;
address public weth = 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1;
address public arbSys = 0x0000000000000000000000000000000000000064;
uint256 public mintMaxAmount;
bool public whileFlag = false;
uint256 public mintStartTime;
uint256 public mintEndTime;
mapping(address => uint256) public addressMintCount;
uint256 public whileListCount;
uint256 public whileListFinishCount;
mapping(address => uint256) public whiteList;
mapping(address => uint256) public whiteListMint;
modifier onlyOwner() {
require(isOwner(), "Ownable: caller is not the owner");
_;
}
function isOwner() public view returns (bool) {
return _msgSender() == owner;
}
constructor(CreateInfo memory info) ERC721(info.strarr[1], info.strarr[2]) {
// string[5] memory strarr = [baseURI,name,symbol,_describe,_imageURI];
// address[4] memory addarr = [_mintTokenAddress,mintFeeAddress,_msgSender(),owner];
// uint256[7] memory arr = [_totalSupply,_mintPrice,_mintPriceWhile,_mintProbability,_mintType,_mintStartTime,_mintMaxAmount];
factoryAddress = _msgSender();
createBlockNumber = block.number;
baseURI = info.strarr[0];
describe = info.strarr[3];
imageURI = info.strarr[4];
mintTokenAddress = info.addarr[0];
mintFeeAddress = info.addarr[1];
owner = info.addarr[2];
adminAddress = info.addarr[3];
publicMintCount = info.arr[0];
mintPrice = info.arr[1];
mintPriceWhile = info.arr[2];
mintProbability = info.arr[3];
mintType = info.arr[4];
mintStartTime = info.arr[5];
mintMaxAmount = info.arr[6];
mintEndTime = info.arr[7];
}
function addWhile(address[] memory _adds,uint256[] memory _amount) public onlyOwner {
require(!whileFlag,"while stop");
require(_adds.length==_amount.length,"length error");
for(uint i=0;i<_adds.length;i++){
publicMintCount = publicMintCount-_amount[i];
whileListCount = whileListCount+_amount[i];
whiteList[_adds[i]] = whiteList[_adds[i]]+_amount[i];
}
}
function setWhile(address[] memory _adds,uint256[] memory _amount) public onlyOwner {
require(!whileFlag,"while stop");
require(_adds.length==_amount.length,"length error");
for(uint i=0;i<_adds.length;i++){
if (whiteList[_adds[i]] > _amount[i]){
uint256 a = whiteList[_adds[i]] - _amount[i];
uint256 s = whiteList[_adds[i]]-whiteListMint[_adds[i]];
uint256 sub = 0;
if (a <= s){
sub = a;
} else {
sub = s;
}
if (sub > 0){
publicMintCount = publicMintCount+sub;
whileListCount = whileListCount-sub;
whiteList[_adds[i]] = whiteList[_adds[i]]-sub;
}
} else {
uint256 add = _amount[i] - whiteList[_adds[i]];
publicMintCount = publicMintCount-add;
whileListCount = whileListCount+add;
whiteList[_adds[i]] = whiteList[_adds[i]]+add;
}
}
}
function mintNFT10(uint256 _amount) public payable {
require(block.timestamp > mintStartTime,"no start");
require(mintEndTime == 0 || block.timestamp < mintEndTime,"mint end");
require(_amount > 0,"amount error");
require(mintTokenAddress == weth,"mint type error");
uint256 mintGasFee = Factory(factoryAddress).mintGasFee();
uint256 totalFee = 0;
if (mintType == 2){
totalFee = mintGasFee * _amount;
}
for(uint i=0;i<_amount;i++){
uint256 type_ = _mintNFT(_msgSender(),mintGasFee);
if (type_ == 1){
totalFee += mintPrice;
} else {
totalFee += mintPriceWhile;
}
}
require(msg.value == totalFee, "total price error");
}
function mintNFT(uint256 _amount) public {
require(block.timestamp > mintStartTime,"no start");
require(mintEndTime == 0 || block.timestamp < mintEndTime,"mint end");
require(_amount > 0,"amount error");
require(mintTokenAddress != weth,"mint type error");
uint256 mintGasFee = Factory(factoryAddress).mintGasFee();
for(uint i=0;i<_amount;i++){
_mintNFT(_msgSender(),mintGasFee);
}
}
function _mintNFT(address to,uint256 _mintGasFee) internal returns (uint256) {
uint256 mintSuccessFee = Factory(factoryAddress).mintSuccessFee();
uint256 mintFailFee = Factory(factoryAddress).mintFailFee();
uint256 mintFee = mintPrice;
uint256 _type = 1;
if (!whileFlag && whiteList[to] > whiteListMint[to]){
_type = 2;
mintFee = mintPriceWhile;
}
if (_type == 1){
require(addressMintCount[to]<mintMaxAmount,"mint Max Amount");
require(publicMintFinishCount < publicMintCount,"mint end");
}
uint256 _randomNumber = rand(100);
if (_type==2 || _randomNumber <= mintProbability) {
if (mintTokenAddress != weth){
IERC20(mintTokenAddress).transferFrom(_msgSender(),address(this),mintFee);
IERC20(mintTokenAddress).transfer(mintFeeAddress,mintFee * mintSuccessFee / 100);
} else {
// payable(mintFeeAddress).transfer(mintFee * mintSuccessFee / 100);
uint256 fee_ = mintFee * mintSuccessFee / 100;
if (mintType == 2){
fee_ = fee_ + _mintGasFee;
}
payable(mintFeeAddress).transfer(fee_);
}
_tokenCounter += 1;
uint256 tokenId = _tokenCounter;
_safeMint(to, tokenId);
totalSupply += 1;
if (_type==1) {
publicMintFinishCount += 1;
addressMintCount[to] = addressMintCount[to]+1;
} else {
whileListFinishCount += 1;
whiteListMint[to] = whiteListMint[to]+1;
}
} else {
if (mintTokenAddress != weth){
IERC20(mintTokenAddress).transferFrom(_msgSender(),mintFeeAddress,mintFee * mintFailFee / 100);
} else {
uint256 _fee = mintFee * mintFailFee / 100;
if (mintType == 2){
payable(_msgSender()).transfer(mintFee - _fee + _mintGasFee);
} else {
payable(_msgSender()).transfer(mintFee - _fee);
}
payable(mintFeeAddress).transfer(_fee);
}
}
return _type;
}
function setTotalSupply(uint256 _totalSupply) external onlyOwner {
if (whileFlag){
require(totalSupply<_totalSupply,"totalSupply error");
if (whileListFinishCount+publicMintCount <= _totalSupply){
uint256 add = _totalSupply - whileListFinishCount - publicMintCount;
publicMintCount += add;
} else {
uint256 sub = whileListFinishCount + publicMintCount - _totalSupply;
publicMintCount -= sub;
}
} else {
require(whileListCount+publicMintFinishCount<_totalSupply,"totalSupply error");
if (whileListCount+publicMintCount <= _totalSupply){
uint256 add = _totalSupply - whileListCount - publicMintCount;
publicMintCount += add;
} else {
uint256 sub = whileListCount + publicMintCount - _totalSupply;
publicMintCount -= sub;
}
}
}
function stopWhile() external onlyOwner {
require(!whileFlag,"while stop");
whileFlag = true;
uint256 s = whileListCount-whileListFinishCount;
publicMintCount = publicMintCount+s;
whileListCount = whileListFinishCount;
}
function setTokenURI(uint256 _tokenId,string memory _tokenURI) external {
require(_msgSender()==adminAddress,"address error");
_tokenURIs[_tokenId] = _tokenURI;
}
function setbaseURI(string memory _baseURI) external onlyOwner {
baseURI = _baseURI;
}
function setmintType(uint256 _mintType) external onlyOwner {
mintType = _mintType;
}
function setPrice(uint256 _mintPrice,uint256 _mintPriceWhile) external onlyOwner {
mintPrice = _mintPrice;
mintPriceWhile = _mintPriceWhile;
}
function setMintMaxAmount(uint256 _mintMaxAmount) external onlyOwner {
mintMaxAmount = _mintMaxAmount;
}
function setMintStartTime(uint256 _mintStartTime) external onlyOwner {
mintStartTime = _mintStartTime;
}
function setMintEndTime(uint256 _mintEndTime) external onlyOwner {
mintEndTime = _mintEndTime;
}
function setMintTokenAddress(address _mintTokenAddress) external onlyOwner {
mintTokenAddress = _mintTokenAddress;
}
function exitToken(address _tokenAddress,address _to,uint256 _amount) external onlyOwner {
if (_tokenAddress == weth){
payable(_to).transfer(_amount);
} else {
IERC20(_tokenAddress).transfer(_to,_amount);
}
}
function tokenURI(uint256 tokenId) public view virtual override returns (string memory) {
require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token");
if (mintType == 2){
return _tokenURIs[tokenId];
} else {
return bytes(baseURI).length > 0 ? string.concat(baseURI, tokenId.toString(), ".json") : describe;
}
}
function rand(uint256 _maxNum) internal returns(uint256) {
randNonce = uint256(keccak256(abi.encodePacked(randNonce,gasleft(),_msgSender(),block.timestamp,block.difficulty,block.gaslimit, blockhash(ArbSys(arbSys).arbBlockNumber())))) + 1;
uint256 randomNumber = randNonce % _maxNum + 1;
return randomNumber;
}
function _exists(uint256 tokenId) internal view returns (bool) {
return ownerOf(tokenId) != address(0);
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"components":[{"internalType":"string[5]","name":"strarr","type":"string[5]"},{"internalType":"address[4]","name":"addarr","type":"address[4]"},{"internalType":"uint256[8]","name":"arr","type":"uint256[8]"}],"internalType":"struct Context.CreateInfo","name":"info","type":"tuple"}],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"sender","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721IncorrectOwner","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721InsufficientApproval","type":"error"},{"inputs":[{"internalType":"address","name":"approver","type":"address"}],"name":"ERC721InvalidApprover","type":"error"},{"inputs":[{"internalType":"address","name":"operator","type":"address"}],"name":"ERC721InvalidOperator","type":"error"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"ERC721InvalidOwner","type":"error"},{"inputs":[{"internalType":"address","name":"receiver","type":"address"}],"name":"ERC721InvalidReceiver","type":"error"},{"inputs":[{"internalType":"address","name":"sender","type":"address"}],"name":"ERC721InvalidSender","type":"error"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ERC721NonexistentToken","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":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address[]","name":"_adds","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"addWhile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"adminAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[],"name":"arbSys","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"createBlockNumber","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"describe","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_tokenAddress","type":"address"},{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"exitToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factoryAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"imageURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isOwner","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintEndTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintFeeAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintMaxAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintNFT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mintNFT10","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintPriceWhile","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintProbability","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintStartTime","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintTokenAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"mintType","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"ownerTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicMintFinishCount","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":"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":"uint256","name":"_mintEndTime","type":"uint256"}],"name":"setMintEndTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintMaxAmount","type":"uint256"}],"name":"setMintMaxAmount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintStartTime","type":"uint256"}],"name":"setMintStartTime","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_mintTokenAddress","type":"address"}],"name":"setMintTokenAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintPrice","type":"uint256"},{"internalType":"uint256","name":"_mintPriceWhile","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"string","name":"_tokenURI","type":"string"}],"name":"setTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_totalSupply","type":"uint256"}],"name":"setTotalSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_adds","type":"address[]"},{"internalType":"uint256[]","name":"_amount","type":"uint256[]"}],"name":"setWhile","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseURI","type":"string"}],"name":"setbaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintType","type":"uint256"}],"name":"setmintType","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"stopWhile","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":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"tokenIndex","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":[],"name":"weth","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whileFlag","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whileListCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whileListFinishCount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteList","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whiteListMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"}]Contract Creation Code
60806040525f6009819055600b819055600c819055600d55601b80546001600160a01b03199081167382af49447d8a07e3bd95bd0d56f35241523fbab117909155601c80549091166064179055601e805460ff19169055348015610061575f80fd5b506040516139dd3803806139dd833981016040819052610080916102d2565b805160208101516040909101515f61009883826104a0565b5060016100a582826104a0565b506100b09150503390565b601680546001600160a01b0319166001600160a01b039290921691909117905543600a55805151600f906100e490826104a0565b508051606001516010906100f890826104a0565b50805160800151600e9061010c90826104a0565b506020818101518051601780546001600160a01b03199081166001600160a01b039384161790915582840151601880548316918416919091179055604080840151601980548416918516919091179055606093840151601a80549093169316929092179055928301518051600c558083015160115592830151601255820151601455608082015160155560a0820151601f5560c0820151601d5560e090910151905561055a565b634e487b7160e01b5f52604160045260245ffd5b604051606081016001600160401b03811182821017156101e9576101e96101b3565b60405290565b604051601f8201601f191681016001600160401b0381118282101715610217576102176101b3565b604052919050565b5f82601f83011261022e575f80fd5b61023860806101ef565b806080840185811115610249575f80fd5b845b818110156102775780516001600160a01b0381168114610269575f80fd5b84526020938401930161024b565b509095945050505050565b5f82601f830112610291575f80fd5b61010061029d816101ef565b9083019080858311156102ae575f80fd5b845b838110156102c85780518352602092830192016102b0565b5095945050505050565b5f602082840312156102e2575f80fd5b81516001600160401b038111156102f7575f80fd5b82016101a08185031215610309575f80fd5b6103116101c7565b81516001600160401b03811115610326575f80fd5b8201601f81018613610336575f80fd5b61034060a06101ef565b8060a0830188811115610351575f80fd5b835b818110156103e95780516001600160401b03811115610370575f80fd5b8501601f81018b13610380575f80fd5b80516001600160401b03811115610399576103996101b3565b6103ac601f8201601f19166020016101ef565b8181528c60208385010111156103c0575f80fd5b8160208401602083015e5f60208383010152808752505050602084019350602081019050610353565b50508352506103fd9050856020840161021f565b602082015261040f8560a08401610282565b6040820152949350505050565b600181811c9082168061043057607f821691505b60208210810361044e57634e487b7160e01b5f52602260045260245ffd5b50919050565b601f82111561049b57805f5260205f20601f840160051c810160208510156104795750805b601f840160051c820191505b81811015610498575f8155600101610485565b50505b505050565b81516001600160401b038111156104b9576104b96101b3565b6104cd816104c7845461041c565b84610454565b6020601f8211600181146104ff575f83156104e85750848201515b5f19600385901b1c1916600184901b178455610498565b5f84815260208120601f198516915b8281101561052e578785015182556020948501946001909201910161050e565b508482101561054b57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b613476806105675f395ff3fe608060405260043610610371575f3560e01c8063717a002b116101c8578063b88d4fde116100fd578063df202b191161009d578063eaaf4bb11161006d578063eaaf4bb1146109ad578063f7d97577146109c2578063f7ea7a3d146109e1578063fc6f946814610a00575f80fd5b8063df202b191461092f578063e4f8eee414610944578063e985e9c51461096f578063ea6fd4091461098e575f80fd5b8063d16306c0116100d8578063d16306c0146108be578063d5b3621b146108dd578063d6ed71fd146108fc578063d83c9f8514610910575f80fd5b8063b88d4fde14610861578063c334d65814610880578063c87b56dd1461089f575f80fd5b806396286f9a11610168578063a22cb46511610143578063a22cb465146107f5578063a768737414610814578063b33065da1461082d578063b5fc531214610842575f80fd5b806396286f9a146107a2578063966dae0e146107b75780639db44cc0146107d6575f80fd5b806392642744116101a35780639264274414610745578063931e2e4914610764578063953138d11461077957806395d89b411461078e575f80fd5b8063717a002b146106f25780638da5cb5b146107075780638f32d59b14610726575f80fd5b806320a759f7116102a957806345670fc0116102495780636817c76c116102195780636817c76c1461068b578063685114a2146106a05780636c0360eb146106bf57806370a08231146106d3575f80fd5b806345670fc0146106235780634a44f379146106385780635762f18e146106575780636352211e1461066c575f80fd5b8063372c12b111610284578063372c12b1146105a75780633ca65c37146105d25780633fc8cef3146105e557806342842e0e14610604575f80fd5b806320a759f71461054a57806323b872dd1461056957806328b6003114610588575f80fd5b8063135d088d1161031457806317f37495116102ef57806317f37495146104d757806318160ddd146104f65780631ad184ff1461050b5780631ba4f67d1461051f575f80fd5b8063135d088d1461048f578063162094c4146104a357806316dc0eaa146104c2575f80fd5b8063081812fc1161034f578063081812fc14610403578063095ea7b31461043a5780630d84d1ce1461045b5780631057d40f14610470575f80fd5b806301ffc9a7146103755780630583e9f8146103a957806306fdde03146103e2575b5f80fd5b348015610380575f80fd5b5061039461038f366004612c42565b610a1f565b60405190151581526020015b60405180910390f35b3480156103b4575f80fd5b506103d46103c3366004612c5d565b60076020525f908152604090205481565b6040519081526020016103a0565b3480156103ed575f80fd5b506103f6610a70565b6040516103a09190612ca2565b34801561040e575f80fd5b5061042261041d366004612c5d565b610aff565b6040516001600160a01b0390911681526020016103a0565b348015610445575f80fd5b50610459610454366004612cca565b610b26565b005b348015610466575f80fd5b506103d4600c5481565b34801561047b575f80fd5b50601c54610422906001600160a01b031681565b34801561049a575f80fd5b506103f6610b35565b3480156104ae575f80fd5b506104596104bd366004612dae565b610bc1565b3480156104cd575f80fd5b506103d460235481565b3480156104e2575f80fd5b506104596104f1366004612c5d565b610c35565b348015610501575f80fd5b506103d4600b5481565b348015610516575f80fd5b506103f6610c64565b34801561052a575f80fd5b506103d4610539366004612df2565b60216020525f908152604090205481565b348015610555575f80fd5b50610459610564366004612c5d565b610c71565b348015610574575f80fd5b50610459610583366004612e0b565b610ca0565b348015610593575f80fd5b506103d46105a2366004612cca565b610d29565b3480156105b2575f80fd5b506103d46105c1366004612df2565b60246020525f908152604090205481565b6104596105e0366004612c5d565b610d54565b3480156105f0575f80fd5b50601b54610422906001600160a01b031681565b34801561060f575f80fd5b5061045961061e366004612e0b565b610f62565b34801561062e575f80fd5b506103d460125481565b348015610643575f80fd5b50610459610652366004612e45565b610f7c565b348015610662575f80fd5b506103d4600d5481565b348015610677575f80fd5b50610422610686366004612c5d565b610fb2565b348015610696575f80fd5b506103d460115481565b3480156106ab575f80fd5b506104596106ba366004612e0b565b610fbc565b3480156106ca575f80fd5b506103f661109f565b3480156106de575f80fd5b506103d46106ed366004612df2565b6110ac565b3480156106fd575f80fd5b506103d460205481565b348015610712575f80fd5b50601954610422906001600160a01b031681565b348015610731575f80fd5b506019546001600160a01b03163314610394565b348015610750575f80fd5b5061045961075f366004612c5d565b6110f1565b34801561076f575f80fd5b506103d4601f5481565b348015610784575f80fd5b506103d4600a5481565b348015610799575f80fd5b506103f6611274565b3480156107ad575f80fd5b506103d460155481565b3480156107c2575f80fd5b50601654610422906001600160a01b031681565b3480156107e1575f80fd5b506104596107f0366004612df2565b611283565b348015610800575f80fd5b5061045961080f366004612e84565b6112cf565b34801561081f575f80fd5b50601e546103949060ff1681565b348015610838575f80fd5b506103d460225481565b34801561084d575f80fd5b50601754610422906001600160a01b031681565b34801561086c575f80fd5b5061045961087b366004612eb9565b6112da565b34801561088b575f80fd5b50601854610422906001600160a01b031681565b3480156108aa575f80fd5b506103f66108b9366004612c5d565b6112f1565b3480156108c9575f80fd5b506104596108d8366004612fbd565b6114de565b3480156108e8575f80fd5b506104596108f7366004612c5d565b6118a7565b348015610907575f80fd5b506104596118d6565b34801561091b575f80fd5b5061045961092a366004612c5d565b61195d565b34801561093a575f80fd5b506103d460145481565b34801561094f575f80fd5b506103d461095e366004612df2565b60256020525f908152604090205481565b34801561097a575f80fd5b50610394610989366004613076565b61198c565b348015610999575f80fd5b506104596109a8366004612fbd565b6119b9565b3480156109b8575f80fd5b506103d4601d5481565b3480156109cd575f80fd5b506104596109dc3660046130a7565b611b4a565b3480156109ec575f80fd5b506104596109fb366004612c5d565b611b7f565b348015610a0b575f80fd5b50601a54610422906001600160a01b031681565b5f6001600160e01b031982166380ac58cd60e01b1480610a4f57506001600160e01b03198216635b5e139f60e01b145b80610a6a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f8054610a7e906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa906130c7565b8015610af55780601f10610acc57610100808354040283529160200191610af5565b820191905f5260205f20905b815481529060010190602001808311610ad857829003601f168201915b5050505050905090565b5f610b0982611d2c565b505f828152600460205260409020546001600160a01b0316610a6a565b610b31828233611d64565b5050565b600e8054610b42906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e906130c7565b8015610bb95780601f10610b9057610100808354040283529160200191610bb9565b820191905f5260205f20905b815481529060010190602001808311610b9c57829003601f168201915b505050505081565b601a546001600160a01b0316336001600160a01b031614610c195760405162461bcd60e51b815260206004820152600d60248201526c30b2323932b9b99032b93937b960991b60448201526064015b60405180910390fd5b5f828152600860205260409020610c308282613143565b505050565b6019546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610c10906131fe565b602055565b60108054610b42906130c7565b6019546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610c10906131fe565b601d55565b6001600160a01b038216610cc957604051633250574960e11b81525f6004820152602401610c10565b5f610cd5838333611d71565b9050836001600160a01b0316816001600160a01b031614610d23576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610c10565b50505050565b6006602052815f5260405f208181548110610d42575f80fd5b905f5260205f20015f91509150505481565b601f544211610d905760405162461bcd60e51b81526020600482015260086024820152671b9bc81cdd185c9d60c21b6044820152606401610c10565b6020541580610da0575060205442105b610dbc5760405162461bcd60e51b8152600401610c1090613233565b5f8111610dfa5760405162461bcd60e51b815260206004820152600c60248201526b30b6b7bab73a1032b93937b960a11b6044820152606401610c10565b601b546017546001600160a01b03908116911614610e4c5760405162461bcd60e51b815260206004820152600f60248201526e36b4b73a103a3cb8329032b93937b960891b6044820152606401610c10565b6016546040805163395bdbb960e21b815290515f926001600160a01b03169163e56f6ee4916004808301926020929190829003018187875af1158015610e94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb89190613255565b90505f601554600203610ed257610ecf8383613280565b90505b5f5b83811015610f1e575f610ee73385611f5c565b905080600103610f0557601154610efe9084613297565b9250610f15565b601254610f129084613297565b92505b50600101610ed4565b50803414610c305760405162461bcd60e51b81526020600482015260116024820152703a37ba30b610383934b1b29032b93937b960791b6044820152606401610c10565b610c3083838360405180602001604052805f8152506112da565b6019546001600160a01b03163314610fa65760405162461bcd60e51b8152600401610c10906131fe565b600f610b318282613143565b5f610a6a82611d2c565b6019546001600160a01b03163314610fe65760405162461bcd60e51b8152600401610c10906131fe565b601b546001600160a01b039081169084160361102f576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610d23573d5f803e3d5ffd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af115801561107b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2391906132aa565b600f8054610b42906130c7565b5f6001600160a01b0382166110d6576040516322718ad960e21b81525f6004820152602401610c10565b506001600160a01b03165f9081526003602052604090205490565b601f54421161112d5760405162461bcd60e51b81526020600482015260086024820152671b9bc81cdd185c9d60c21b6044820152606401610c10565b602054158061113d575060205442105b6111595760405162461bcd60e51b8152600401610c1090613233565b5f81116111975760405162461bcd60e51b815260206004820152600c60248201526b30b6b7bab73a1032b93937b960a11b6044820152606401610c10565b601b546017546001600160a01b039182169116036111e95760405162461bcd60e51b815260206004820152600f60248201526e36b4b73a103a3cb8329032b93937b960891b6044820152606401610c10565b6016546040805163395bdbb960e21b815290515f926001600160a01b03169163e56f6ee4916004808301926020929190829003018187875af1158015611231573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112559190613255565b90505f5b82811015610c305761126b3383611f5c565b50600101611259565b606060018054610a7e906130c7565b6019546001600160a01b031633146112ad5760405162461bcd60e51b8152600401610c10906131fe565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b610b3133838361257e565b6112e5848484610ca0565b610d238484848461261c565b60606112fc82612742565b6113605760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c10565b601554600203611405575f8281526008602052604090208054611382906130c7565b80601f01602080910402602001604051908101604052809291908181526020018280546113ae906130c7565b80156113f95780601f106113d0576101008083540402835291602001916113f9565b820191905f5260205f20905b8154815290600101906020018083116113dc57829003601f168201915b50505050509050919050565b5f600f8054611413906130c7565b9050116114a85760108054611427906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611453906130c7565b801561149e5780601f106114755761010080835404028352916020019161149e565b820191905f5260205f20905b81548152906001019060200180831161148157829003601f168201915b5050505050610a6a565b600f6114b38361275e565b6040516020016114c49291906132c5565b60405160208183030381529060405292915050565b919050565b6019546001600160a01b031633146115085760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff161561152b5760405162461bcd60e51b8152600401610c1090613350565b805182511461156b5760405162461bcd60e51b815260206004820152600c60248201526b3632b733ba341032b93937b960a11b6044820152606401610c10565b5f5b8251811015610c305781818151811061158857611588613374565b602002602001015160245f8584815181106115a5576115a5613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054111561178c575f8282815181106115e6576115e6613374565b602002602001015160245f86858151811061160357611603613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20546116359190613388565b90505f60255f86858151811061164d5761164d613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205460245f87868151811061168a5761168a613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20546116bc9190613388565b90505f8183116116cd5750816116d0565b50805b80156117845780600c546116e49190613297565b600c556022546116f5908290613388565b6022819055508060245f88878151811061171157611711613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20546117439190613388565b60245f88878151811061175857611758613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20819055505b50505061189f565b5f60245f8584815181106117a2576117a2613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548383815181106117dc576117dc613374565b60200260200101516117ee9190613388565b905080600c546117fe9190613388565b600c5560225461180f908290613297565b6022819055508060245f86858151811061182b5761182b613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205461185d9190613297565b60245f86858151811061187257611872613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550505b60010161156d565b6019546001600160a01b031633146118d15760405162461bcd60e51b8152600401610c10906131fe565b601f55565b6019546001600160a01b031633146119005760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff16156119235760405162461bcd60e51b8152600401610c1090613350565b601e805460ff191660011790556023546022545f9161194191613388565b905080600c546119519190613297565b600c5550602354602255565b6019546001600160a01b031633146119875760405162461bcd60e51b8152600401610c10906131fe565b601555565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6019546001600160a01b031633146119e35760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff1615611a065760405162461bcd60e51b8152600401610c1090613350565b8051825114611a465760405162461bcd60e51b815260206004820152600c60248201526b3632b733ba341032b93937b960a11b6044820152606401610c10565b5f5b8251811015610c3057818181518110611a6357611a63613374565b6020026020010151600c54611a789190613388565b600c558151829082908110611a8f57611a8f613374565b6020026020010151602254611aa49190613297565b6022558151829082908110611abb57611abb613374565b602002602001015160245f858481518110611ad857611ad8613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054611b0a9190613297565b60245f858481518110611b1f57611b1f613374565b6020908102919091018101516001600160a01b031682528101919091526040015f2055600101611a48565b6019546001600160a01b03163314611b745760405162461bcd60e51b8152600401610c10906131fe565b601191909155601255565b6019546001600160a01b03163314611ba95760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff1615611c795780600b5410611bf95760405162461bcd60e51b81526020600482015260116024820152703a37ba30b629bab838363c9032b93937b960791b6044820152606401610c10565b80600c54602354611c0a9190613297565b11611c4a575f600c5460235483611c219190613388565b611c2b9190613388565b905080600c5f828254611c3e9190613297565b90915550611d29915050565b5f81600c54602354611c5c9190613297565b611c669190613388565b905080600c5f828254611c3e9190613388565b80600d54602254611c8a9190613297565b10611ccb5760405162461bcd60e51b81526020600482015260116024820152703a37ba30b629bab838363c9032b93937b960791b6044820152606401610c10565b80600c54602254611cdc9190613297565b11611cf3575f600c5460225483611c219190613388565b5f81600c54602254611d059190613297565b611d0f9190613388565b905080600c5f828254611d229190613388565b9091555050505b50565b5f818152600260205260408120546001600160a01b031680610a6a57604051637e27328960e01b815260048101849052602401610c10565b610c3083838360016127ee565b5f828152600260205260408120546001600160a01b0390811690831615611d9d57611d9d8184866128f2565b6001600160a01b03811615611ea457611db85f855f806127ee565b611dc1816110ac565b600114611e47576001600160a01b0381165f9081526006602052604090208054611ded90600190613388565b81548110611dfd57611dfd613374565b5f9182526020808320909101546001600160a01b038416835260068252604080842088855260079093529092205481548110611e3b57611e3b613374565b5f918252602090912001555b6001600160a01b0381165f908152600660205260409020805480611e6d57611e6d61339b565b5f828152602080822083015f199081018390559283019093556001600160a01b038416815260039092526040909120805490910190555b6001600160a01b03851615611efe576001600160a01b0385165f81815260066020908152604080832080546001808201835591855283852081018a9055898552600784528285205593835260039091529020805490910190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8060165f9054906101000a90046001600160a01b03166001600160a01b031663da7ced3f6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd39190613255565b90505f60165f9054906101000a90046001600160a01b03166001600160a01b03166397d0297b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015612027573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204b9190613255565b601154601e549192509060019060ff1615801561208957506001600160a01b0387165f90815260256020908152604080832054602490925290912054115b1561209657505060125460025b8060010361211b57601d546001600160a01b0388165f90815260216020526040902054106120f85760405162461bcd60e51b815260206004820152600f60248201526e1b5a5b9d0813585e08105b5bdd5b9d608a1b6044820152606401610c10565b600c54600d541061211b5760405162461bcd60e51b8152600401610c1090613233565b5f6121266064612956565b9050816002148061213957506014548111155b156123dc57601b546017546001600160a01b0390811691161461227e576017546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f875af11580156121b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dc91906132aa565b506017546018546001600160a01b039182169163a9059cbb911660646122028988613280565b61220c91906133c3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015612254573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227891906132aa565b506122e8565b5f606461228b8786613280565b61229591906133c3565b90506015546002036122ae576122ab8882613297565b90505b6018546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156122e5573d5f803e3d5ffd5b50505b600160095f8282546122fa9190613297565b909155505060095461230c8982612a62565b6001600b5f82825461231e9190613297565b90915550506001839003612383576001600d5f82825461233e9190613297565b90915550506001600160a01b0389165f90815260216020526040902054612366906001613297565b6001600160a01b038a165f908152602160205260409020556123d6565b600160235f8282546123959190613297565b90915550506001600160a01b0389165f908152602560205260409020546123bd906001613297565b6001600160a01b038a165f908152602560205260409020555b50612573565b601b546017546001600160a01b0390811691161461249d576017546001600160a01b03166323b872dd336018546001600160a01b0316606461241e8989613280565b61242891906133c3565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015612479573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d691906132aa565b5f60646124aa8686613280565b6124b491906133c3565b905060155460020361250457336108fc896124cf8488613388565b6124d99190613297565b6040518115909202915f818181858888f193505050501580156124fe573d5f803e3d5ffd5b50612539565b336108fc6125128387613388565b6040518115909202915f818181858888f19350505050158015612537573d5f803e3d5ffd5b505b6018546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612570573d5f803e3d5ffd5b50505b509695505050505050565b6001600160a01b0382166125b057604051630b61174360e31b81526001600160a01b0383166004820152602401610c10565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610d2357604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061265e9033908890879087906004016133d6565b6020604051808303815f875af1925050508015612698575060408051601f3d908101601f1916820190925261269591810190613412565b60015b6126ff573d8080156126c5576040519150601f19603f3d011682016040523d82523d5f602084013e6126ca565b606091505b5080515f036126f757604051633250574960e11b81526001600160a01b0385166004820152602401610c10565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461273b57604051633250574960e11b81526001600160a01b0385166004820152602401610c10565b5050505050565b5f8061274d83610fb2565b6001600160a01b0316141592915050565b60605f61276a83612a7b565b60010190505f8167ffffffffffffffff81111561278957612789612cf2565b6040519080825280601f01601f1916602001820160405280156127b3576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846127bd57509392505050565b808061280257506001600160a01b03821615155b156128c3575f61281184611d2c565b90506001600160a01b0383161580159061283d5750826001600160a01b0316816001600160a01b031614155b8015612850575061284e818461198c565b155b156128795760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610c10565b81156128c15783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6128fd838383612b52565b610c30576001600160a01b03831661292b57604051637e27328960e01b815260048101829052602401610c10565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610c10565b5f6013545a33424445601c5f9054906101000a90046001600160a01b03166001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d39190613255565b6040805160208101989098528701959095526bffffffffffffffffffffffff19606094851b16938601939093526074850191909152609484015260b48301524060d482015260f40160408051601f198184030181529190528051602090910120612a3e906001613297565b60138190555f90612a5090849061342d565b612a5b906001613297565b9392505050565b610b31828260405180602001604052805f815250612bb6565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612ab95772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612ae5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612b0357662386f26fc10000830492506010015b6305f5e1008310612b1b576305f5e100830492506008015b6127108310612b2f57612710830492506004015b60648310612b41576064830492506002015b600a8310610a6a5760010192915050565b5f6001600160a01b03831615801590612bae5750826001600160a01b0316846001600160a01b03161480612b8b5750612b8b848461198c565b80612bae57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b612bc08383612bcc565b610c305f84848461261c565b6001600160a01b038216612bf557604051633250574960e11b81525f6004820152602401610c10565b5f612c0183835f611d71565b90506001600160a01b03811615610c30576040516339e3563760e11b81525f6004820152602401610c10565b6001600160e01b031981168114611d29575f80fd5b5f60208284031215612c52575f80fd5b8135612a5b81612c2d565b5f60208284031215612c6d575f80fd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612a5b6020830184612c74565b80356001600160a01b03811681146114d9575f80fd5b5f8060408385031215612cdb575f80fd5b612ce483612cb4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d2f57612d2f612cf2565b604052919050565b5f8067ffffffffffffffff841115612d5157612d51612cf2565b50601f8301601f1916602001612d6681612d06565b915050828152838383011115612d7a575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112612d9f575f80fd5b612a5b83833560208501612d37565b5f8060408385031215612dbf575f80fd5b82359150602083013567ffffffffffffffff811115612ddc575f80fd5b612de885828601612d90565b9150509250929050565b5f60208284031215612e02575f80fd5b612a5b82612cb4565b5f805f60608486031215612e1d575f80fd5b612e2684612cb4565b9250612e3460208501612cb4565b929592945050506040919091013590565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612bae84828501612d90565b8015158114611d29575f80fd5b5f8060408385031215612e95575f80fd5b612e9e83612cb4565b91506020830135612eae81612e77565b809150509250929050565b5f805f8060808587031215612ecc575f80fd5b612ed585612cb4565b9350612ee360208601612cb4565b925060408501359150606085013567ffffffffffffffff811115612f05575f80fd5b8501601f81018713612f15575f80fd5b612f2487823560208401612d37565b91505092959194509250565b5f67ffffffffffffffff821115612f4957612f49612cf2565b5060051b60200190565b5f82601f830112612f62575f80fd5b8135612f75612f7082612f30565b612d06565b8082825260208201915060208360051b860101925085831115612f96575f80fd5b602085015b83811015612fb3578035835260209283019201612f9b565b5095945050505050565b5f8060408385031215612fce575f80fd5b823567ffffffffffffffff811115612fe4575f80fd5b8301601f81018513612ff4575f80fd5b8035613002612f7082612f30565b8082825260208201915060208360051b850101925087831115613023575f80fd5b6020840193505b8284101561304c5761303b84612cb4565b82526020938401939091019061302a565b9450505050602083013567ffffffffffffffff81111561306a575f80fd5b612de885828601612f53565b5f8060408385031215613087575f80fd5b61309083612cb4565b915061309e60208401612cb4565b90509250929050565b5f80604083850312156130b8575f80fd5b50508035926020909101359150565b600181811c908216806130db57607f821691505b6020821081036130f957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610c3057805f5260205f20601f840160051c810160208510156131245750805b601f840160051c820191505b8181101561273b575f8155600101613130565b815167ffffffffffffffff81111561315d5761315d612cf2565b6131718161316b84546130c7565b846130ff565b6020601f8211600181146131a3575f831561318c5750848201515b5f19600385901b1c1916600184901b17845561273b565b5f84815260208120601f198516915b828110156131d257878501518255602094850194600190920191016131b2565b50848210156131ef57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600890820152671b5a5b9d08195b9960c21b604082015260600190565b5f60208284031215613265575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6a57610a6a61326c565b80820180821115610a6a57610a6a61326c565b5f602082840312156132ba575f80fd5b8151612a5b81612e77565b5f8084546132d2816130c7565b6001821680156132e957600181146132fe5761332b565b60ff198316865281151582028601935061332b565b875f5260205f205f5b8381101561332357815488820152600190910190602001613307565b505081860193505b50505083518060208601835e64173539b7b760d91b9101908152600501949350505050565b6020808252600a908201526907768696c652073746f760b41b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610a6a57610a6a61326c565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f826133d1576133d16133af565b500490565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061340890830184612c74565b9695505050505050565b5f60208284031215613422575f80fd5b8151612a5b81612c2d565b5f8261343b5761343b6133af565b50069056fea26469706673582212202b5c7500fb1b3abba48904abc7f36244212c94ab87df0836a583aef82765a6cb64736f6c634300081a0033000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000b60528403cfdf7cb78e98d2bc8a216c60523e310000000000000000000000000fd826e6badbe6aa323fc1490102a329fbc0c5ed9000000000000000000000000b60528403cfdf7cb78e98d2bc8a216c60523e3100000000000000000000000000000000000000000000000000000000000000d050000000000000000000000000000000000000000000000000002738d24e5200000000000000000000000000000000000000000000000000000000646880c880000000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006749e5000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000742616f2042616f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000642616f42616f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f6261666b72656967796e71327369757337676b74616e35716836616a726568726e703769786c6e6134676e763237626d366d6e797763326f74617100000000000000000000000000000000000000000000000000000000000000000000203733633962623365663839613430313838666434613563393336643937373439
Deployed Bytecode
0x608060405260043610610371575f3560e01c8063717a002b116101c8578063b88d4fde116100fd578063df202b191161009d578063eaaf4bb11161006d578063eaaf4bb1146109ad578063f7d97577146109c2578063f7ea7a3d146109e1578063fc6f946814610a00575f80fd5b8063df202b191461092f578063e4f8eee414610944578063e985e9c51461096f578063ea6fd4091461098e575f80fd5b8063d16306c0116100d8578063d16306c0146108be578063d5b3621b146108dd578063d6ed71fd146108fc578063d83c9f8514610910575f80fd5b8063b88d4fde14610861578063c334d65814610880578063c87b56dd1461089f575f80fd5b806396286f9a11610168578063a22cb46511610143578063a22cb465146107f5578063a768737414610814578063b33065da1461082d578063b5fc531214610842575f80fd5b806396286f9a146107a2578063966dae0e146107b75780639db44cc0146107d6575f80fd5b806392642744116101a35780639264274414610745578063931e2e4914610764578063953138d11461077957806395d89b411461078e575f80fd5b8063717a002b146106f25780638da5cb5b146107075780638f32d59b14610726575f80fd5b806320a759f7116102a957806345670fc0116102495780636817c76c116102195780636817c76c1461068b578063685114a2146106a05780636c0360eb146106bf57806370a08231146106d3575f80fd5b806345670fc0146106235780634a44f379146106385780635762f18e146106575780636352211e1461066c575f80fd5b8063372c12b111610284578063372c12b1146105a75780633ca65c37146105d25780633fc8cef3146105e557806342842e0e14610604575f80fd5b806320a759f71461054a57806323b872dd1461056957806328b6003114610588575f80fd5b8063135d088d1161031457806317f37495116102ef57806317f37495146104d757806318160ddd146104f65780631ad184ff1461050b5780631ba4f67d1461051f575f80fd5b8063135d088d1461048f578063162094c4146104a357806316dc0eaa146104c2575f80fd5b8063081812fc1161034f578063081812fc14610403578063095ea7b31461043a5780630d84d1ce1461045b5780631057d40f14610470575f80fd5b806301ffc9a7146103755780630583e9f8146103a957806306fdde03146103e2575b5f80fd5b348015610380575f80fd5b5061039461038f366004612c42565b610a1f565b60405190151581526020015b60405180910390f35b3480156103b4575f80fd5b506103d46103c3366004612c5d565b60076020525f908152604090205481565b6040519081526020016103a0565b3480156103ed575f80fd5b506103f6610a70565b6040516103a09190612ca2565b34801561040e575f80fd5b5061042261041d366004612c5d565b610aff565b6040516001600160a01b0390911681526020016103a0565b348015610445575f80fd5b50610459610454366004612cca565b610b26565b005b348015610466575f80fd5b506103d4600c5481565b34801561047b575f80fd5b50601c54610422906001600160a01b031681565b34801561049a575f80fd5b506103f6610b35565b3480156104ae575f80fd5b506104596104bd366004612dae565b610bc1565b3480156104cd575f80fd5b506103d460235481565b3480156104e2575f80fd5b506104596104f1366004612c5d565b610c35565b348015610501575f80fd5b506103d4600b5481565b348015610516575f80fd5b506103f6610c64565b34801561052a575f80fd5b506103d4610539366004612df2565b60216020525f908152604090205481565b348015610555575f80fd5b50610459610564366004612c5d565b610c71565b348015610574575f80fd5b50610459610583366004612e0b565b610ca0565b348015610593575f80fd5b506103d46105a2366004612cca565b610d29565b3480156105b2575f80fd5b506103d46105c1366004612df2565b60246020525f908152604090205481565b6104596105e0366004612c5d565b610d54565b3480156105f0575f80fd5b50601b54610422906001600160a01b031681565b34801561060f575f80fd5b5061045961061e366004612e0b565b610f62565b34801561062e575f80fd5b506103d460125481565b348015610643575f80fd5b50610459610652366004612e45565b610f7c565b348015610662575f80fd5b506103d4600d5481565b348015610677575f80fd5b50610422610686366004612c5d565b610fb2565b348015610696575f80fd5b506103d460115481565b3480156106ab575f80fd5b506104596106ba366004612e0b565b610fbc565b3480156106ca575f80fd5b506103f661109f565b3480156106de575f80fd5b506103d46106ed366004612df2565b6110ac565b3480156106fd575f80fd5b506103d460205481565b348015610712575f80fd5b50601954610422906001600160a01b031681565b348015610731575f80fd5b506019546001600160a01b03163314610394565b348015610750575f80fd5b5061045961075f366004612c5d565b6110f1565b34801561076f575f80fd5b506103d4601f5481565b348015610784575f80fd5b506103d4600a5481565b348015610799575f80fd5b506103f6611274565b3480156107ad575f80fd5b506103d460155481565b3480156107c2575f80fd5b50601654610422906001600160a01b031681565b3480156107e1575f80fd5b506104596107f0366004612df2565b611283565b348015610800575f80fd5b5061045961080f366004612e84565b6112cf565b34801561081f575f80fd5b50601e546103949060ff1681565b348015610838575f80fd5b506103d460225481565b34801561084d575f80fd5b50601754610422906001600160a01b031681565b34801561086c575f80fd5b5061045961087b366004612eb9565b6112da565b34801561088b575f80fd5b50601854610422906001600160a01b031681565b3480156108aa575f80fd5b506103f66108b9366004612c5d565b6112f1565b3480156108c9575f80fd5b506104596108d8366004612fbd565b6114de565b3480156108e8575f80fd5b506104596108f7366004612c5d565b6118a7565b348015610907575f80fd5b506104596118d6565b34801561091b575f80fd5b5061045961092a366004612c5d565b61195d565b34801561093a575f80fd5b506103d460145481565b34801561094f575f80fd5b506103d461095e366004612df2565b60256020525f908152604090205481565b34801561097a575f80fd5b50610394610989366004613076565b61198c565b348015610999575f80fd5b506104596109a8366004612fbd565b6119b9565b3480156109b8575f80fd5b506103d4601d5481565b3480156109cd575f80fd5b506104596109dc3660046130a7565b611b4a565b3480156109ec575f80fd5b506104596109fb366004612c5d565b611b7f565b348015610a0b575f80fd5b50601a54610422906001600160a01b031681565b5f6001600160e01b031982166380ac58cd60e01b1480610a4f57506001600160e01b03198216635b5e139f60e01b145b80610a6a57506301ffc9a760e01b6001600160e01b03198316145b92915050565b60605f8054610a7e906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610aaa906130c7565b8015610af55780601f10610acc57610100808354040283529160200191610af5565b820191905f5260205f20905b815481529060010190602001808311610ad857829003601f168201915b5050505050905090565b5f610b0982611d2c565b505f828152600460205260409020546001600160a01b0316610a6a565b610b31828233611d64565b5050565b600e8054610b42906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610b6e906130c7565b8015610bb95780601f10610b9057610100808354040283529160200191610bb9565b820191905f5260205f20905b815481529060010190602001808311610b9c57829003601f168201915b505050505081565b601a546001600160a01b0316336001600160a01b031614610c195760405162461bcd60e51b815260206004820152600d60248201526c30b2323932b9b99032b93937b960991b60448201526064015b60405180910390fd5b5f828152600860205260409020610c308282613143565b505050565b6019546001600160a01b03163314610c5f5760405162461bcd60e51b8152600401610c10906131fe565b602055565b60108054610b42906130c7565b6019546001600160a01b03163314610c9b5760405162461bcd60e51b8152600401610c10906131fe565b601d55565b6001600160a01b038216610cc957604051633250574960e11b81525f6004820152602401610c10565b5f610cd5838333611d71565b9050836001600160a01b0316816001600160a01b031614610d23576040516364283d7b60e01b81526001600160a01b0380861660048301526024820184905282166044820152606401610c10565b50505050565b6006602052815f5260405f208181548110610d42575f80fd5b905f5260205f20015f91509150505481565b601f544211610d905760405162461bcd60e51b81526020600482015260086024820152671b9bc81cdd185c9d60c21b6044820152606401610c10565b6020541580610da0575060205442105b610dbc5760405162461bcd60e51b8152600401610c1090613233565b5f8111610dfa5760405162461bcd60e51b815260206004820152600c60248201526b30b6b7bab73a1032b93937b960a11b6044820152606401610c10565b601b546017546001600160a01b03908116911614610e4c5760405162461bcd60e51b815260206004820152600f60248201526e36b4b73a103a3cb8329032b93937b960891b6044820152606401610c10565b6016546040805163395bdbb960e21b815290515f926001600160a01b03169163e56f6ee4916004808301926020929190829003018187875af1158015610e94573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610eb89190613255565b90505f601554600203610ed257610ecf8383613280565b90505b5f5b83811015610f1e575f610ee73385611f5c565b905080600103610f0557601154610efe9084613297565b9250610f15565b601254610f129084613297565b92505b50600101610ed4565b50803414610c305760405162461bcd60e51b81526020600482015260116024820152703a37ba30b610383934b1b29032b93937b960791b6044820152606401610c10565b610c3083838360405180602001604052805f8152506112da565b6019546001600160a01b03163314610fa65760405162461bcd60e51b8152600401610c10906131fe565b600f610b318282613143565b5f610a6a82611d2c565b6019546001600160a01b03163314610fe65760405162461bcd60e51b8152600401610c10906131fe565b601b546001600160a01b039081169084160361102f576040516001600160a01b0383169082156108fc029083905f818181858888f19350505050158015610d23573d5f803e3d5ffd5b60405163a9059cbb60e01b81526001600160a01b0383811660048301526024820183905284169063a9059cbb906044016020604051808303815f875af115801561107b573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190610d2391906132aa565b600f8054610b42906130c7565b5f6001600160a01b0382166110d6576040516322718ad960e21b81525f6004820152602401610c10565b506001600160a01b03165f9081526003602052604090205490565b601f54421161112d5760405162461bcd60e51b81526020600482015260086024820152671b9bc81cdd185c9d60c21b6044820152606401610c10565b602054158061113d575060205442105b6111595760405162461bcd60e51b8152600401610c1090613233565b5f81116111975760405162461bcd60e51b815260206004820152600c60248201526b30b6b7bab73a1032b93937b960a11b6044820152606401610c10565b601b546017546001600160a01b039182169116036111e95760405162461bcd60e51b815260206004820152600f60248201526e36b4b73a103a3cb8329032b93937b960891b6044820152606401610c10565b6016546040805163395bdbb960e21b815290515f926001600160a01b03169163e56f6ee4916004808301926020929190829003018187875af1158015611231573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906112559190613255565b90505f5b82811015610c305761126b3383611f5c565b50600101611259565b606060018054610a7e906130c7565b6019546001600160a01b031633146112ad5760405162461bcd60e51b8152600401610c10906131fe565b601780546001600160a01b0319166001600160a01b0392909216919091179055565b610b3133838361257e565b6112e5848484610ca0565b610d238484848461261c565b60606112fc82612742565b6113605760405162461bcd60e51b815260206004820152602f60248201527f4552433732314d657461646174613a2055524920717565727920666f72206e6f60448201526e3732bc34b9ba32b73a103a37b5b2b760891b6064820152608401610c10565b601554600203611405575f8281526008602052604090208054611382906130c7565b80601f01602080910402602001604051908101604052809291908181526020018280546113ae906130c7565b80156113f95780601f106113d0576101008083540402835291602001916113f9565b820191905f5260205f20905b8154815290600101906020018083116113dc57829003601f168201915b50505050509050919050565b5f600f8054611413906130c7565b9050116114a85760108054611427906130c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611453906130c7565b801561149e5780601f106114755761010080835404028352916020019161149e565b820191905f5260205f20905b81548152906001019060200180831161148157829003601f168201915b5050505050610a6a565b600f6114b38361275e565b6040516020016114c49291906132c5565b60405160208183030381529060405292915050565b919050565b6019546001600160a01b031633146115085760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff161561152b5760405162461bcd60e51b8152600401610c1090613350565b805182511461156b5760405162461bcd60e51b815260206004820152600c60248201526b3632b733ba341032b93937b960a11b6044820152606401610c10565b5f5b8251811015610c305781818151811061158857611588613374565b602002602001015160245f8584815181106115a5576115a5613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054111561178c575f8282815181106115e6576115e6613374565b602002602001015160245f86858151811061160357611603613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20546116359190613388565b90505f60255f86858151811061164d5761164d613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205460245f87868151811061168a5761168a613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20546116bc9190613388565b90505f8183116116cd5750816116d0565b50805b80156117845780600c546116e49190613297565b600c556022546116f5908290613388565b6022819055508060245f88878151811061171157611711613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20546117439190613388565b60245f88878151811061175857611758613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20819055505b50505061189f565b5f60245f8584815181106117a2576117a2613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f20548383815181106117dc576117dc613374565b60200260200101516117ee9190613388565b905080600c546117fe9190613388565b600c5560225461180f908290613297565b6022819055508060245f86858151811061182b5761182b613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f205461185d9190613297565b60245f86858151811061187257611872613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2081905550505b60010161156d565b6019546001600160a01b031633146118d15760405162461bcd60e51b8152600401610c10906131fe565b601f55565b6019546001600160a01b031633146119005760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff16156119235760405162461bcd60e51b8152600401610c1090613350565b601e805460ff191660011790556023546022545f9161194191613388565b905080600c546119519190613297565b600c5550602354602255565b6019546001600160a01b031633146119875760405162461bcd60e51b8152600401610c10906131fe565b601555565b6001600160a01b039182165f90815260056020908152604080832093909416825291909152205460ff1690565b6019546001600160a01b031633146119e35760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff1615611a065760405162461bcd60e51b8152600401610c1090613350565b8051825114611a465760405162461bcd60e51b815260206004820152600c60248201526b3632b733ba341032b93937b960a11b6044820152606401610c10565b5f5b8251811015610c3057818181518110611a6357611a63613374565b6020026020010151600c54611a789190613388565b600c558151829082908110611a8f57611a8f613374565b6020026020010151602254611aa49190613297565b6022558151829082908110611abb57611abb613374565b602002602001015160245f858481518110611ad857611ad8613374565b60200260200101516001600160a01b03166001600160a01b031681526020019081526020015f2054611b0a9190613297565b60245f858481518110611b1f57611b1f613374565b6020908102919091018101516001600160a01b031682528101919091526040015f2055600101611a48565b6019546001600160a01b03163314611b745760405162461bcd60e51b8152600401610c10906131fe565b601191909155601255565b6019546001600160a01b03163314611ba95760405162461bcd60e51b8152600401610c10906131fe565b601e5460ff1615611c795780600b5410611bf95760405162461bcd60e51b81526020600482015260116024820152703a37ba30b629bab838363c9032b93937b960791b6044820152606401610c10565b80600c54602354611c0a9190613297565b11611c4a575f600c5460235483611c219190613388565b611c2b9190613388565b905080600c5f828254611c3e9190613297565b90915550611d29915050565b5f81600c54602354611c5c9190613297565b611c669190613388565b905080600c5f828254611c3e9190613388565b80600d54602254611c8a9190613297565b10611ccb5760405162461bcd60e51b81526020600482015260116024820152703a37ba30b629bab838363c9032b93937b960791b6044820152606401610c10565b80600c54602254611cdc9190613297565b11611cf3575f600c5460225483611c219190613388565b5f81600c54602254611d059190613297565b611d0f9190613388565b905080600c5f828254611d229190613388565b9091555050505b50565b5f818152600260205260408120546001600160a01b031680610a6a57604051637e27328960e01b815260048101849052602401610c10565b610c3083838360016127ee565b5f828152600260205260408120546001600160a01b0390811690831615611d9d57611d9d8184866128f2565b6001600160a01b03811615611ea457611db85f855f806127ee565b611dc1816110ac565b600114611e47576001600160a01b0381165f9081526006602052604090208054611ded90600190613388565b81548110611dfd57611dfd613374565b5f9182526020808320909101546001600160a01b038416835260068252604080842088855260079093529092205481548110611e3b57611e3b613374565b5f918252602090912001555b6001600160a01b0381165f908152600660205260409020805480611e6d57611e6d61339b565b5f828152602080822083015f199081018390559283019093556001600160a01b038416815260039092526040909120805490910190555b6001600160a01b03851615611efe576001600160a01b0385165f81815260066020908152604080832080546001808201835591855283852081018a9055898552600784528285205593835260039091529020805490910190555b5f8481526002602052604080822080546001600160a01b0319166001600160a01b0389811691821790925591518793918516917fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef91a4949350505050565b5f8060165f9054906101000a90046001600160a01b03166001600160a01b031663da7ced3f6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015611faf573d5f803e3d5ffd5b505050506040513d601f19601f82011682018060405250810190611fd39190613255565b90505f60165f9054906101000a90046001600160a01b03166001600160a01b03166397d0297b6040518163ffffffff1660e01b81526004016020604051808303815f875af1158015612027573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061204b9190613255565b601154601e549192509060019060ff1615801561208957506001600160a01b0387165f90815260256020908152604080832054602490925290912054115b1561209657505060125460025b8060010361211b57601d546001600160a01b0388165f90815260216020526040902054106120f85760405162461bcd60e51b815260206004820152600f60248201526e1b5a5b9d0813585e08105b5bdd5b9d608a1b6044820152606401610c10565b600c54600d541061211b5760405162461bcd60e51b8152600401610c1090613233565b5f6121266064612956565b9050816002148061213957506014548111155b156123dc57601b546017546001600160a01b0390811691161461227e576017546001600160a01b03166323b872dd336040516001600160e01b031960e084901b1681526001600160a01b039091166004820152306024820152604481018690526064016020604051808303815f875af11580156121b8573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906121dc91906132aa565b506017546018546001600160a01b039182169163a9059cbb911660646122028988613280565b61220c91906133c3565b6040516001600160e01b031960e085901b1681526001600160a01b03909216600483015260248201526044016020604051808303815f875af1158015612254573d5f803e3d5ffd5b505050506040513d601f19601f8201168201806040525081019061227891906132aa565b506122e8565b5f606461228b8786613280565b61229591906133c3565b90506015546002036122ae576122ab8882613297565b90505b6018546040516001600160a01b039091169082156108fc029083905f818181858888f193505050501580156122e5573d5f803e3d5ffd5b50505b600160095f8282546122fa9190613297565b909155505060095461230c8982612a62565b6001600b5f82825461231e9190613297565b90915550506001839003612383576001600d5f82825461233e9190613297565b90915550506001600160a01b0389165f90815260216020526040902054612366906001613297565b6001600160a01b038a165f908152602160205260409020556123d6565b600160235f8282546123959190613297565b90915550506001600160a01b0389165f908152602560205260409020546123bd906001613297565b6001600160a01b038a165f908152602560205260409020555b50612573565b601b546017546001600160a01b0390811691161461249d576017546001600160a01b03166323b872dd336018546001600160a01b0316606461241e8989613280565b61242891906133c3565b6040516001600160e01b031960e086901b1681526001600160a01b03938416600482015292909116602483015260448201526064016020604051808303815f875af1158015612479573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906123d691906132aa565b5f60646124aa8686613280565b6124b491906133c3565b905060155460020361250457336108fc896124cf8488613388565b6124d99190613297565b6040518115909202915f818181858888f193505050501580156124fe573d5f803e3d5ffd5b50612539565b336108fc6125128387613388565b6040518115909202915f818181858888f19350505050158015612537573d5f803e3d5ffd5b505b6018546040516001600160a01b039091169082156108fc029083905f818181858888f19350505050158015612570573d5f803e3d5ffd5b50505b509695505050505050565b6001600160a01b0382166125b057604051630b61174360e31b81526001600160a01b0383166004820152602401610c10565b6001600160a01b038381165f81815260056020908152604080832094871680845294825291829020805460ff191686151590811790915591519182527f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31910160405180910390a3505050565b6001600160a01b0383163b15610d2357604051630a85bd0160e11b81526001600160a01b0384169063150b7a029061265e9033908890879087906004016133d6565b6020604051808303815f875af1925050508015612698575060408051601f3d908101601f1916820190925261269591810190613412565b60015b6126ff573d8080156126c5576040519150601f19603f3d011682016040523d82523d5f602084013e6126ca565b606091505b5080515f036126f757604051633250574960e11b81526001600160a01b0385166004820152602401610c10565b805181602001fd5b6001600160e01b03198116630a85bd0160e11b1461273b57604051633250574960e11b81526001600160a01b0385166004820152602401610c10565b5050505050565b5f8061274d83610fb2565b6001600160a01b0316141592915050565b60605f61276a83612a7b565b60010190505f8167ffffffffffffffff81111561278957612789612cf2565b6040519080825280601f01601f1916602001820160405280156127b3576020820181803683370190505b5090508181016020015b5f19016f181899199a1a9b1b9c1cb0b131b232b360811b600a86061a8153600a85049450846127bd57509392505050565b808061280257506001600160a01b03821615155b156128c3575f61281184611d2c565b90506001600160a01b0383161580159061283d5750826001600160a01b0316816001600160a01b031614155b8015612850575061284e818461198c565b155b156128795760405163a9fbf51f60e01b81526001600160a01b0384166004820152602401610c10565b81156128c15783856001600160a01b0316826001600160a01b03167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45b505b50505f90815260046020526040902080546001600160a01b0319166001600160a01b0392909216919091179055565b6128fd838383612b52565b610c30576001600160a01b03831661292b57604051637e27328960e01b815260048101829052602401610c10565b60405163177e802f60e01b81526001600160a01b038316600482015260248101829052604401610c10565b5f6013545a33424445601c5f9054906101000a90046001600160a01b03166001600160a01b031663a3b1b31d6040518163ffffffff1660e01b8152600401602060405180830381865afa1580156129af573d5f803e3d5ffd5b505050506040513d601f19601f820116820180604052508101906129d39190613255565b6040805160208101989098528701959095526bffffffffffffffffffffffff19606094851b16938601939093526074850191909152609484015260b48301524060d482015260f40160408051601f198184030181529190528051602090910120612a3e906001613297565b60138190555f90612a5090849061342d565b612a5b906001613297565b9392505050565b610b31828260405180602001604052805f815250612bb6565b5f8072184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b8310612ab95772184f03e93ff9f4daa797ed6e38ed64bf6a1f0160401b830492506040015b6d04ee2d6d415b85acef81000000008310612ae5576d04ee2d6d415b85acef8100000000830492506020015b662386f26fc100008310612b0357662386f26fc10000830492506010015b6305f5e1008310612b1b576305f5e100830492506008015b6127108310612b2f57612710830492506004015b60648310612b41576064830492506002015b600a8310610a6a5760010192915050565b5f6001600160a01b03831615801590612bae5750826001600160a01b0316846001600160a01b03161480612b8b5750612b8b848461198c565b80612bae57505f828152600460205260409020546001600160a01b038481169116145b949350505050565b612bc08383612bcc565b610c305f84848461261c565b6001600160a01b038216612bf557604051633250574960e11b81525f6004820152602401610c10565b5f612c0183835f611d71565b90506001600160a01b03811615610c30576040516339e3563760e11b81525f6004820152602401610c10565b6001600160e01b031981168114611d29575f80fd5b5f60208284031215612c52575f80fd5b8135612a5b81612c2d565b5f60208284031215612c6d575f80fd5b5035919050565b5f81518084528060208401602086015e5f602082860101526020601f19601f83011685010191505092915050565b602081525f612a5b6020830184612c74565b80356001600160a01b03811681146114d9575f80fd5b5f8060408385031215612cdb575f80fd5b612ce483612cb4565b946020939093013593505050565b634e487b7160e01b5f52604160045260245ffd5b604051601f8201601f1916810167ffffffffffffffff81118282101715612d2f57612d2f612cf2565b604052919050565b5f8067ffffffffffffffff841115612d5157612d51612cf2565b50601f8301601f1916602001612d6681612d06565b915050828152838383011115612d7a575f80fd5b828260208301375f602084830101529392505050565b5f82601f830112612d9f575f80fd5b612a5b83833560208501612d37565b5f8060408385031215612dbf575f80fd5b82359150602083013567ffffffffffffffff811115612ddc575f80fd5b612de885828601612d90565b9150509250929050565b5f60208284031215612e02575f80fd5b612a5b82612cb4565b5f805f60608486031215612e1d575f80fd5b612e2684612cb4565b9250612e3460208501612cb4565b929592945050506040919091013590565b5f60208284031215612e55575f80fd5b813567ffffffffffffffff811115612e6b575f80fd5b612bae84828501612d90565b8015158114611d29575f80fd5b5f8060408385031215612e95575f80fd5b612e9e83612cb4565b91506020830135612eae81612e77565b809150509250929050565b5f805f8060808587031215612ecc575f80fd5b612ed585612cb4565b9350612ee360208601612cb4565b925060408501359150606085013567ffffffffffffffff811115612f05575f80fd5b8501601f81018713612f15575f80fd5b612f2487823560208401612d37565b91505092959194509250565b5f67ffffffffffffffff821115612f4957612f49612cf2565b5060051b60200190565b5f82601f830112612f62575f80fd5b8135612f75612f7082612f30565b612d06565b8082825260208201915060208360051b860101925085831115612f96575f80fd5b602085015b83811015612fb3578035835260209283019201612f9b565b5095945050505050565b5f8060408385031215612fce575f80fd5b823567ffffffffffffffff811115612fe4575f80fd5b8301601f81018513612ff4575f80fd5b8035613002612f7082612f30565b8082825260208201915060208360051b850101925087831115613023575f80fd5b6020840193505b8284101561304c5761303b84612cb4565b82526020938401939091019061302a565b9450505050602083013567ffffffffffffffff81111561306a575f80fd5b612de885828601612f53565b5f8060408385031215613087575f80fd5b61309083612cb4565b915061309e60208401612cb4565b90509250929050565b5f80604083850312156130b8575f80fd5b50508035926020909101359150565b600181811c908216806130db57607f821691505b6020821081036130f957634e487b7160e01b5f52602260045260245ffd5b50919050565b601f821115610c3057805f5260205f20601f840160051c810160208510156131245750805b601f840160051c820191505b8181101561273b575f8155600101613130565b815167ffffffffffffffff81111561315d5761315d612cf2565b6131718161316b84546130c7565b846130ff565b6020601f8211600181146131a3575f831561318c5750848201515b5f19600385901b1c1916600184901b17845561273b565b5f84815260208120601f198516915b828110156131d257878501518255602094850194600190920191016131b2565b50848210156131ef57868401515f19600387901b60f8161c191681555b50505050600190811b01905550565b6020808252818101527f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572604082015260600190565b6020808252600890820152671b5a5b9d08195b9960c21b604082015260600190565b5f60208284031215613265575f80fd5b5051919050565b634e487b7160e01b5f52601160045260245ffd5b8082028115828204841417610a6a57610a6a61326c565b80820180821115610a6a57610a6a61326c565b5f602082840312156132ba575f80fd5b8151612a5b81612e77565b5f8084546132d2816130c7565b6001821680156132e957600181146132fe5761332b565b60ff198316865281151582028601935061332b565b875f5260205f205f5b8381101561332357815488820152600190910190602001613307565b505081860193505b50505083518060208601835e64173539b7b760d91b9101908152600501949350505050565b6020808252600a908201526907768696c652073746f760b41b604082015260600190565b634e487b7160e01b5f52603260045260245ffd5b81810381811115610a6a57610a6a61326c565b634e487b7160e01b5f52603160045260245ffd5b634e487b7160e01b5f52601260045260245ffd5b5f826133d1576133d16133af565b500490565b6001600160a01b03858116825284166020820152604081018390526080606082018190525f9061340890830184612c74565b9695505050505050565b5f60208284031215613422575f80fd5b8151612a5b81612c2d565b5f8261343b5761343b6133af565b50069056fea26469706673582212202b5c7500fb1b3abba48904abc7f36244212c94ab87df0836a583aef82765a6cb64736f6c634300081a0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000000000001a000000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1000000000000000000000000b60528403cfdf7cb78e98d2bc8a216c60523e310000000000000000000000000fd826e6badbe6aa323fc1490102a329fbc0c5ed9000000000000000000000000b60528403cfdf7cb78e98d2bc8a216c60523e3100000000000000000000000000000000000000000000000000000000000000d050000000000000000000000000000000000000000000000000002738d24e5200000000000000000000000000000000000000000000000000000000646880c880000000000000000000000000000000000000000000000000000000000000000190000000000000000000000000000000000000000000000000000000000000002000000000000000000000000000000000000000000000000000000006749e5000000000000000000000000000000000000000000000000000000000000000032000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000a000000000000000000000000000000000000000000000000000000000000000c00000000000000000000000000000000000000000000000000000000000000100000000000000000000000000000000000000000000000000000000000000014000000000000000000000000000000000000000000000000000000000000001c00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000742616f2042616f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000642616f42616f0000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005d68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066732f6261666b72656967796e71327369757337676b74616e35716836616a726568726e703769786c6e6134676e763237626d366d6e797763326f74617100000000000000000000000000000000000000000000000000000000000000000000203733633962623365663839613430313838666434613563393336643937373439
-----Decoded View---------------
Arg [0] : info (tuple):
Arg [1] : strarr (string[5]): ,Bao Bao,BaoBao,https://gateway.pinata.cloud/ipfs/bafkreigynq2sius7gktan5qh6ajrehrnp7ixlna4gnv27bm6mnywc2otaq,73c9bb3ef89a40188fd4a5c936d97749
Arg [2] : addarr (address[4]): 0x82aF49447D8a07e3bd95BD0d56f35241523fBab1,0xb60528403CfDf7cb78e98d2Bc8A216C60523E310,0xFd826E6BaDBE6aa323fC1490102a329FbC0c5eD9,0xb60528403CfDf7cb78e98d2Bc8A216C60523E310
Arg [3] : arr (uint256[8]): 3333,690000000000000,6900000000000,25,2,1732896000,50,0
-----Encoded View---------------
30 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 00000000000000000000000000000000000000000000000000000000000001a0
Arg [2] : 00000000000000000000000082af49447d8a07e3bd95bd0d56f35241523fbab1
Arg [3] : 000000000000000000000000b60528403cfdf7cb78e98d2bc8a216c60523e310
Arg [4] : 000000000000000000000000fd826e6badbe6aa323fc1490102a329fbc0c5ed9
Arg [5] : 000000000000000000000000b60528403cfdf7cb78e98d2bc8a216c60523e310
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000d05
Arg [7] : 0000000000000000000000000000000000000000000000000002738d24e52000
Arg [8] : 00000000000000000000000000000000000000000000000000000646880c8800
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000019
Arg [10] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [11] : 000000000000000000000000000000000000000000000000000000006749e500
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000032
Arg [13] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [14] : 00000000000000000000000000000000000000000000000000000000000000a0
Arg [15] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [16] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [17] : 0000000000000000000000000000000000000000000000000000000000000140
Arg [18] : 00000000000000000000000000000000000000000000000000000000000001c0
Arg [19] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [20] : 0000000000000000000000000000000000000000000000000000000000000007
Arg [21] : 42616f2042616f00000000000000000000000000000000000000000000000000
Arg [22] : 0000000000000000000000000000000000000000000000000000000000000006
Arg [23] : 42616f42616f0000000000000000000000000000000000000000000000000000
Arg [24] : 000000000000000000000000000000000000000000000000000000000000005d
Arg [25] : 68747470733a2f2f676174657761792e70696e6174612e636c6f75642f697066
Arg [26] : 732f6261666b72656967796e71327369757337676b74616e35716836616a7265
Arg [27] : 68726e703769786c6e6134676e763237626d366d6e797763326f746171000000
Arg [28] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [29] : 3733633962623365663839613430313838666434613563393336643937373439
Deployed Bytecode Sourcemap
33974:11343:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18305:305;;;;;;;;;;-1:-1:-1;18305:305:0;;;;;:::i;:::-;;:::i;:::-;;;565:14:1;;558:22;540:41;;528:2;513:18;18305:305:0;;;;;;;;17947:45;;;;;;;;;;-1:-1:-1;17947:45:0;;;;;:::i;:::-;;;;;;;;;;;;;;;;;969:25:1;;;957:2;942:18;17947:45:0;823:177:1;19136:91:0;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;20308:158::-;;;;;;;;;;-1:-1:-1;20308:158:0;;;;;:::i;:::-;;:::i;:::-;;;-1:-1:-1;;;;;1688:32:1;;;1670:51;;1658:2;1643:18;20308:158:0;1524:203:1;20127:115:0;;;;;;;;;;-1:-1:-1;20127:115:0;;;;;:::i;:::-;;:::i;:::-;;34208:34;;;;;;;;;;;;;;;;34794:66;;;;;;;;;;-1:-1:-1;34794:66:0;;;;-1:-1:-1;;;;;34794:66:0;;;34298:22;;;;;;;;;;;;;:::i;43080:185::-;;;;;;;;;;-1:-1:-1;43080:185:0;;;;;:::i;:::-;;:::i;35106:35::-;;;;;;;;;;;;;;;;43912:110;;;;;;;;;;-1:-1:-1;43912:110:0;;;;;:::i;:::-;;:::i;34171:30::-;;;;;;;;;;;;;;;;34355:22;;;;;;;;;;;;;:::i;35010:51::-;;;;;;;;;;-1:-1:-1;35010:51:0;;;;;:::i;:::-;;;;;;;;;;;;;;43660:118;;;;;;;;;;-1:-1:-1;43660:118:0;;;;;:::i;:::-;;:::i;20977:588::-;;;;;;;;;;-1:-1:-1;20977:588:0;;;;;:::i;:::-;;:::i;17890:48::-;;;;;;;;;;-1:-1:-1;17890:48:0;;;;;:::i;:::-;;:::i;35148:44::-;;;;;;;;;;-1:-1:-1;35148:44:0;;;;;:::i;:::-;;;;;;;;;;;;;;38109:823;;;;;;:::i;:::-;;:::i;34723:64::-;;;;;;;;;;-1:-1:-1;34723:64:0;;;;-1:-1:-1;;;;;34723:64:0;;;21636:134;;;;;;;;;;-1:-1:-1;21636:134:0;;;;;:::i;:::-;;:::i;34415:29::-;;;;;;;;;;;;;;;;43273:100;;;;;;;;;;-1:-1:-1;43273:100:0;;;;;:::i;:::-;;:::i;34249:40::-;;;;;;;;;;;;;;;;18949:120;;;;;;;;;;-1:-1:-1;18949:120:0;;;;;:::i;:::-;;:::i;34384:24::-;;;;;;;;;;;;;;;;44168:266;;;;;;;;;;-1:-1:-1;44168:266:0;;;;;:::i;:::-;;:::i;34327:21::-;;;;;;;;;;;;;:::i;18674:213::-;;;;;;;;;;-1:-1:-1;18674:213:0;;;;;:::i;:::-;;:::i;34975:26::-;;;;;;;;;;;;;;;;34662:20;;;;;;;;;;-1:-1:-1;34662:20:0;;;;-1:-1:-1;;;;;34662:20:0;;;35370:93;;;;;;;;;;-1:-1:-1;35450:5:0;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35370:93;;38940:465;;;;;;;;;;-1:-1:-1;38940:465:0;;;;;:::i;:::-;;:::i;34940:28::-;;;;;;;;;;;;;;;;34132:32;;;;;;;;;;;;;;;;19296:95;;;;;;;;;;;;;:::i;34520:23::-;;;;;;;;;;;;;;;;34552:29;;;;;;;;;;-1:-1:-1;34552:29:0;;;;-1:-1:-1;;;;;34552:29:0;;;44030:130;;;;;;;;;;-1:-1:-1;44030:130:0;;;;;:::i;:::-;;:::i;20538:146::-;;;;;;;;;;-1:-1:-1;20538:146:0;;;;;:::i;:::-;;:::i;34904:29::-;;;;;;;;;;-1:-1:-1;34904:29:0;;;;;;;;35070;;;;;;;;;;;;;;;;34588:31;;;;;;;;;;-1:-1:-1;34588:31:0;;;;-1:-1:-1;;;;;34588:31:0;;;21841:211;;;;;;;;;;-1:-1:-1;21841:211:0;;;;;:::i;:::-;;:::i;34626:29::-;;;;;;;;;;-1:-1:-1;34626:29:0;;;;-1:-1:-1;;;;;34626:29:0;;;44442:394;;;;;;;;;;-1:-1:-1;44442:394:0;;;;;:::i;:::-;;:::i;36979:1122::-;;;;;;;;;;-1:-1:-1;36979:1122:0;;;;;:::i;:::-;;:::i;43786:118::-;;;;;;;;;;-1:-1:-1;43786:118:0;;;;;:::i;:::-;;:::i;42802:270::-;;;;;;;;;;;;;:::i;43381:98::-;;;;;;;;;;-1:-1:-1;43381:98:0;;;;;:::i;:::-;;:::i;34483:30::-;;;;;;;;;;;;;;;;35199:48;;;;;;;;;;-1:-1:-1;35199:48:0;;;;;:::i;:::-;;;;;;;;;;;;;;20755:155;;;;;;;;;;-1:-1:-1;20755:155:0;;;;;:::i;:::-;;:::i;36536:435::-;;;;;;;;;;-1:-1:-1;36536:435:0;;;;;:::i;:::-;;:::i;34869:28::-;;;;;;;;;;;;;;;;43487:165;;;;;;;;;;-1:-1:-1;43487:165:0;;;;;:::i;:::-;;:::i;41798:996::-;;;;;;;;;;-1:-1:-1;41798:996:0;;;;;:::i;:::-;;:::i;34689:27::-;;;;;;;;;;-1:-1:-1;34689:27:0;;;;-1:-1:-1;;;;;34689:27:0;;;18305:305;18407:4;-1:-1:-1;;;;;;18444:40:0;;-1:-1:-1;;;18444:40:0;;:105;;-1:-1:-1;;;;;;;18501:48:0;;-1:-1:-1;;;18501:48:0;18444:105;:158;;;-1:-1:-1;;;;;;;;;;15824:40:0;;;18566:36;18424:178;18305:305;-1:-1:-1;;18305:305:0:o;19136:91::-;19181:13;19214:5;19207:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19136:91;:::o;20308:158::-;20375:7;20395:22;20409:7;20395:13;:22::i;:::-;-1:-1:-1;22884:7:0;22911:24;;;:15;:24;;;;;;-1:-1:-1;;;;;22911:24:0;20437:21;22814:129;20127:115;20199:35;20208:2;20212:7;2048:10;20199:8;:35::i;:::-;20127:115;;:::o;34298:22::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43080:185::-;43185:12;;-1:-1:-1;;;;;43185:12:0;2048:10;-1:-1:-1;;;;;43171:26:0;;43163:51;;;;-1:-1:-1;;;43163:51:0;;9078:2:1;43163:51:0;;;9060:21:1;9117:2;9097:18;;;9090:30;-1:-1:-1;;;9136:18:1;;;9129:43;9189:18;;43163:51:0;;;;;;;;;43225:20;;;;:10;:20;;;;;:32;43248:9;43225:20;:32;:::i;:::-;;43080:185;;:::o;43912:110::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;43988:11:::1;:26:::0;43912:110::o;34355:22::-;;;;;;;:::i;43660:118::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;43740:13:::1;:30:::0;43660:118::o;20977:588::-;-1:-1:-1;;;;;21072:16:0;;21068:89;;21112:33;;-1:-1:-1;;;21112:33:0;;21142:1;21112:33;;;1670:51:1;1643:18;;21112:33:0;1524:203:1;21068:89:0;21378:21;21402:34;21410:2;21414:7;2048:10;21402:7;:34::i;:::-;21378:58;;21468:4;-1:-1:-1;;;;;21451:21:0;:13;-1:-1:-1;;;;;21451:21:0;;21447:111;;21496:50;;-1:-1:-1;;;21496:50:0;;-1:-1:-1;;;;;11923:32:1;;;21496:50:0;;;11905:51:1;11972:18;;;11965:34;;;12035:32;;12015:18;;;12008:60;11878:18;;21496:50:0;11703:371:1;21447:111:0;21057:508;20977:588;;;:::o;17890:48::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38109:823::-;38199:13;;38181:15;:31;38173:51;;;;-1:-1:-1;;;38173:51:0;;12281:2:1;38173:51:0;;;12263:21:1;12320:1;12300:18;;;12293:29;-1:-1:-1;;;12338:18:1;;;12331:38;12386:18;;38173:51:0;12079:331:1;38173:51:0;38243:11;;:16;;:49;;;38281:11;;38263:15;:29;38243:49;38235:69;;;;-1:-1:-1;;;38235:69:0;;;;;;;:::i;:::-;38333:1;38323:7;:11;38315:35;;;;-1:-1:-1;;;38315:35:0;;12953:2:1;38315:35:0;;;12935:21:1;12992:2;12972:18;;;12965:30;-1:-1:-1;;;13011:18:1;;;13004:42;13063:18;;38315:35:0;12751:336:1;38315:35:0;38389:4;;38369:16;;-1:-1:-1;;;;;38369:16:0;;;38389:4;;38369:24;38361:51;;;;-1:-1:-1;;;38361:51:0;;13294:2:1;38361:51:0;;;13276:21:1;13333:2;13313:18;;;13306:30;-1:-1:-1;;;13352:18:1;;;13345:45;13407:18;;38361:51:0;13092:339:1;38361:51:0;38452:14;;38444:36;;;-1:-1:-1;;;38444:36:0;;;;38423:18;;-1:-1:-1;;;;;38452:14:0;;38444:34;;:36;;;;;;;;;;;;;;38423:18;38452:14;38444:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;38423:57;;38491:16;38526:8;;38538:1;38526:13;38522:76;;38566:20;38579:7;38566:10;:20;:::i;:::-;38555:31;;38522:76;38612:6;38608:255;38623:7;38621:1;:9;38608:255;;;38650:13;38666:33;2048:10;38688;38666:8;:33::i;:::-;38650:49;;38718:5;38727:1;38718:10;38714:138;;38760:9;;38748:21;;;;:::i;:::-;;;38714:138;;;38822:14;;38810:26;;;;:::i;:::-;;;38714:138;-1:-1:-1;38631:3:0;;38608:255;;;;38894:8;38881:9;:21;38873:51;;;;-1:-1:-1;;;38873:51:0;;14262:2:1;38873:51:0;;;14244:21:1;14301:2;14281:18;;;14274:30;-1:-1:-1;;;14320:18:1;;;14313:47;14377:18;;38873:51:0;14060:341:1;21636:134:0;21723:39;21740:4;21746:2;21750:7;21723:39;;;;;;;;;;;;:16;:39::i;43273:100::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;43347:7:::1;:18;43357:8:::0;43347:7;:18:::1;:::i;18949:120::-:0;19012:7;19039:22;19053:7;19039:13;:22::i;44168:266::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;44289:4:::1;::::0;-1:-1:-1;;;;;44289:4:0;;::::1;44272:21:::0;;::::1;::::0;44268:159:::1;;44309:30;::::0;-1:-1:-1;;;;;44309:21:0;::::1;::::0;:30;::::1;;;::::0;44331:7;;44309:30:::1;::::0;;;44331:7;44309:21;:30;::::1;;;;;;;;;;;;;::::0;::::1;;;;44268:159;44372:43;::::0;-1:-1:-1;;;44372:43:0;;-1:-1:-1;;;;;14598:32:1;;;44372:43:0::1;::::0;::::1;14580:51:1::0;14647:18;;;14640:34;;;44372:30:0;::::1;::::0;::::1;::::0;14553:18:1;;44372:43:0::1;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;34327:21::-:0;;;;;;;:::i;18674:213::-;18737:7;-1:-1:-1;;;;;18761:19:0;;18757:89;;18804:30;;-1:-1:-1;;;18804:30:0;;18831:1;18804:30;;;1670:51:1;1643:18;;18804:30:0;1524:203:1;18757:89:0;-1:-1:-1;;;;;;18863:16:0;;;;;:9;:16;;;;;;;18674:213::o;38940:465::-;39019:13;;39001:15;:31;38993:51;;;;-1:-1:-1;;;38993:51:0;;12281:2:1;38993:51:0;;;12263:21:1;12320:1;12300:18;;;12293:29;-1:-1:-1;;;12338:18:1;;;12331:38;12386:18;;38993:51:0;12079:331:1;38993:51:0;39063:11;;:16;;:49;;;39101:11;;39083:15;:29;39063:49;39055:69;;;;-1:-1:-1;;;39055:69:0;;;;;;;:::i;:::-;39153:1;39143:7;:11;39135:35;;;;-1:-1:-1;;;39135:35:0;;12953:2:1;39135:35:0;;;12935:21:1;12992:2;12972:18;;;12965:30;-1:-1:-1;;;13011:18:1;;;13004:42;13063:18;;39135:35:0;12751:336:1;39135:35:0;39209:4;;39189:16;;-1:-1:-1;;;;;39209:4:0;;;39189:16;;:24;39181:51;;;;-1:-1:-1;;;39181:51:0;;13294:2:1;39181:51:0;;;13276:21:1;13333:2;13313:18;;;13306:30;-1:-1:-1;;;13352:18:1;;;13345:45;13407:18;;39181:51:0;13092:339:1;39181:51:0;39272:14;;39264:36;;;-1:-1:-1;;;39264:36:0;;;;39243:18;;-1:-1:-1;;;;;39272:14:0;;39264:34;;:36;;;;;;;;;;;;;;39243:18;39272:14;39264:36;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39243:57;;39315:6;39311:87;39326:7;39324:1;:9;39311:87;;;39353:33;2048:10;39375;39353:8;:33::i;:::-;-1:-1:-1;39334:3:0;;39311:87;;19296:95;19343:13;19376:7;19369:14;;;;;:::i;44030:130::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;44116:16:::1;:36:::0;;-1:-1:-1;;;;;;44116:36:0::1;-1:-1:-1::0;;;;;44116:36:0;;;::::1;::::0;;;::::1;::::0;;44030:130::o;20538:146::-;20624:52;2048:10;20657:8;20667;20624:18;:52::i;21841:211::-;21955:31;21968:4;21974:2;21978:7;21955:12;:31::i;:::-;21997:47;22020:4;22026:2;22030:7;22039:4;21997:22;:47::i;44442:394::-;44515:13;44549:16;44557:7;44549;:16::i;:::-;44541:76;;;;-1:-1:-1;;;44541:76:0;;15137:2:1;44541:76:0;;;15119:21:1;15176:2;15156:18;;;15149:30;15215:34;15195:18;;;15188:62;-1:-1:-1;;;15266:18:1;;;15259:45;15321:19;;44541:76:0;14935:411:1;44541:76:0;44632:8;;44644:1;44632:13;44628:201;;44668:19;;;;:10;:19;;;;;44661:26;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44442:394;;;:::o;44628:201::-;44751:1;44733:7;44727:21;;;;;:::i;:::-;;;:25;:90;;44809:8;44727:90;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44769:7;44778:18;:7;:16;:18::i;:::-;44755:51;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44720:97;44442:394;-1:-1:-1;;44442:394:0:o;44628:201::-;44442:394;;;:::o;36979:1122::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;37083:9:::1;::::0;::::1;;37082:10;37074:32;;;;-1:-1:-1::0;;;37074:32:0::1;;;;;;;:::i;:::-;37139:7;:14;37125:5;:12;:28;37117:52;;;::::0;-1:-1:-1;;;37117:52:0;;17093:2:1;37117:52:0::1;::::0;::::1;17075:21:1::0;17132:2;17112:18;;;17105:30;-1:-1:-1;;;17151:18:1;;;17144:42;17203:18;;37117:52:0::1;16891:336:1::0;37117:52:0::1;37184:6;37180:914;37195:5;:12;37193:1;:14;37180:914;;;37253:7;37261:1;37253:10;;;;;;;;:::i;:::-;;;;;;;37231:9;:19;37241:5;37247:1;37241:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37231:19:0::1;-1:-1:-1::0;;;;;37231:19:0::1;;;;;;;;;;;;;:32;37227:856;;;37283:9;37317:7;37325:1;37317:10;;;;;;;;:::i;:::-;;;;;;;37295:9;:19;37305:5;37311:1;37305:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37295:19:0::1;-1:-1:-1::0;;;;;37295:19:0::1;;;;;;;;;;;;;:32;;;;:::i;:::-;37283:44;;37346:9;37378:13;:23;37392:5;37398:1;37392:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37378:23:0::1;-1:-1:-1::0;;;;;37378:23:0::1;;;;;;;;;;;;;37358:9;:19;37368:5;37374:1;37368:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37358:19:0::1;-1:-1:-1::0;;;;;37358:19:0::1;;;;;;;;;;;;;:43;;;;:::i;:::-;37346:55;;37420:11;37463:1;37458;:6;37454:117;;-1:-1:-1::0;37494:1:0;37454:117:::1;;;-1:-1:-1::0;37550:1:0;37454:117:::1;37593:7:::0;;37589:218:::1;;37658:3;37642:15;;:19;;;;:::i;:::-;37624:15;:37:::0;37701:14:::1;::::0;:18:::1;::::0;37716:3;;37701:18:::1;:::i;:::-;37684:14;:35;;;;37784:3;37764:9;:19;37774:5;37780:1;37774:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37764:19:0::1;-1:-1:-1::0;;;;;37764:19:0::1;;;;;;;;;;;;;:23;;;;:::i;:::-;37742:9;:19;37752:5;37758:1;37752:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37742:19:0::1;-1:-1:-1::0;;;;;37742:19:0::1;;;;;;;;;;;;:45;;;;37589:218;37264:558;;;37227:856;;;37847:11;37874:9;:19;37884:5;37890:1;37884:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;37874:19:0::1;-1:-1:-1::0;;;;;37874:19:0::1;;;;;;;;;;;;;37861:7;37869:1;37861:10;;;;;;;;:::i;:::-;;;;;;;:32;;;;:::i;:::-;37847:46;;37946:3;37930:15;;:19;;;;:::i;:::-;37912:15;:37:::0;37985:14:::1;::::0;:18:::1;::::0;38000:3;;37985:18:::1;:::i;:::-;37968:14;:35;;;;38064:3;38044:9;:19;38054:5;38060:1;38054:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;38044:19:0::1;-1:-1:-1::0;;;;;38044:19:0::1;;;;;;;;;;;;;:23;;;;:::i;:::-;38022:9;:19;38032:5;38038:1;38032:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;38022:19:0::1;-1:-1:-1::0;;;;;38022:19:0::1;;;;;;;;;;;;:45;;;;37828:255;37227:856;37208:3;;37180:914;;43786:118:::0;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;43866:13:::1;:30:::0;43786:118::o;42802:270::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;42862:9:::1;::::0;::::1;;42861:10;42853:32;;;;-1:-1:-1::0;;;42853:32:0::1;;;;;;;:::i;:::-;42896:9;:16:::0;;-1:-1:-1;;42896:16:0::1;42908:4;42896:16;::::0;;42950:20:::1;::::0;42935:14:::1;::::0;42896:9:::1;::::0;42935:35:::1;::::0;::::1;:::i;:::-;42923:47;;43015:1;42999:15;;:17;;;;:::i;:::-;42981:15;:35:::0;-1:-1:-1;43044:20:0::1;::::0;43027:14:::1;:37:::0;42802:270::o;43381:98::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;43451:8:::1;:20:::0;43381:98::o;20755:155::-;-1:-1:-1;;;;;20867:25:0;;;20843:4;20867:25;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;;;20755:155::o;36536:435::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;36640:9:::1;::::0;::::1;;36639:10;36631:32;;;;-1:-1:-1::0;;;36631:32:0::1;;;;;;;:::i;:::-;36696:7;:14;36682:5;:12;:28;36674:52;;;::::0;-1:-1:-1;;;36674:52:0;;17093:2:1;36674:52:0::1;::::0;::::1;17075:21:1::0;17132:2;17112:18;;;17105:30;-1:-1:-1;;;17151:18:1;;;17144:42;17203:18;;36674:52:0::1;16891:336:1::0;36674:52:0::1;36741:6;36737:227;36752:5;:12;36750:1;:14;36737:227;;;36818:7;36826:1;36818:10;;;;;;;;:::i;:::-;;;;;;;36802:15;;:26;;;;:::i;:::-;36784:15;:44:::0;36875:10;;:7;;36883:1;;36875:10;::::1;;;;;:::i;:::-;;;;;;;36860:14;;:25;;;;:::i;:::-;36843:14;:42:::0;36942:10;;:7;;36950:1;;36942:10;::::1;;;;;:::i;:::-;;;;;;;36922:9;:19;36932:5;36938:1;36932:8;;;;;;;;:::i;:::-;;;;;;;-1:-1:-1::0;;;;;36922:19:0::1;-1:-1:-1::0;;;;;36922:19:0::1;;;;;;;;;;;;;:30;;;;:::i;:::-;36900:9;:19;36910:5;36916:1;36910:8;;;;;;;;:::i;:::-;;::::0;;::::1;::::0;;;;;;;-1:-1:-1;;;;;36900:19:0::1;::::0;;;::::1;::::0;;;;;;-1:-1:-1;36900:19:0;:52;36765:3:::1;;36737:227;;43487:165:::0;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;43579:9:::1;:22:::0;;;;43612:14:::1;:32:::0;43487:165::o;41798:996::-;35450:5;;-1:-1:-1;;;;;35450:5:0;2048:10;35434:21;35290:54;;;;-1:-1:-1;;;35290:54:0;;;;;;;:::i;:::-;41878:9:::1;::::0;::::1;;41874:913;;;41923:12;41911:11;;:24;41903:53;;;::::0;-1:-1:-1;;;41903:53:0;;17699:2:1;41903:53:0::1;::::0;::::1;17681:21:1::0;17738:2;17718:18;;;17711:30;-1:-1:-1;;;17757:18:1;;;17750:47;17814:18;;41903:53:0::1;17497:341:1::0;41903:53:0::1;42015:12;41996:15;;41975:20;;:36;;;;:::i;:::-;:52;41971:349;;42047:11;42099:15;;42076:20;;42061:12;:35;;;;:::i;:::-;:53;;;;:::i;:::-;42047:67;;42152:3;42133:15;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;41874:913:0::1;::::0;-1:-1:-1;;41874:913:0::1;41971:349;42196:11;42251:12;42233:15;;42210:20;;:38;;;;:::i;:::-;:53;;;;:::i;:::-;42196:67;;42301:3;42282:15;;:22;;;;;;;:::i;41874:913::-;42397:12;42375:21;;42360:14;;:36;;;;:::i;:::-;:49;42352:78;;;::::0;-1:-1:-1;;;42352:78:0;;17699:2:1;42352:78:0::1;::::0;::::1;17681:21:1::0;17738:2;17718:18;;;17711:30;-1:-1:-1;;;17757:18:1;;;17750:47;17814:18;;42352:78:0::1;17497:341:1::0;42352:78:0::1;42483:12;42464:15;;42449:14;;:30;;;;:::i;:::-;:46;42445:331;;42515:11;42561:15;;42544:14;;42529:12;:29;;;;:::i;42445:331::-;42658:11;42707:12;42689:15;;42672:14;;:32;;;;:::i;:::-;:47;;;;:::i;:::-;42658:61;;42757:3;42738:15;;:22;;;;;;;:::i;:::-;::::0;;;-1:-1:-1;;;42445:331:0::1;41798:996:::0;:::o;31962:247::-;32025:7;22669:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22669:16:0;;32089:90;;32136:31;;-1:-1:-1;;;32136:31:0;;;;;969:25:1;;;942:18;;32136:31:0;823:177:1;30194:122:0;30275:33;30284:2;30288:7;30297:4;30303;30275:8;:33::i;24096:1183::-;24182:7;22669:16;;;:7;:16;;;;;;-1:-1:-1;;;;;22669:16:0;;;;24297:18;;;24293:88;;24332:37;24349:4;24355;24361:7;24332:16;:37::i;:::-;-1:-1:-1;;;;;24428:18:0;;;24424:479;;24546:48;24563:1;24567:7;24584:1;24588:5;24546:8;:48::i;:::-;24628:15;24638:4;24628:9;:15::i;:::-;24647:1;24628:20;24625:146;;-1:-1:-1;;;;;24710:17:0;;;;;;:11;:17;;;;;24728:24;;:26;;24753:1;;24728:26;:::i;:::-;24710:45;;;;;;;;:::i;:::-;;;;;;;;;;;;;-1:-1:-1;;;;;24669:17:0;;;;:11;:17;;;;;;24687:19;;;:10;:19;;;;;;;24669:38;;;;;;;;:::i;:::-;;;;;;;;;;:86;24625:146;-1:-1:-1;;;;;24785:17:0;;;;;;:11;:17;;;;;:23;;;;;;;:::i;:::-;;;;;;;;;;;-1:-1:-1;;24785:23:0;;;;;;;;;;;;-1:-1:-1;;;;;24856:15:0;;;;:9;:15;;;;;;;:20;;;;;;;24424:479;-1:-1:-1;;;;;24919:16:0;;;24915:254;;-1:-1:-1;;;;;24970:15:0;;24954:13;24970:15;;;:11;:15;;;;;;;;:22;;25007:29;;;;;;;;;;;;;;;;;25051:19;;;:10;:19;;;;;:27;25124:13;;;:9;:13;;;;;:18;;;;;;;24915:254;25181:16;;;;:7;:16;;;;;;:21;;-1:-1:-1;;;;;;25181:21:0;-1:-1:-1;;;;;25181:21:0;;;;;;;;;25220:27;;25181:16;;25220:27;;;;;;;25267:4;24096:1183;-1:-1:-1;;;;24096:1183:0:o;39419:2371::-;39487:7;39507:22;39540:14;;;;;;;;;-1:-1:-1;;;;;39540:14:0;-1:-1:-1;;;;;39532:38:0;;:40;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39507:65;;39583:19;39613:14;;;;;;;;;-1:-1:-1;;;;;39613:14:0;-1:-1:-1;;;;;39605:35:0;;:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;39683:9;;39746;;39583:59;;-1:-1:-1;39683:9:0;39729:1;;39746:9;;39745:10;:47;;;;-1:-1:-1;;;;;;39775:17:0;;;;;;:13;:17;;;;;;;;;39759:9;:13;;;;;;;:33;39745:47;39741:127;;;-1:-1:-1;;39842:14:0;;39816:1;39741:127;39882:5;39891:1;39882:10;39878:177;;39937:13;;-1:-1:-1;;;;;39916:20:0;;;;;;:16;:20;;;;;;:34;39908:61;;;;-1:-1:-1;;;39908:61:0;;18177:2:1;39908:61:0;;;18159:21:1;18216:2;18196:18;;;18189:30;-1:-1:-1;;;18235:18:1;;;18228:45;18290:18;;39908:61:0;17975:339:1;39908:61:0;40016:15;;39992:21;;:39;39984:59;;;;-1:-1:-1;;;39984:59:0;;;;;;;:::i;:::-;40065:21;40089:9;40094:3;40089:4;:9::i;:::-;40065:33;;40113:5;40120:1;40113:8;:44;;;;40142:15;;40125:13;:32;;40113:44;40109:1651;;;40200:4;;40180:16;;-1:-1:-1;;;;;40180:16:0;;;40200:4;;40180:24;40176:569;;40231:16;;-1:-1:-1;;;;;40231:16:0;40224:37;2048:10;40224:73;;-1:-1:-1;;;;;;40224:73:0;;;;;;;-1:-1:-1;;;;;18539:32:1;;;40224:73:0;;;18521:51:1;40283:4:0;18588:18:1;;;18581:60;18657:18;;;18650:34;;;18494:18;;40224:73:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;-1:-1:-1;40323:16:0;;40350:14;;-1:-1:-1;;;;;40323:16:0;;;;40316:33;;40350:14;40392:3;40365:24;40375:14;40365:7;:24;:::i;:::-;:30;;;;:::i;:::-;40316:80;;-1:-1:-1;;;;;;40316:80:0;;;;;;;-1:-1:-1;;;;;14598:32:1;;;40316:80:0;;;14580:51:1;14647:18;;;14640:34;14553:18;;40316:80:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;40176:569;;;40523:12;40565:3;40538:24;40548:14;40538:7;:24;:::i;:::-;:30;;;;:::i;:::-;40523:45;;40591:8;;40603:1;40591:13;40587:86;;40635:18;40642:11;40635:4;:18;:::i;:::-;40628:25;;40587:86;40699:14;;40691:38;;-1:-1:-1;;;;;40699:14:0;;;;40691:38;;;;;40724:4;;40699:14;40691:38;40699:14;40691:38;40724:4;40699:14;40691:38;;;;;;;;;;;;;;;;;;;;;40418:327;40176:569;40792:1;40775:13;;:18;;;;;;;:::i;:::-;;;;-1:-1:-1;;40826:13:0;;40854:22;40864:2;40826:13;40854:9;:22::i;:::-;40906:1;40891:11;;:16;;;;;;;:::i;:::-;;;;-1:-1:-1;;40933:1:0;40926:8;;;40922:263;;40980:1;40955:21;;:26;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;41023:20:0;;;;;;:16;:20;;;;;;:22;;41044:1;41023:22;:::i;:::-;-1:-1:-1;;;;;41000:20:0;;;;;;:16;:20;;;;;:45;40922:263;;;41110:1;41086:20;;:25;;;;;;;:::i;:::-;;;;-1:-1:-1;;;;;;;41150:17:0;;;;;;:13;:17;;;;;;:19;;41168:1;41150:19;:::i;:::-;-1:-1:-1;;;;;41130:17:0;;;;;;:13;:17;;;;;:39;40922:263;40159:1037;40109:1651;;;41241:4;;41221:16;;-1:-1:-1;;;;;41221:16:0;;;41241:4;;41221:24;41217:532;;41272:16;;-1:-1:-1;;;;;41272:16:0;41265:37;2048:10;41316:14;;-1:-1:-1;;;;;41316:14:0;41355:3;41331:21;41341:11;41331:7;:21;:::i;:::-;:27;;;;:::i;:::-;41265:94;;-1:-1:-1;;;;;;41265:94:0;;;;;;;-1:-1:-1;;;;;18539:32:1;;;41265:94:0;;;18521:51:1;18608:32;;;;18588:18;;;18581:60;18657:18;;;18650:34;18494:18;;41265:94:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;41217:532::-;41400:12;41439:3;41415:21;41425:11;41415:7;:21;:::i;:::-;:27;;;;:::i;:::-;41400:42;;41465:8;;41477:1;41465:13;41461:216;;2048:10;41502:60;41550:11;41533:14;41543:4;41533:7;:14;:::i;:::-;:28;;;;:::i;:::-;41502:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41461:216;;;2048:10;41611:46;41642:14;41652:4;41642:7;:14;:::i;:::-;41611:46;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41461:216;41703:14;;41695:38;;-1:-1:-1;;;;;41703:14:0;;;;41695:38;;;;;41728:4;;41703:14;41695:38;41703:14;41695:38;41728:4;41703:14;41695:38;;;;;;;;;;;;;;;;;;;;;41381:368;41217:532;-1:-1:-1;41777:5:0;39419:2371;-1:-1:-1;;;;;;39419:2371:0:o;31401:318::-;-1:-1:-1;;;;;31509:22:0;;31505:93;;31555:31;;-1:-1:-1;;;31555:31:0;;-1:-1:-1;;;;;1688:32:1;;31555:31:0;;;1670:51:1;1643:18;;31555:31:0;1524:203:1;31505:93:0;-1:-1:-1;;;;;31608:25:0;;;;;;;:18;:25;;;;;;;;:35;;;;;;;;;;;;;:46;;-1:-1:-1;;31608:46:0;;;;;;;;;;31670:41;;540::1;;;31670::0;;513:18:1;31670:41:0;;;;;;;31401:318;;;:::o;32759:799::-;-1:-1:-1;;;;;32876:14:0;;;:18;32872:679;;32915:71;;-1:-1:-1;;;32915:71:0;;-1:-1:-1;;;;;32915:36:0;;;;;:71;;2048:10;;32966:4;;32972:7;;32981:4;;32915:71;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;-1:-1:-1;32915:71:0;;;;;;;;-1:-1:-1;;32915:71:0;;;;;;;;;;;;:::i;:::-;;;32911:629;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33229:6;:13;33246:1;33229:18;33225:300;;33279:25;;-1:-1:-1;;;33279:25:0;;-1:-1:-1;;;;;1688:32:1;;33279:25:0;;;1670:51:1;1643:18;;33279:25:0;1524:203:1;33225:300:0;33475:6;33469:13;33460:6;33456:2;33452:15;33445:38;32911:629;-1:-1:-1;;;;;;33034:51:0;;-1:-1:-1;;;33034:51:0;33030:132;;33117:25;;-1:-1:-1;;;33117:25:0;;-1:-1:-1;;;;;1688:32:1;;33117:25:0;;;1670:51:1;1643:18;;33117:25:0;1524:203:1;33030:132:0;32987:190;32759:799;;;;:::o;45195:119::-;45252:4;;45276:16;45284:7;45276;:16::i;:::-;-1:-1:-1;;;;;45276:30:0;;;;45195:119;-1:-1:-1;;45195:119:0:o;13601:718::-;13657:13;13708:14;13725:17;13736:5;13725:10;:17::i;:::-;13745:1;13725:21;13708:38;;13761:20;13795:6;13784:18;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;-1:-1:-1;13784:18:0;-1:-1:-1;13761:41:0;-1:-1:-1;13926:28:0;;;13942:2;13926:28;13983:290;-1:-1:-1;;14015:5:0;-1:-1:-1;;;14152:2:0;14141:14;;14136:32;14015:5;14123:46;14215:2;14206:11;;;-1:-1:-1;14236:21:0;13983:290;14236:21;-1:-1:-1;14294:6:0;13601:718;-1:-1:-1;;;13601:718:0:o;30504:678::-;30666:9;:31;;;-1:-1:-1;;;;;;30679:18:0;;;;30666:31;30662:471;;;30714:13;30730:22;30744:7;30730:13;:22::i;:::-;30714:38;-1:-1:-1;;;;;;30883:18:0;;;;;;:35;;;30914:4;-1:-1:-1;;;;;30905:13:0;:5;-1:-1:-1;;;;;30905:13:0;;;30883:35;:69;;;;;30923:29;30940:5;30947:4;30923:16;:29::i;:::-;30922:30;30883:69;30879:144;;;30980:27;;-1:-1:-1;;;30980:27:0;;-1:-1:-1;;;;;1688:32:1;;30980:27:0;;;1670:51:1;1643:18;;30980:27:0;1524:203:1;30879:144:0;31043:9;31039:83;;;31098:7;31094:2;-1:-1:-1;;;;;31078:28:0;31087:5;-1:-1:-1;;;;;31078:28:0;;;;;;;;;;;31039:83;30699:434;30662:471;-1:-1:-1;;31145:24:0;;;;:15;:24;;;;;:29;;-1:-1:-1;;;;;;31145:29:0;-1:-1:-1;;;;;31145:29:0;;;;;;;;;;30504:678::o;23547:376::-;23660:38;23674:5;23681:7;23690;23660:13;:38::i;:::-;23655:261;;-1:-1:-1;;;;;23719:19:0;;23715:190;;23766:31;;-1:-1:-1;;;23766:31:0;;;;;969:25:1;;;942:18;;23766:31:0;823:177:1;23715:190:0;23845:44;;-1:-1:-1;;;23845:44:0;;-1:-1:-1;;;;;14598:32:1;;23845:44:0;;;14580:51:1;14647:18;;;14640:34;;;14553:18;;23845:44:0;14406:274:1;44844:341:0;44892:7;44959:9;;44969;2048:10;44992:15;45008:16;45025:14;45058:6;;;;;;;;;-1:-1:-1;;;;;45058:6:0;-1:-1:-1;;;;;45051:29:0;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;44942:142;;;;;;19993:19:1;;;;20028:12;;20021:28;;;;-1:-1:-1;;20087:2:1;20083:15;;;20079:53;20065:12;;;20058:75;;;;20149:12;;;20142:28;;;;20186:13;;;20179:29;20224:13;;;20217:29;45041:42:0;20262:13:1;;;20255:29;20300:13;;44942:142:0;;;-1:-1:-1;;44942:142:0;;;;;;;;;44932:153;;44942:142;44932:153;;;;44924:166;;45089:1;44924:166;:::i;:::-;44912:9;:178;;;45101:20;;45124:19;;45136:7;;45124:19;:::i;:::-;:23;;45146:1;45124:23;:::i;:::-;45101:46;44844:341;-1:-1:-1;;;44844:341:0:o;26313:102::-;26381:26;26391:2;26395:7;26381:26;;;;;;;;;;;;:9;:26::i;10293:948::-;10346:7;;-1:-1:-1;;;10424:17:0;;10420:106;;-1:-1:-1;;;10462:17:0;;;-1:-1:-1;10508:2:0;10498:12;10420:106;10553:8;10544:5;:17;10540:106;;10591:8;10582:17;;;-1:-1:-1;10628:2:0;10618:12;10540:106;10673:8;10664:5;:17;10660:106;;10711:8;10702:17;;;-1:-1:-1;10748:2:0;10738:12;10660:106;10793:7;10784:5;:16;10780:103;;10830:7;10821:16;;;-1:-1:-1;10866:1:0;10856:11;10780:103;10910:7;10901:5;:16;10897:103;;10947:7;10938:16;;;-1:-1:-1;10983:1:0;10973:11;10897:103;11027:7;11018:5;:16;11014:103;;11064:7;11055:16;;;-1:-1:-1;11100:1:0;11090:11;11014:103;11144:7;11135:5;:16;11131:68;;11182:1;11172:11;11227:6;10293:948;-1:-1:-1;;10293:948:0:o;23263:276::-;23366:4;-1:-1:-1;;;;;23403:21:0;;;;;;:128;;;23451:7;-1:-1:-1;;;;;23442:16:0;:5;-1:-1:-1;;;;;23442:16:0;;:52;;;;23462:32;23479:5;23486:7;23462:16;:32::i;:::-;23442:88;;;-1:-1:-1;22884:7:0;22911:24;;;:15;:24;;;;;;-1:-1:-1;;;;;23498:32:0;;;22911:24;;23498:32;23442:88;23383:148;23263:276;-1:-1:-1;;;;23263:276:0:o;26642:185::-;26737:18;26743:2;26747:7;26737:5;:18::i;:::-;26766:53;26797:1;26801:2;26805:7;26814:4;26766:22;:53::i;25615:335::-;-1:-1:-1;;;;;25683:16:0;;25679:89;;25723:33;;-1:-1:-1;;;25723:33:0;;25753:1;25723:33;;;1670:51:1;1643:18;;25723:33:0;1524:203:1;25679:89:0;25778:21;25802:32;25810:2;25814:7;25831:1;25802:7;:32::i;:::-;25778:56;-1:-1:-1;;;;;;25849:27:0;;;25845:98;;25900:31;;-1:-1:-1;;;25900:31:0;;25928:1;25900:31;;;1670:51:1;1643:18;;25900:31:0;1524:203:1;14:131;-1:-1:-1;;;;;;88:32:1;;78:43;;68:71;;135:1;132;125:12;150:245;208:6;261:2;249:9;240:7;236:23;232:32;229:52;;;277:1;274;267:12;229:52;316:9;303:23;335:30;359:5;335:30;:::i;592:226::-;651:6;704:2;692:9;683:7;679:23;675:32;672:52;;;720:1;717;710:12;672:52;-1:-1:-1;765:23:1;;592:226;-1:-1:-1;592:226:1:o;1005:289::-;1047:3;1085:5;1079:12;1112:6;1107:3;1100:19;1168:6;1161:4;1154:5;1150:16;1143:4;1138:3;1134:14;1128:47;1220:1;1213:4;1204:6;1199:3;1195:16;1191:27;1184:38;1283:4;1276:2;1272:7;1267:2;1259:6;1255:15;1251:29;1246:3;1242:39;1238:50;1231:57;;;1005:289;;;;:::o;1299:220::-;1448:2;1437:9;1430:21;1411:4;1468:45;1509:2;1498:9;1494:18;1486:6;1468:45;:::i;1732:173::-;1800:20;;-1:-1:-1;;;;;1849:31:1;;1839:42;;1829:70;;1895:1;1892;1885:12;1910:300;1978:6;1986;2039:2;2027:9;2018:7;2014:23;2010:32;2007:52;;;2055:1;2052;2045:12;2007:52;2078:29;2097:9;2078:29;:::i;:::-;2068:39;2176:2;2161:18;;;;2148:32;;-1:-1:-1;;;1910:300:1:o;2215:127::-;2276:10;2271:3;2267:20;2264:1;2257:31;2307:4;2304:1;2297:15;2331:4;2328:1;2321:15;2347:275;2418:2;2412:9;2483:2;2464:13;;-1:-1:-1;;2460:27:1;2448:40;;2518:18;2503:34;;2539:22;;;2500:62;2497:88;;;2565:18;;:::i;:::-;2601:2;2594:22;2347:275;;-1:-1:-1;2347:275:1:o;2627:450::-;2692:5;2724:1;2748:18;2740:6;2737:30;2734:56;;;2770:18;;:::i;:::-;-1:-1:-1;2836:2:1;2815:15;;-1:-1:-1;;2811:29:1;2842:4;2807:40;2865:21;2807:40;2865:21;:::i;:::-;2856:30;;;2909:6;2902:5;2895:21;2949:3;2940:6;2935:3;2931:16;2928:25;2925:45;;;2966:1;2963;2956:12;2925:45;3015:6;3010:3;3003:4;2996:5;2992:16;2979:43;3069:1;3062:4;3053:6;3046:5;3042:18;3038:29;3031:40;2627:450;;;;;:::o;3082:222::-;3125:5;3178:3;3171:4;3163:6;3159:17;3155:27;3145:55;;3196:1;3193;3186:12;3145:55;3218:80;3294:3;3285:6;3272:20;3265:4;3257:6;3253:17;3218:80;:::i;3309:436::-;3387:6;3395;3448:2;3436:9;3427:7;3423:23;3419:32;3416:52;;;3464:1;3461;3454:12;3416:52;3509:23;;;-1:-1:-1;3607:2:1;3592:18;;3579:32;3634:18;3623:30;;3620:50;;;3666:1;3663;3656:12;3620:50;3689;3731:7;3722:6;3711:9;3707:22;3689:50;:::i;:::-;3679:60;;;3309:436;;;;;:::o;3750:186::-;3809:6;3862:2;3850:9;3841:7;3837:23;3833:32;3830:52;;;3878:1;3875;3868:12;3830:52;3901:29;3920:9;3901:29;:::i;3941:374::-;4018:6;4026;4034;4087:2;4075:9;4066:7;4062:23;4058:32;4055:52;;;4103:1;4100;4093:12;4055:52;4126:29;4145:9;4126:29;:::i;:::-;4116:39;;4174:38;4208:2;4197:9;4193:18;4174:38;:::i;:::-;3941:374;;4164:48;;-1:-1:-1;;;4281:2:1;4266:18;;;;4253:32;;3941:374::o;4320:322::-;4389:6;4442:2;4430:9;4421:7;4417:23;4413:32;4410:52;;;4458:1;4455;4448:12;4410:52;4498:9;4485:23;4531:18;4523:6;4520:30;4517:50;;;4563:1;4560;4553:12;4517:50;4586;4628:7;4619:6;4608:9;4604:22;4586:50;:::i;4647:118::-;4733:5;4726:13;4719:21;4712:5;4709:32;4699:60;;4755:1;4752;4745:12;4770:315;4835:6;4843;4896:2;4884:9;4875:7;4871:23;4867:32;4864:52;;;4912:1;4909;4902:12;4864:52;4935:29;4954:9;4935:29;:::i;:::-;4925:39;;5014:2;5003:9;4999:18;4986:32;5027:28;5049:5;5027:28;:::i;:::-;5074:5;5064:15;;;4770:315;;;;;:::o;5090:713::-;5185:6;5193;5201;5209;5262:3;5250:9;5241:7;5237:23;5233:33;5230:53;;;5279:1;5276;5269:12;5230:53;5302:29;5321:9;5302:29;:::i;:::-;5292:39;;5350:38;5384:2;5373:9;5369:18;5350:38;:::i;:::-;5340:48;-1:-1:-1;5457:2:1;5442:18;;5429:32;;-1:-1:-1;5536:2:1;5521:18;;5508:32;5563:18;5552:30;;5549:50;;;5595:1;5592;5585:12;5549:50;5618:22;;5671:4;5663:13;;5659:27;-1:-1:-1;5649:55:1;;5700:1;5697;5690:12;5649:55;5723:74;5789:7;5784:2;5771:16;5766:2;5762;5758:11;5723:74;:::i;:::-;5713:84;;;5090:713;;;;;;;:::o;5808:183::-;5868:4;5901:18;5893:6;5890:30;5887:56;;;5923:18;;:::i;:::-;-1:-1:-1;5968:1:1;5964:14;5980:4;5960:25;;5808:183::o;5996:723::-;6050:5;6103:3;6096:4;6088:6;6084:17;6080:27;6070:55;;6121:1;6118;6111:12;6070:55;6161:6;6148:20;6188:64;6204:47;6244:6;6204:47;:::i;:::-;6188:64;:::i;:::-;6276:3;6300:6;6295:3;6288:19;6332:4;6327:3;6323:14;6316:21;;6393:4;6383:6;6380:1;6376:14;6368:6;6364:27;6360:38;6346:52;;6421:3;6413:6;6410:15;6407:35;;;6438:1;6435;6428:12;6407:35;6474:4;6466:6;6462:17;6488:200;6504:6;6499:3;6496:15;6488:200;;;6596:17;;6626:18;;6673:4;6664:14;;;;6521;6488:200;;;-1:-1:-1;6706:7:1;5996:723;-1:-1:-1;;;;;5996:723:1:o;6724:1146::-;6842:6;6850;6903:2;6891:9;6882:7;6878:23;6874:32;6871:52;;;6919:1;6916;6909:12;6871:52;6959:9;6946:23;6992:18;6984:6;6981:30;6978:50;;;7024:1;7021;7014:12;6978:50;7047:22;;7100:4;7092:13;;7088:27;-1:-1:-1;7078:55:1;;7129:1;7126;7119:12;7078:55;7169:2;7156:16;7192:64;7208:47;7248:6;7208:47;:::i;7192:64::-;7278:3;7302:6;7297:3;7290:19;7334:4;7329:3;7325:14;7318:21;;7391:4;7381:6;7378:1;7374:14;7370:2;7366:23;7362:34;7348:48;;7419:7;7411:6;7408:19;7405:39;;;7440:1;7437;7430:12;7405:39;7472:4;7468:2;7464:13;7453:24;;7486:152;7502:6;7497:3;7494:15;7486:152;;;7570:23;7589:3;7570:23;:::i;:::-;7558:36;;7623:4;7519:14;;;;7614;;;;7486:152;;;7657:5;-1:-1:-1;;;;7715:4:1;7700:20;;7687:34;7746:18;7733:32;;7730:52;;;7778:1;7775;7768:12;7730:52;7801:63;7856:7;7845:8;7834:9;7830:24;7801:63;:::i;7875:260::-;7943:6;7951;8004:2;7992:9;7983:7;7979:23;7975:32;7972:52;;;8020:1;8017;8010:12;7972:52;8043:29;8062:9;8043:29;:::i;:::-;8033:39;;8091:38;8125:2;8114:9;8110:18;8091:38;:::i;:::-;8081:48;;7875:260;;;;;:::o;8140:346::-;8208:6;8216;8269:2;8257:9;8248:7;8244:23;8240:32;8237:52;;;8285:1;8282;8275:12;8237:52;-1:-1:-1;;8330:23:1;;;8450:2;8435:18;;;8422:32;;-1:-1:-1;8140:346:1:o;8491:380::-;8570:1;8566:12;;;;8613;;;8634:61;;8688:4;8680:6;8676:17;8666:27;;8634:61;8741:2;8733:6;8730:14;8710:18;8707:38;8704:161;;8787:10;8782:3;8778:20;8775:1;8768:31;8822:4;8819:1;8812:15;8850:4;8847:1;8840:15;8704:161;;8491:380;;;:::o;9344:518::-;9446:2;9441:3;9438:11;9435:421;;;9482:5;9479:1;9472:16;9526:4;9523:1;9513:18;9596:2;9584:10;9580:19;9577:1;9573:27;9567:4;9563:38;9632:4;9620:10;9617:20;9614:47;;;-1:-1:-1;9655:4:1;9614:47;9710:2;9705:3;9701:12;9698:1;9694:20;9688:4;9684:31;9674:41;;9765:81;9783:2;9776:5;9773:13;9765:81;;;9842:1;9828:16;;9809:1;9798:13;9765:81;;10038:1299;10164:3;10158:10;10191:18;10183:6;10180:30;10177:56;;;10213:18;;:::i;:::-;10242:97;10332:6;10292:38;10324:4;10318:11;10292:38;:::i;:::-;10286:4;10242:97;:::i;:::-;10388:4;10419:2;10408:14;;10436:1;10431:649;;;;11124:1;11141:6;11138:89;;;-1:-1:-1;11193:19:1;;;11187:26;11138:89;-1:-1:-1;;9995:1:1;9991:11;;;9987:24;9983:29;9973:40;10019:1;10015:11;;;9970:57;11240:81;;10401:930;;10431:649;9291:1;9284:14;;;9328:4;9315:18;;-1:-1:-1;;10467:20:1;;;10585:222;10599:7;10596:1;10593:14;10585:222;;;10681:19;;;10675:26;10660:42;;10788:4;10773:20;;;;10741:1;10729:14;;;;10615:12;10585:222;;;10589:3;10835:6;10826:7;10823:19;10820:201;;;10896:19;;;10890:26;-1:-1:-1;;10979:1:1;10975:14;;;10991:3;10971:24;10967:37;10963:42;10948:58;10933:74;;10820:201;-1:-1:-1;;;;11067:1:1;11051:14;;;11047:22;11034:36;;-1:-1:-1;10038:1299:1:o;11342:356::-;11544:2;11526:21;;;11563:18;;;11556:30;11622:34;11617:2;11602:18;;11595:62;11689:2;11674:18;;11342:356::o;12415:331::-;12617:2;12599:21;;;12656:1;12636:18;;;12629:29;-1:-1:-1;;;12689:2:1;12674:18;;12667:38;12737:2;12722:18;;12415:331::o;13436:184::-;13506:6;13559:2;13547:9;13538:7;13534:23;13530:32;13527:52;;;13575:1;13572;13565:12;13527:52;-1:-1:-1;13598:16:1;;13436:184;-1:-1:-1;13436:184:1:o;13625:127::-;13686:10;13681:3;13677:20;13674:1;13667:31;13717:4;13714:1;13707:15;13741:4;13738:1;13731:15;13757:168;13830:9;;;13861;;13878:15;;;13872:22;;13858:37;13848:71;;13899:18;;:::i;13930:125::-;13995:9;;;14016:10;;;14013:36;;;14029:18;;:::i;14685:245::-;14752:6;14805:2;14793:9;14784:7;14780:23;14776:32;14773:52;;;14821:1;14818;14811:12;14773:52;14853:9;14847:16;14872:28;14894:5;14872:28;:::i;15423:1124::-;15689:3;15718:1;15751:6;15745:13;15781:36;15807:9;15781:36;:::i;:::-;15848:1;15833:17;;15859:133;;;;16006:1;16001:332;;;;15826:507;;15859:133;-1:-1:-1;;15892:24:1;;15880:37;;15965:14;;15958:22;15946:35;;15937:45;;;-1:-1:-1;15859:133:1;;16001:332;16032:6;16029:1;16022:17;16080:4;16077:1;16067:18;16107:1;16121:166;16135:6;16132:1;16129:13;16121:166;;;16215:14;;16202:11;;;16195:35;16271:1;16258:15;;;;16157:4;16150:12;16121:166;;;16125:3;;16316:6;16311:3;16307:16;16300:23;;15826:507;;;;16364:6;16358:13;16410:8;16403:4;16395:6;16391:17;16386:3;16380:39;-1:-1:-1;;;16438:18:1;;15396:20;;;16539:1;16531:10;;15423:1124;-1:-1:-1;;;;15423:1124:1:o;16552:334::-;16754:2;16736:21;;;16793:2;16773:18;;;16766:30;-1:-1:-1;;;16827:2:1;16812:18;;16805:40;16877:2;16862:18;;16552:334::o;17232:127::-;17293:10;17288:3;17284:20;17281:1;17274:31;17324:4;17321:1;17314:15;17348:4;17345:1;17338:15;17364:128;17431:9;;;17452:11;;;17449:37;;;17466:18;;:::i;17843:127::-;17904:10;17899:3;17895:20;17892:1;17885:31;17935:4;17932:1;17925:15;17959:4;17956:1;17949:15;18695:127;18756:10;18751:3;18747:20;18744:1;18737:31;18787:4;18784:1;18777:15;18811:4;18808:1;18801:15;18827:120;18867:1;18893;18883:35;;18898:18;;:::i;:::-;-1:-1:-1;18932:9:1;;18827:120::o;18952:485::-;-1:-1:-1;;;;;19183:32:1;;;19165:51;;19252:32;;19247:2;19232:18;;19225:60;19316:2;19301:18;;19294:34;;;19364:3;19359:2;19344:18;;19337:31;;;-1:-1:-1;;19385:46:1;;19411:19;;19403:6;19385:46;:::i;:::-;19377:54;18952:485;-1:-1:-1;;;;;;18952:485:1:o;19442:249::-;19511:6;19564:2;19552:9;19543:7;19539:23;19535:32;19532:52;;;19580:1;19577;19570:12;19532:52;19612:9;19606:16;19631:30;19655:5;19631:30;:::i;20324:112::-;20356:1;20382;20372:35;;20387:18;;:::i;:::-;-1:-1:-1;20421:9:1;;20324:112::o
Swarm Source
ipfs://2b5c7500fb1b3abba48904abc7f36244212c94ab87df0836a583aef82765a6cb
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.