Source Code
More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 29 transactions
| Transaction Hash |
Method
|
Block
|
From
|
|
To
|
||||
|---|---|---|---|---|---|---|---|---|---|
| Mint | 15289374 | 1302 days ago | IN | 0.16 ETH | 0.0023286 | ||||
| Withdraw | 15265131 | 1305 days ago | IN | 0 ETH | 0.00058387 | ||||
| Mint | 14901047 | 1365 days ago | IN | 0.08 ETH | 0.00664413 | ||||
| Mint | 14889556 | 1367 days ago | IN | 0.08 ETH | 0.00755721 | ||||
| Mint | 14886963 | 1367 days ago | IN | 0.24 ETH | 0.04014761 | ||||
| Mint | 14886605 | 1367 days ago | IN | 0.32 ETH | 0.02858398 | ||||
| Mint | 14886603 | 1367 days ago | IN | 0.4 ETH | 0.0235547 | ||||
| Withdraw | 14886574 | 1367 days ago | IN | 0 ETH | 0.00267769 | ||||
| Mint | 14886443 | 1367 days ago | IN | 0.16 ETH | 0.0158906 | ||||
| Mint | 14886343 | 1367 days ago | IN | 0.08 ETH | 0.0076746 | ||||
| Mint | 14886306 | 1367 days ago | IN | 0.08 ETH | 0.00976719 | ||||
| Airdrop | 14886256 | 1367 days ago | IN | 0 ETH | 0.01111124 | ||||
| Mint | 14886185 | 1367 days ago | IN | 0.08 ETH | 0.01578943 | ||||
| Mint | 14885693 | 1368 days ago | IN | 0.08 ETH | 0.01147868 | ||||
| Mint | 14885600 | 1368 days ago | IN | 0.08 ETH | 0.010022 | ||||
| Mint | 14883064 | 1368 days ago | IN | 0.16 ETH | 0.01116795 | ||||
| Mint | 14882896 | 1368 days ago | IN | 0.16 ETH | 0.00890777 | ||||
| Mint | 14882883 | 1368 days ago | IN | 0.16 ETH | 0.01050343 | ||||
| Pause | 14882593 | 1368 days ago | IN | 0 ETH | 0.00089038 | ||||
| Pause | 14881674 | 1368 days ago | IN | 0 ETH | 0.001542 | ||||
| Pause | 14881474 | 1368 days ago | IN | 0 ETH | 0.00168364 | ||||
| Set Base URI | 14881330 | 1368 days ago | IN | 0 ETH | 0.00214848 | ||||
| Airdrop | 14873449 | 1370 days ago | IN | 0 ETH | 0.00476139 | ||||
| Pause | 14868227 | 1370 days ago | IN | 0 ETH | 0.00092342 | ||||
| Airdrop | 14868209 | 1370 days ago | IN | 0 ETH | 0.0061954 |
Loading...
Loading
Loading...
Loading
Cross-Chain Transactions
Loading...
Loading
Contract Name:
SquidSqui
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/**
*Submitted for verification at Etherscan.io on 2022-05-27
*/
// File: IERC721Receiver.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @title ERC721 token receiver interface
* @dev Interface for any contract that wants to support safeTransfers
* from ERC721 asset contracts.
*/
interface IERC721Receiver {
/**
* @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom}
* by `operator` from `from`, this function is called.
*
* It must return its Solidity selector to confirm the token transfer.
* If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted.
*
* The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`.
*/
function onERC721Received(
address operator,
address from,
uint256 tokenId,
bytes calldata data
) external returns (bytes4);
}
// File: IERC165.sol
pragma solidity >=0.5.0 <0.9.0;
// File: @openzeppelin/contracts/utils/introspection/IERC165.sol
/**
* @dev Interface of the ERC165 standard, as defined in the
* https://eips.ethereum.org/EIPS/eip-165[EIP].
*
* Implementers can declare support of contract interfaces, which can then be
* queried by others ({ERC165Checker}).
*
* For an implementation, see {ERC165}.
*/
interface IERC165 {
/**
* @dev Returns true if this contract implements the interface defined by
* `interfaceId`. See the corresponding
* https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section]
* to learn more about how these ids are created.
*
* This function call must use less than 30 000 gas.
*/
function supportsInterface(bytes4 interfaceId) external view returns (bool);
}
// File: IERC721.sol
pragma solidity >=0.5.0 <0.9.0;
// File: @openzeppelin/contracts/token/ERC721/IERC721.sol
/**
* @dev Required interface of an ERC721 compliant contract.
*/
interface IERC721 is IERC165 {
/**
* @dev Emitted when `tokenId` token is transferred from `from` to `to`.
*/
event Transfer(
address indexed from,
address indexed to,
uint256 indexed tokenId
);
/**
* @dev Emitted when `owner` enables `approved` to manage the `tokenId` token.
*/
event Approval(
address indexed owner,
address indexed approved,
uint256 indexed tokenId
);
/**
* @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets.
*/
event ApprovalForAll(
address indexed owner,
address indexed operator,
bool approved
);
/**
* @dev Returns the number of tokens in ``owner``'s account.
*/
function balanceOf(address owner) external view returns (uint256 balance);
/**
* @dev Returns the owner of the `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function ownerOf(uint256 tokenId) external view returns (address owner);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Transfers `tokenId` token from `from` to `to`.
*
* WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
*
* Emits a {Transfer} event.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) external;
/**
* @dev Gives permission to `to` to transfer `tokenId` token to another account.
* The approval is cleared when the token is transferred.
*
* Only a single account can be approved at a time, so approving the zero address clears previous approvals.
*
* Requirements:
*
* - The caller must own the token or be an approved operator.
* - `tokenId` must exist.
*
* Emits an {Approval} event.
*/
function approve(address to, uint256 tokenId) external;
/**
* @dev Returns the account approved for `tokenId` token.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function getApproved(uint256 tokenId)
external
view
returns (address operator);
/**
* @dev Approve or remove `operator` as an operator for the caller.
* Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller.
*
* Requirements:
*
* - The `operator` cannot be the caller.
*
* Emits an {ApprovalForAll} event.
*/
function setApprovalForAll(address operator, bool _approved) external;
/**
* @dev Returns if the `operator` is allowed to manage all of the assets of `owner`.
*
* See {setApprovalForAll}
*/
function isApprovedForAll(address owner, address operator)
external
view
returns (bool);
/**
* @dev Safely transfers `tokenId` token from `from` to `to`.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}.
* - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer.
*
* Emits a {Transfer} event.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes calldata data
) external;
}
// File: IERC721Enumerable.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional enumeration extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Enumerable is IERC721 {
/**
* @dev Returns the total amount of tokens stored by the contract.
*/
function totalSupply() external view returns (uint256);
/**
* @dev Returns a token ID owned by `owner` at a given `index` of its token list.
* Use along with {balanceOf} to enumerate all of ``owner``'s tokens.
*/
function tokenOfOwnerByIndex(address owner, uint256 index)
external
view
returns (uint256 tokenId);
/**
* @dev Returns a token ID at a given `index` of all the tokens stored by the contract.
* Use along with {totalSupply} to enumerate all tokens.
*/
function tokenByIndex(uint256 index) external view returns (uint256);
}
// File: IERC721Metadata.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @title ERC-721 Non-Fungible Token Standard, optional metadata extension
* @dev See https://eips.ethereum.org/EIPS/eip-721
*/
interface IERC721Metadata is IERC721 {
/**
* @dev Returns the token collection name.
*/
function name() external view returns (string memory);
/**
* @dev Returns the token collection symbol.
*/
function symbol() external view returns (string memory);
/**
* @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token.
*/
function tokenURI(uint256 tokenId) external view returns (string memory);
}
// File: ERC165.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @dev Implementation of the {IERC165} interface.
*
* Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check
* for the additional interface id that will be supported. For example:
*
* ```solidity
* function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) {
* return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId);
* }
* ```
*
* Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation.
*/
abstract contract ERC165 is IERC165 {
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override
returns (bool)
{
return interfaceId == type(IERC165).interfaceId;
}
}
// File: Context.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @dev Provides information about the current execution context, including the
* sender of the transaction and its data. While these are generally available
* via msg.sender and msg.data, they should not be accessed in such a direct
* manner, since when dealing with meta-transactions the account sending and
* paying for execution may not be the actual sender (as far as an application
* is concerned).
*
* This contract is only required for intermediate, library-like contracts.
*/
abstract contract Context {
function _msgSender() internal view virtual returns (address) {
return msg.sender;
}
function _msgData() internal view virtual returns (bytes calldata) {
return msg.data;
}
}
// File: Ownable.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @dev Contract module which provides a basic access control mechanism, where
* there is an account (an owner) that can be granted exclusive access to
* specific functions.
*
* By default, the owner account will be the one that deploys the contract. This
* can later be changed with {transferOwnership}.
*
* This module is used through inheritance. It will make available the modifier
* `onlyOwner`, which can be applied to your functions to restrict their use to
* the owner.
*/
abstract contract Ownable is Context {
address private _owner;
event OwnershipTransferred(
address indexed previousOwner,
address indexed newOwner
);
/**
* @dev Initializes the contract setting the deployer as the initial owner.
*/
constructor() {
_setOwner(_msgSender());
}
/**
* @dev Returns the address of the current owner.
*/
function owner() public view virtual returns (address) {
return _owner;
}
/**
* @dev Throws if called by any account other than the owner.
*/
modifier onlyOwner() {
require(owner() == _msgSender(), "Ownable: caller is not the owner");
_;
}
/**
* @dev Leaves the contract without owner. It will not be possible to call
* `onlyOwner` functions anymore. Can only be called by the current owner.
*
* NOTE: Renouncing ownership will leave the contract without an owner,
* thereby removing any functionality that is only available to the owner.
*/
function renounceOwnership() public virtual onlyOwner {
_setOwner(address(0));
}
/**
* @dev Transfers ownership of the contract to a new account (`newOwner`).
* Can only be called by the current owner.
*/
function transferOwnership(address newOwner) public virtual onlyOwner {
require(
newOwner != address(0),
"Ownable: new owner is the zero address"
);
_setOwner(newOwner);
}
function _setOwner(address newOwner) private {
address oldOwner = _owner;
_owner = newOwner;
emit OwnershipTransferred(oldOwner, newOwner);
}
}
// File: Strings.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @dev String operations.
*/
library Strings {
bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef";
/**
* @dev Converts a `uint256` to its ASCII `string` decimal representation.
*/
function toString(uint256 value) internal pure returns (string memory) {
// Inspired by OraclizeAPI's implementation - MIT licence
// https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol
if (value == 0) {
return "0";
}
uint256 temp = value;
uint256 digits;
while (temp != 0) {
digits++;
temp /= 10;
}
bytes memory buffer = new bytes(digits);
while (value != 0) {
digits -= 1;
buffer[digits] = bytes1(uint8(48 + uint256(value % 10)));
value /= 10;
}
return string(buffer);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation.
*/
function toHexString(uint256 value) internal pure returns (string memory) {
if (value == 0) {
return "0x00";
}
uint256 temp = value;
uint256 length = 0;
while (temp != 0) {
length++;
temp >>= 8;
}
return toHexString(value, length);
}
/**
* @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length.
*/
function toHexString(uint256 value, uint256 length)
internal
pure
returns (string memory)
{
bytes memory buffer = new bytes(2 * length + 2);
buffer[0] = "0";
buffer[1] = "x";
for (uint256 i = 2 * length + 1; i > 1; --i) {
buffer[i] = _HEX_SYMBOLS[value & 0xf];
value >>= 4;
}
require(value == 0, "Strings: hex length insufficient");
return string(buffer);
}
}
// File: Address.sol
pragma solidity >=0.5.0 <0.9.0;
// File: @openzeppelin/contracts/utils/Address.sol
/**
* @dev Collection of functions related to the address type
*/
library Address {
/**
* @dev Returns true if `account` is a contract.
*
* [IMPORTANT]
* ====
* It is unsafe to assume that an address for which this function returns
* false is an externally-owned account (EOA) and not a contract.
*
* Among others, `isContract` will return false for the following
* types of addresses:
*
* - an externally-owned account
* - a contract in construction
* - an address where a contract will be created
* - an address where a contract lived, but was destroyed
* ====
*/
function isContract(address account) internal view returns (bool) {
// This method relies on extcodesize, which returns 0 for contracts in
// construction, since the code is only stored at the end of the
// constructor execution.
uint256 size;
assembly {
size := extcodesize(account)
}
return size > 0;
}
/**
* @dev Replacement for Solidity's `transfer`: sends `amount` wei to
* `recipient`, forwarding all available gas and reverting on errors.
*
* https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost
* of certain opcodes, possibly making contracts go over the 2300 gas limit
* imposed by `transfer`, making them unable to receive funds via
* `transfer`. {sendValue} removes this limitation.
*
* https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more].
*
* IMPORTANT: because control is transferred to `recipient`, care must be
* taken to not create reentrancy vulnerabilities. Consider using
* {ReentrancyGuard} or the
* https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern].
*/
function sendValue(address payable recipient, uint256 amount) internal {
require(
address(this).balance >= amount,
"Address: insufficient balance"
);
(bool success, ) = recipient.call{value: amount}("");
require(
success,
"Address: unable to send value, recipient may have reverted"
);
}
/**
* @dev Performs a Solidity function call using a low level `call`. A
* plain `call` is an unsafe replacement for a function call: use this
* function instead.
*
* If `target` reverts with a revert reason, it is bubbled up by this
* function (like regular Solidity function calls).
*
* Returns the raw returned data. To convert to the expected return value,
* use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`].
*
* Requirements:
*
* - `target` must be a contract.
* - calling `target` with `data` must not revert.
*
* _Available since v3.1._
*/
function functionCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return functionCall(target, data, "Address: low-level call failed");
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with
* `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
return functionCallWithValue(target, data, 0, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but also transferring `value` wei to `target`.
*
* Requirements:
*
* - the calling contract must have an ETH balance of at least `value`.
* - the called Solidity function must be `payable`.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value
) internal returns (bytes memory) {
return
functionCallWithValue(
target,
data,
value,
"Address: low-level call with value failed"
);
}
/**
* @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but
* with `errorMessage` as a fallback revert reason when `target` reverts.
*
* _Available since v3.1._
*/
function functionCallWithValue(
address target,
bytes memory data,
uint256 value,
string memory errorMessage
) internal returns (bytes memory) {
require(
address(this).balance >= value,
"Address: insufficient balance for call"
);
require(isContract(target), "Address: call to non-contract");
(bool success, bytes memory returndata) = target.call{value: value}(
data
);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(address target, bytes memory data)
internal
view
returns (bytes memory)
{
return
functionStaticCall(
target,
data,
"Address: low-level static call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a static call.
*
* _Available since v3.3._
*/
function functionStaticCall(
address target,
bytes memory data,
string memory errorMessage
) internal view returns (bytes memory) {
require(isContract(target), "Address: static call to non-contract");
(bool success, bytes memory returndata) = target.staticcall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(address target, bytes memory data)
internal
returns (bytes memory)
{
return
functionDelegateCall(
target,
data,
"Address: low-level delegate call failed"
);
}
/**
* @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`],
* but performing a delegate call.
*
* _Available since v3.4._
*/
function functionDelegateCall(
address target,
bytes memory data,
string memory errorMessage
) internal returns (bytes memory) {
require(isContract(target), "Address: delegate call to non-contract");
(bool success, bytes memory returndata) = target.delegatecall(data);
return verifyCallResult(success, returndata, errorMessage);
}
/**
* @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the
* revert reason using the provided one.
*
* _Available since v4.3._
*/
function verifyCallResult(
bool success,
bytes memory returndata,
string memory errorMessage
) internal pure returns (bytes memory) {
if (success) {
return returndata;
} else {
// Look for revert reason and bubble it up if present
if (returndata.length > 0) {
// The easiest way to bubble the revert reason is using memory via assembly
assembly {
let returndata_size := mload(returndata)
revert(add(32, returndata), returndata_size)
}
} else {
revert(errorMessage);
}
}
}
}
// File: ERC721.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including
* the Metadata extension, but not including the Enumerable extension, which is available separately as
* {ERC721Enumerable}.
*/
contract ERC721 is Context, ERC165, IERC721, IERC721Metadata {
using Address for address;
using Strings for uint256;
// Token name
string private _name;
// Token symbol
string private _symbol;
// Mapping from token ID to owner address
mapping(uint256 => address) private _owners;
// Mapping owner address to token count
mapping(address => uint256) private _balances;
// Mapping from token ID to approved address
mapping(uint256 => address) private _tokenApprovals;
// Mapping from owner to operator approvals
mapping(address => mapping(address => bool)) private _operatorApprovals;
/**
* @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
override
returns (uint256)
{
require(
owner != address(0),
"ERC721: balance query for the zero address"
);
return _balances[owner];
}
/**
* @dev See {IERC721-ownerOf}.
*/
function ownerOf(uint256 tokenId)
public
view
virtual
override
returns (address)
{
address owner = _owners[tokenId];
require(
owner != address(0),
"ERC721: owner query for nonexistent token"
);
return owner;
}
/**
* @dev See {IERC721Metadata-name}.
*/
function name() public view virtual override returns (string memory) {
return _name;
}
/**
* @dev See {IERC721Metadata-symbol}.
*/
function symbol() public view virtual override returns (string memory) {
return _symbol;
}
/**
* @dev See {IERC721Metadata-tokenURI}.
*/
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
string memory baseURI = _baseURI();
return
bytes(baseURI).length > 0
? string(abi.encodePacked(baseURI, tokenId.toString()))
: "";
}
/**
* @dev Base URI for computing {tokenURI}. If set, the resulting URI for each
* token will be the concatenation of the `baseURI` and the `tokenId`. Empty
* by default, can be overriden in child contracts.
*/
function _baseURI() internal view virtual returns (string memory) {
return "";
}
/**
* @dev See {IERC721-approve}.
*/
function approve(address to, uint256 tokenId) public virtual override {
address owner = ERC721.ownerOf(tokenId);
require(to != owner, "ERC721: approval to current owner");
require(
_msgSender() == owner || isApprovedForAll(owner, _msgSender()),
"ERC721: approve caller is not owner nor approved for all"
);
_approve(to, tokenId);
}
/**
* @dev See {IERC721-getApproved}.
*/
function getApproved(uint256 tokenId)
public
view
virtual
override
returns (address)
{
require(
_exists(tokenId),
"ERC721: approved query for nonexistent token"
);
return _tokenApprovals[tokenId];
}
/**
* @dev See {IERC721-setApprovalForAll}.
*/
function setApprovalForAll(address operator, bool approved)
public
virtual
override
{
require(operator != _msgSender(), "ERC721: approve to caller");
_operatorApprovals[_msgSender()][operator] = approved;
emit ApprovalForAll(_msgSender(), operator, approved);
}
/**
* @dev See {IERC721-isApprovedForAll}.
*/
function isApprovedForAll(address owner, address operator)
public
view
virtual
override
returns (bool)
{
return _operatorApprovals[owner][operator];
}
/**
* @dev See {IERC721-transferFrom}.
*/
function transferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
//solhint-disable-next-line max-line-length
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved"
);
_transfer(from, to, tokenId);
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId
) public virtual override {
safeTransferFrom(from, to, tokenId, "");
}
/**
* @dev See {IERC721-safeTransferFrom}.
*/
function safeTransferFrom(
address from,
address to,
uint256 tokenId,
bytes memory _data
) public virtual override {
require(
_isApprovedOrOwner(_msgSender(), tokenId),
"ERC721: transfer caller is not owner nor approved"
);
_safeTransfer(from, to, tokenId, _data);
}
/**
* @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients
* are aware of the ERC721 protocol to prevent tokens from being forever locked.
*
* `_data` is additional data, it has no specified format and it is sent in call to `to`.
*
* This internal function is equivalent to {safeTransferFrom}, and can be used to e.g.
* implement alternative mechanisms to perform token transfer, such as signature-based.
*
* Requirements:
*
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
* - `tokenId` token must exist and be owned by `from`.
* - 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,
bytes memory _data
) internal virtual {
_transfer(from, to, tokenId);
require(
_checkOnERC721Received(from, to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @dev Returns whether `tokenId` exists.
*
* Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}.
*
* Tokens start existing when they are minted (`_mint`),
* and stop existing when they are burned (`_burn`).
*/
function _exists(uint256 tokenId) internal view virtual returns (bool) {
return _owners[tokenId] != address(0);
}
/**
* @dev Returns whether `spender` is allowed to manage `tokenId`.
*
* Requirements:
*
* - `tokenId` must exist.
*/
function _isApprovedOrOwner(address spender, uint256 tokenId)
internal
view
virtual
returns (bool)
{
require(
_exists(tokenId),
"ERC721: operator query for nonexistent token"
);
address owner = ERC721.ownerOf(tokenId);
return (spender == owner ||
getApproved(tokenId) == spender ||
isApprovedForAll(owner, spender));
}
/**
* @dev Safely mints `tokenId` and transfers it to `to`.
*
* 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 virtual {
_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);
require(
_checkOnERC721Received(address(0), to, tokenId, _data),
"ERC721: transfer to non ERC721Receiver implementer"
);
}
/**
* @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 virtual {
require(to != address(0), "ERC721: mint to the zero address");
require(!_exists(tokenId), "ERC721: token already minted");
_beforeTokenTransfer(address(0), to, tokenId);
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(address(0), to, tokenId);
}
/**
* @dev Destroys `tokenId`.
* The approval is cleared when the token is burned.
*
* Requirements:
*
* - `tokenId` must exist.
*
* Emits a {Transfer} event.
*/
function _burn(uint256 tokenId) internal virtual {
address owner = ERC721.ownerOf(tokenId);
_beforeTokenTransfer(owner, address(0), tokenId);
// Clear approvals
_approve(address(0), tokenId);
_balances[owner] -= 1;
delete _owners[tokenId];
emit Transfer(owner, address(0), 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 virtual {
require(
ERC721.ownerOf(tokenId) == from,
"ERC721: transfer of token that is not own"
);
require(to != address(0), "ERC721: transfer to the zero address");
_beforeTokenTransfer(from, to, tokenId);
// Clear approvals from the previous owner
_approve(address(0), tokenId);
_balances[from] -= 1;
_balances[to] += 1;
_owners[tokenId] = to;
emit Transfer(from, to, tokenId);
}
/**
* @dev Approve `to` to operate on `tokenId`
*
* Emits a {Approval} event.
*/
function _approve(address to, uint256 tokenId) internal virtual {
_tokenApprovals[tokenId] = to;
emit Approval(ERC721.ownerOf(tokenId), to, tokenId);
}
/**
* @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address.
* 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
* @return bool whether the call correctly returned the expected magic value
*/
function _checkOnERC721Received(
address from,
address to,
uint256 tokenId,
bytes memory _data
) private returns (bool) {
if (to.isContract()) {
try
IERC721Receiver(to).onERC721Received(
_msgSender(),
from,
tokenId,
_data
)
returns (bytes4 retval) {
return retval == IERC721Receiver.onERC721Received.selector;
} catch (bytes memory reason) {
if (reason.length == 0) {
revert(
"ERC721: transfer to non ERC721Receiver implementer"
);
} else {
assembly {
revert(add(32, reason), mload(reason))
}
}
}
} else {
return true;
}
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` and `to` are never both zero.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual {}
}
// File: ERC721Enumerable.sol
pragma solidity >=0.5.0 <0.9.0;
/**
* @dev This implements an optional extension of {ERC721} defined in the EIP that adds
* enumerability of all the token ids in the contract as well as all token ids owned by each
* account.
*/
abstract contract ERC721Enumerable is ERC721, IERC721Enumerable {
// Mapping from owner to list of owned token IDs
mapping(address => mapping(uint256 => uint256)) private _ownedTokens;
// Mapping from token ID to index of the owner tokens list
mapping(uint256 => uint256) private _ownedTokensIndex;
// Array with all token ids, used for enumeration
uint256[] private _allTokens;
// Mapping from token id to position in the allTokens array
mapping(uint256 => uint256) private _allTokensIndex;
/**
* @dev See {IERC165-supportsInterface}.
*/
function supportsInterface(bytes4 interfaceId)
public
view
virtual
override(IERC165, ERC721)
returns (bool)
{
return
interfaceId == type(IERC721Enumerable).interfaceId ||
super.supportsInterface(interfaceId);
}
/**
* @dev See {IERC721Enumerable-tokenOfOwnerByIndex}.
*/
function tokenOfOwnerByIndex(address owner, uint256 index)
public
view
virtual
override
returns (uint256)
{
require(
index < ERC721.balanceOf(owner),
"ERC721Enumerable: owner index out of bounds"
);
return _ownedTokens[owner][index];
}
/**
* @dev See {IERC721Enumerable-totalSupply}.
*/
function totalSupply() public view virtual override returns (uint256) {
return _allTokens.length;
}
/**
* @dev See {IERC721Enumerable-tokenByIndex}.
*/
function tokenByIndex(uint256 index)
public
view
virtual
override
returns (uint256)
{
require(
index < ERC721Enumerable.totalSupply(),
"ERC721Enumerable: global index out of bounds"
);
return _allTokens[index];
}
/**
* @dev Hook that is called before any token transfer. This includes minting
* and burning.
*
* Calling conditions:
*
* - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be
* transferred to `to`.
* - When `from` is zero, `tokenId` will be minted for `to`.
* - When `to` is zero, ``from``'s `tokenId` will be burned.
* - `from` cannot be the zero address.
* - `to` cannot be the zero address.
*
* To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks].
*/
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal virtual override {
super._beforeTokenTransfer(from, to, tokenId);
if (from == address(0)) {
_addTokenToAllTokensEnumeration(tokenId);
} else if (from != to) {
_removeTokenFromOwnerEnumeration(from, tokenId);
}
if (to == address(0)) {
_removeTokenFromAllTokensEnumeration(tokenId);
} else if (to != from) {
_addTokenToOwnerEnumeration(to, tokenId);
}
}
/**
* @dev Private function to add a token to this extension's ownership-tracking data structures.
* @param to address representing the new owner of the given token ID
* @param tokenId uint256 ID of the token to be added to the tokens list of the given address
*/
function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private {
uint256 length = ERC721.balanceOf(to);
_ownedTokens[to][length] = tokenId;
_ownedTokensIndex[tokenId] = length;
}
/**
* @dev Private function to add a token to this extension's token tracking data structures.
* @param tokenId uint256 ID of the token to be added to the tokens list
*/
function _addTokenToAllTokensEnumeration(uint256 tokenId) private {
_allTokensIndex[tokenId] = _allTokens.length;
_allTokens.push(tokenId);
}
/**
* @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that
* while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for
* gas optimizations e.g. when performing a transfer operation (avoiding double writes).
* This has O(1) time complexity, but alters the order of the _ownedTokens array.
* @param from address representing the previous owner of the given token ID
* @param tokenId uint256 ID of the token to be removed from the tokens list of the given address
*/
function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId)
private
{
// To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = ERC721.balanceOf(from) - 1;
uint256 tokenIndex = _ownedTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary
if (tokenIndex != lastTokenIndex) {
uint256 lastTokenId = _ownedTokens[from][lastTokenIndex];
_ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
}
// This also deletes the contents at the last position of the array
delete _ownedTokensIndex[tokenId];
delete _ownedTokens[from][lastTokenIndex];
}
/**
* @dev Private function to remove a token from this extension's token tracking data structures.
* This has O(1) time complexity, but alters the order of the _allTokens array.
* @param tokenId uint256 ID of the token to be removed from the tokens list
*/
function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private {
// To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and
// then delete the last slot (swap and pop).
uint256 lastTokenIndex = _allTokens.length - 1;
uint256 tokenIndex = _allTokensIndex[tokenId];
// When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so
// rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding
// an 'if' statement (like in _removeTokenFromOwnerEnumeration)
uint256 lastTokenId = _allTokens[lastTokenIndex];
_allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token
_allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index
// This also deletes the contents at the last position of the array
delete _allTokensIndex[tokenId];
_allTokens.pop();
}
}
// File: Squidsqui.sol
pragma solidity >=0.5.0 <0.9.0;
contract SquidSqui is ERC721, ERC721Enumerable, Ownable {
using Strings for uint256;
string private baseURI;
string public notRevealedURI;
string public baseExtension = ".json";
uint96 public royaltyFeesInBips;
address public royaltyAddress;
address public royaltyRecipient =
0xa2ca8543b4975524b40f560B3B3d58e5Ca9ae3ad;
uint256 public price = 0.08 ether;
uint256 public priceWL = 0.06 ether;
uint256 public genesisLimit = 222;
uint256 public maxSupply = 7592;
uint256 public maxSupplyWL = 1222;
uint256 public maxMintAmount = 10;
uint256 public nftPerAddressLimit = 20;
uint256 public allTokens;
bool public genesis = true;
bool public revealed = false;
bool public paused = true;
mapping(address => uint256) public addressMintedBalance;
bool public onlyWhitelisted = true;
address[] public whitelistedAddresses;
//events
constructor(uint96 _royaltyFeesInBips) ERC721("SquidSqui", "SQUI") {
setNotRevealedURI(
"ipfs://QmRF1ExnEL5MLQUyhjtSpvAqnhz6Fr6rqEdpa9kLCatbBj"
);
setBaseURI("ipfs://QmV6TumdTQZCvTnfcozEhtG2PwZXFARg3AoKS7Q9YAeAcc/");
royaltyFeesInBips = _royaltyFeesInBips;
royaltyAddress = royaltyRecipient;
_setRoyaltyInfo(royaltyAddress, _royaltyFeesInBips);
}
modifier callerIsUser() {
require(tx.origin == msg.sender, "Cannot be called by a contract");
_;
}
// internal
function _baseURI() internal view virtual override returns (string memory) {
return baseURI;
}
function totalSupply() public view override returns (uint256) {
return allTokens;
}
function isWhitelisted(address _user) public view returns (bool) {
for (uint256 i = 0; i < whitelistedAddresses.length; i++) {
if (whitelistedAddresses[i] == _user) {
return true;
}
}
return false;
}
function getWhitelistedUserAddresses()
public
view
returns (address[] memory)
{
return whitelistedAddresses;
}
function _setRoyaltyInfo(address _receiver, uint96 _royaltyFeesInBips)
internal
onlyOwner
{
royaltyAddress = _receiver;
royaltyFeesInBips = _royaltyFeesInBips;
}
function _beforeTokenTransfer(
address from,
address to,
uint256 tokenId
) internal override(ERC721, ERC721Enumerable) {
super._beforeTokenTransfer(from, to, tokenId);
}
function royaltyInfo(uint256 _tokenId, uint256 _salePrice)
external
view
virtual
returns (address, uint256)
{
return (royaltyAddress, calculateRoyalty(_salePrice));
}
function calculateRoyalty(uint256 _salePrice)
public
view
returns (uint256)
{
return (_salePrice / 10000) * royaltyFeesInBips;
}
function supportsInterface(bytes4 interfaceId)
public
view
override(ERC721, ERC721Enumerable)
returns (bool)
{
return
interfaceId == 0x2a55205a || super.supportsInterface(interfaceId);
}
function mint(uint256 _mintAmount) public payable callerIsUser {
require(!paused, "the contract is paused");
uint256 supply = totalSupply();
require(_mintAmount > 0, "need to mint at least 1 NFT");
uint256 ownerMintedCount = addressMintedBalance[msg.sender];
if (msg.sender != owner()) {
if (!genesis) {
if (onlyWhitelisted == true) {
require(
isWhitelisted(msg.sender),
"user is not whitelisted"
);
require(supply + _mintAmount <= maxSupplyWL);
require(
msg.value >= priceWL * _mintAmount,
"insufficient funds"
);
} else {
require(
supply + _mintAmount <= maxSupply,
"max NFT limit exceeded"
);
require(
msg.value >= price * _mintAmount,
"insufficient funds"
);
require(
ownerMintedCount + _mintAmount <= nftPerAddressLimit,
"max NFT per address exceeded"
);
require(
_mintAmount <= maxMintAmount,
"max mint amount per session exceeded"
);
}
} else {
require(
supply + _mintAmount <= genesisLimit,
"genesis mint limit exceeded"
);
require(msg.value >= price * _mintAmount, "insufficient funds");
require(
ownerMintedCount + _mintAmount <= nftPerAddressLimit,
"max NFT per address exceeded"
);
require(
_mintAmount <= maxMintAmount,
"max mint amount per session exceeded"
);
}
}
for (uint8 i = 1; i <= _mintAmount; i++) {
addressMintedBalance[msg.sender]++;
_safeMint(msg.sender, supply + i);
allTokens++;
}
}
function tokenURI(uint256 tokenId)
public
view
virtual
override
returns (string memory)
{
require(
_exists(tokenId),
"ERC721Metadata: URI query for nonexistent token"
);
if (revealed == false) {
return notRevealedURI;
}
string memory currentBaseURI = _baseURI();
return
bytes(currentBaseURI).length > 0
? string(
abi.encodePacked(
currentBaseURI,
tokenId.toString(),
baseExtension
)
)
: "";
}
//only owner
function reveal() public onlyOwner {
revealed = true;
}
function setGenesis(bool _state) public onlyOwner {
genesis = _state;
}
function setGenesisLimit(uint256 limit) public onlyOwner {
genesisLimit = limit;
}
function setNftPerAddressLimit(uint256 _limit) public onlyOwner {
nftPerAddressLimit = _limit;
}
function setPrice(uint256 _newPrice) public onlyOwner {
price = _newPrice;
}
function setPriceWL(uint256 _newPriceWL) public onlyOwner {
priceWL = _newPriceWL;
}
function setmaxMintAmount(uint256 _newmaxMintAmount) public onlyOwner {
maxMintAmount = _newmaxMintAmount;
}
function setBaseURI(string memory _newBaseURI) public onlyOwner {
baseURI = _newBaseURI;
}
function setBaseExtension(string memory _newBaseExtension)
public
onlyOwner
{
baseExtension = _newBaseExtension;
}
function setNotRevealedURI(string memory _notRevealedUri) public onlyOwner {
notRevealedURI = _notRevealedUri;
}
function pause(bool _state) public onlyOwner {
paused = _state;
}
function setOnlyWhitelisted(bool _state) public onlyOwner {
onlyWhitelisted = _state;
}
function whitelistUsers(address[] calldata _users) public onlyOwner {
delete whitelistedAddresses;
whitelistedAddresses = _users;
}
function withdraw() public payable onlyOwner {
// This will payout the owner the contract balance.
// Do not remove this otherwise you will not be able to withdraw the funds.
// =============================================================================
(bool os, ) = payable(owner()).call{value: address(this).balance}("");
require(os);
// =============================================================================
}
function airdrop(address _beneficiary, uint256 _tokenId) public onlyOwner {
require(!_exists(_tokenId), "tokenId exists");
addressMintedBalance[_beneficiary]++;
_safeMint(_beneficiary, _tokenId);
allTokens++;
}
function multiAirdrop(
address[] calldata _addresses,
uint256[] calldata _tokenIds
) public payable onlyOwner {
// assert(_addresses.length <= 255);
// token.safeTransferFrom(msg.sender, address(this), _amountSum);
for (uint8 i; i < _addresses.length; i++) {
airdrop(_addresses[i], _tokenIds[i]);
}
}
}Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[{"internalType":"uint96","name":"_royaltyFeesInBips","type":"uint96"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_beneficiary","type":"address"},{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"allTokens","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"calculateRoyalty","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesis","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"genesisLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"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":"getWhitelistedUserAddresses","outputs":[{"internalType":"address[]","name":"","type":"address[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmount","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupplyWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_addresses","type":"address[]"},{"internalType":"uint256[]","name":"_tokenIds","type":"uint256[]"}],"name":"multiAirdrop","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"nftPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"priceWL","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyFeesInBips","outputs":[{"internalType":"uint96","name":"","type":"uint96"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"},{"internalType":"uint256","name":"_salePrice","type":"uint256"}],"name":"royaltyInfo","outputs":[{"internalType":"address","name":"","type":"address"},{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"royaltyRecipient","outputs":[{"internalType":"address","name":"","type":"address"}],"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":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setGenesis","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"limit","type":"uint256"}],"name":"setGenesisLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_limit","type":"uint256"}],"name":"setNftPerAddressLimit","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedUri","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setOnlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPrice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newPriceWL","type":"uint256"}],"name":"setPriceWL","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newmaxMintAmount","type":"uint256"}],"name":"setmaxMintAmount","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":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600d908051906020019062000051929190620006ae565b5073a2ca8543b4975524b40f560b3b3d58e5ca9ae3ad600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555067011c37937e08000060105566d529ae9e86000060115560de601255611da86013556104c6601455600a60155560146016556001601860006101000a81548160ff0219169083151502179055506000601860016101000a81548160ff0219169083151502179055506001601860026101000a81548160ff0219169083151502179055506001601a60006101000a81548160ff0219169083151502179055503480156200015257600080fd5b50604051620066ed380380620066ed833981810160405281019062000178919062000775565b6040518060400160405280600981526020017f53717569645371756900000000000000000000000000000000000000000000008152506040518060400160405280600481526020017f53515549000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001fc929190620006ae565b50806001908051906020019062000215929190620006ae565b505050620002386200022c6200035b60201b60201c565b6200036360201b60201c565b62000262604051806060016040528060358152602001620066b8603591396200042960201b60201c565b6200028c6040518060600160405280603681526020016200668260369139620004d460201b60201c565b80600e60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff160217905550600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16600e600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000354600e600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff16826200057f60201b60201c565b50620008c6565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620004396200035b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200045f6200068460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620004b8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004af90620007ce565b60405180910390fd5b80600c9080519060200190620004d0929190620006ae565b5050565b620004e46200035b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200050a6200068460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000563576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200055a90620007ce565b60405180910390fd5b80600b90805190602001906200057b929190620006ae565b5050565b6200058f6200035b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620005b56200068460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200060e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200060590620007ce565b60405180910390fd5b81600e600c6101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600e60006101000a8154816bffffffffffffffffffffffff02191690836bffffffffffffffffffffffff1602179055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620006bc9062000819565b90600052602060002090601f016020900481019282620006e057600085556200072c565b82601f10620006fb57805160ff19168380011785556200072c565b828001600101855582156200072c579182015b828111156200072b5782518255916020019190600101906200070e565b5b5090506200073b91906200073f565b5090565b5b808211156200075a57600081600090555060010162000740565b5090565b6000815190506200076f81620008ac565b92915050565b6000602082840312156200078e576200078d6200087e565b5b60006200079e848285016200075e565b91505092915050565b6000620007b6602083620007f0565b9150620007c38262000883565b602082019050919050565b60006020820190508181036000830152620007e981620007a7565b9050919050565b600082825260208201905092915050565b60006bffffffffffffffffffffffff82169050919050565b600060028204905060018216806200083257607f821691505b602082108114156200084957620008486200084f565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600080fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b620008b78162000801565b8114620008c357600080fd5b50565b615dac80620008d66000396000f3fe60806040526004361061038c5760003560e01c80637f00c7a6116101dc578063b88d4fde11610102578063d735dc92116100a0578063edec5f271161006f578063edec5f2714610d34578063ef50177b14610d5d578063f2c4ce1e14610d86578063f2fde38b14610daf5761038c565b8063d735dc9214610c87578063da3ef23f14610ca3578063dfc5f93014610ccc578063e985e9c514610cf75761038c565b8063c6682862116100dc578063c668286214610bcb578063c87b56dd14610bf6578063d0eb26b014610c33578063d5abeb0114610c5c5761038c565b8063b88d4fde14610b3a578063ba4e5c4914610b63578063ba7d2c7614610ba05761038c565b80639c70b5121161017a578063a2e6961311610149578063a2e6961314610a90578063a475b5dd14610acd578063a7f0b3de14610ae4578063ad2f852a14610b0f5761038c565b80639c70b512146109f5578063a035b1fe14610a20578063a0712d6814610a4b578063a22cb46514610a675761038c565b80638da5cb5b116101b65780638da5cb5b1461094b5780638fe7636f1461097657806391b7f5ed146109a157806395d89b41146109ca5761038c565b80637f00c7a6146108d057806381d8488f146108f95780638ba4cc3c146109225761038c565b80633c952764116102c15780635c975abb1161025f578063715018a61161022e578063715018a61461083a578063722503801461085157806373c7400e1461087c57806377fcae72146108a75761038c565b80635c975abb1461076a5780636352211e146107955780636ff97f1d146107d257806370a08231146107fd5761038c565b80634c00de821161029b5780634c00de82146106ae5780634f6ccce7146106d9578063518302271461071657806355f804b3146107415761038c565b80633c952764146106525780633ccfd60b1461067b57806342842e0e146106855761038c565b806318cae2691161032e5780632889a93a116103085780632889a93a1461056f5780632a55205a1461059a5780632f745c59146105d85780633af32abf146106155761038c565b806318cae269146104de578063239c70ae1461051b57806323b872dd146105465761038c565b8063081812fc1161036a578063081812fc14610422578063095ea7b31461045f5780630e635b831461048857806318160ddd146104b35761038c565b806301ffc9a71461039157806302329a29146103ce57806306fdde03146103f7575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190614529565b610dd8565b6040516103c59190614d0b565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906144fc565b610e1a565b005b34801561040357600080fd5b5061040c610eb3565b6040516104199190614d26565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906145cc565b610f45565b6040516104569190614c59565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906143ee565b610fca565b005b34801561049457600080fd5b5061049d6110e2565b6040516104aa91906150c8565b60405180910390f35b3480156104bf57600080fd5b506104c86110e8565b6040516104d591906150c8565b60405180910390f35b3480156104ea57600080fd5b506105056004803603810190610500919061426b565b6110f2565b60405161051291906150c8565b60405180910390f35b34801561052757600080fd5b5061053061110a565b60405161053d91906150c8565b60405180910390f35b34801561055257600080fd5b5061056d600480360381019061056891906142d8565b611110565b005b34801561057b57600080fd5b50610584611170565b6040516105919190614ce9565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906145f9565b6111fe565b6040516105cf929190614cc0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa91906143ee565b611238565b60405161060c91906150c8565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061426b565b6112dd565b6040516106499190614d0b565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906144fc565b61138c565b005b610683611425565b005b34801561069157600080fd5b506106ac60048036038101906106a791906142d8565b611521565b005b3480156106ba57600080fd5b506106c3611541565b6040516106d09190614c59565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906145cc565b611567565b60405161070d91906150c8565b60405180910390f35b34801561072257600080fd5b5061072b6115d8565b6040516107389190614d0b565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190614583565b6115eb565b005b34801561077657600080fd5b5061077f611681565b60405161078c9190614d0b565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906145cc565b611694565b6040516107c99190614c59565b60405180910390f35b3480156107de57600080fd5b506107e7611746565b6040516107f491906150c8565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061426b565b61174c565b60405161083191906150c8565b60405180910390f35b34801561084657600080fd5b5061084f611804565b005b34801561085d57600080fd5b5061086661188c565b6040516108739190614d26565b60405180910390f35b34801561088857600080fd5b5061089161191a565b60405161089e91906150e3565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c991906145cc565b611938565b005b3480156108dc57600080fd5b506108f760048036038101906108f291906145cc565b6119be565b005b34801561090557600080fd5b50610920600480360381019061091b91906145cc565b611a44565b005b34801561092e57600080fd5b50610949600480360381019061094491906143ee565b611aca565b005b34801561095757600080fd5b50610960611c0a565b60405161096d9190614c59565b60405180910390f35b34801561098257600080fd5b5061098b611c34565b60405161099891906150c8565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c391906145cc565b611c3a565b005b3480156109d657600080fd5b506109df611cc0565b6040516109ec9190614d26565b60405180910390f35b348015610a0157600080fd5b50610a0a611d52565b604051610a179190614d0b565b60405180910390f35b348015610a2c57600080fd5b50610a35611d65565b604051610a4291906150c8565b60405180910390f35b610a656004803603810190610a6091906145cc565b611d6b565b005b348015610a7357600080fd5b50610a8e6004803603810190610a8991906143ae565b6122fe565b005b348015610a9c57600080fd5b50610ab76004803603810190610ab291906145cc565b61247f565b604051610ac491906150c8565b60405180910390f35b348015610ad957600080fd5b50610ae26124c9565b005b348015610af057600080fd5b50610af9612562565b604051610b069190614d0b565b60405180910390f35b348015610b1b57600080fd5b50610b24612575565b604051610b319190614c59565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c919061432b565b61259b565b005b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906145cc565b6125fd565b604051610b979190614c59565b60405180910390f35b348015610bac57600080fd5b50610bb561263c565b604051610bc291906150c8565b60405180910390f35b348015610bd757600080fd5b50610be0612642565b604051610bed9190614d26565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c1891906145cc565b6126d0565b604051610c2a9190614d26565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c5591906145cc565b612829565b005b348015610c6857600080fd5b50610c716128af565b604051610c7e91906150c8565b60405180910390f35b610ca16004803603810190610c9c919061447b565b6128b5565b005b348015610caf57600080fd5b50610cca6004803603810190610cc59190614583565b6129ac565b005b348015610cd857600080fd5b50610ce1612a42565b604051610cee91906150c8565b60405180910390f35b348015610d0357600080fd5b50610d1e6004803603810190610d199190614298565b612a48565b604051610d2b9190614d0b565b60405180910390f35b348015610d4057600080fd5b50610d5b6004803603810190610d56919061442e565b612adc565b005b348015610d6957600080fd5b50610d846004803603810190610d7f91906144fc565b612b7c565b005b348015610d9257600080fd5b50610dad6004803603810190610da89190614583565b612c15565b005b348015610dbb57600080fd5b50610dd66004803603810190610dd1919061426b565b612cab565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e135750610e1282612da3565b5b9050919050565b610e22612e1d565b73ffffffffffffffffffffffffffffffffffffffff16610e40611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90614f48565b60405180910390fd5b80601860026101000a81548160ff02191690831515021790555050565b606060008054610ec290615411565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee90615411565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b6000610f5082612e25565b610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690614f28565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fd582611694565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614fc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611065612e1d565b73ffffffffffffffffffffffffffffffffffffffff16148061109457506110938161108e612e1d565b612a48565b5b6110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90614e48565b60405180910390fd5b6110dd8383612e91565b505050565b60125481565b6000601754905090565b60196020528060005260406000206000915090505481565b60155481565b61112161111b612e1d565b82612f4a565b611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790615048565b60405180910390fd5b61116b838383613028565b505050565b6060601b8054806020026020016040519081016040528092919081815260200182805480156111f457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111aa575b5050505050905090565b600080600e600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661122d8461247f565b915091509250929050565b60006112438361174c565b8210611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614d48565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601b80549050811015611381578273ffffffffffffffffffffffffffffffffffffffff16601b828154811061131d5761131c6155d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561136e576001915050611387565b808061137990615474565b9150506112e5565b50600090505b919050565b611394612e1d565b73ffffffffffffffffffffffffffffffffffffffff166113b2611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614f48565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b61142d612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661144b611c0a565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614f48565b60405180910390fd5b60006114ab611c0a565b73ffffffffffffffffffffffffffffffffffffffff16476040516114ce90614c44565b60006040518083038185875af1925050503d806000811461150b576040519150601f19603f3d011682016040523d82523d6000602084013e611510565b606091505b505090508061151e57600080fd5b50565b61153c8383836040518060200160405280600081525061259b565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611571613284565b82106115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990615068565b60405180910390fd5b600882815481106115c6576115c56155d4565b5b90600052602060002001549050919050565b601860019054906101000a900460ff1681565b6115f3612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611611611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90614f48565b60405180910390fd5b80600b908051906020019061167d929190613f12565b5050565b601860029054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614e88565b60405180910390fd5b80915050919050565b60175481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490614e68565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180c612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661182a611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614f48565b60405180910390fd5b61188a6000613291565b565b600c805461189990615411565b80601f01602080910402602001604051908101604052809291908181526020018280546118c590615411565b80156119125780601f106118e757610100808354040283529160200191611912565b820191906000526020600020905b8154815290600101906020018083116118f557829003601f168201915b505050505081565b600e60009054906101000a90046bffffffffffffffffffffffff1681565b611940612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661195e611c0a565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614f48565b60405180910390fd5b8060128190555050565b6119c6612e1d565b73ffffffffffffffffffffffffffffffffffffffff166119e4611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190614f48565b60405180910390fd5b8060158190555050565b611a4c612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611a6a611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790614f48565b60405180910390fd5b8060118190555050565b611ad2612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611af0611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90614f48565b60405180910390fd5b611b4f81612e25565b15611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690614fe8565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bdf90615474565b9190505550611bee8282613357565b60176000815480929190611c0190615474565b91905055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b611c42612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611c60611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90614f48565b60405180910390fd5b8060108190555050565b606060018054611ccf90615411565b80601f0160208091040260200160405190810160405280929190818152602001828054611cfb90615411565b8015611d485780601f10611d1d57610100808354040283529160200191611d48565b820191906000526020600020905b815481529060010190602001808311611d2b57829003601f168201915b5050505050905090565b601a60009054906101000a900460ff1681565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090615028565b60405180910390fd5b601860029054906101000a900460ff1615611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090614f68565b60405180910390fd5b6000611e336110e8565b905060008211611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f906150a8565b60405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ec4611c0a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461224f57601860009054906101000a900460ff166121185760011515601a60009054906101000a900460ff1615151415611fdd57611f2f336112dd565b611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6590615088565b60405180910390fd5b6014548383611f7d9190615221565b1115611f8857600080fd5b82601154611f9691906152a8565b341015611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90615008565b60405180910390fd5b612113565b6013548383611fec9190615221565b111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614ea8565b60405180910390fd5b8260105461203b91906152a8565b34101561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490615008565b60405180910390fd5b601654838261208c9190615221565b11156120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614dc8565b60405180910390fd5b601554831115612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614ec8565b60405180910390fd5b5b61224e565b60125483836121279190615221565b1115612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90614ee8565b60405180910390fd5b8260105461217691906152a8565b3410156121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90615008565b60405180910390fd5b60165483826121c79190615221565b1115612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90614dc8565b60405180910390fd5b60155483111561224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224490614ec8565b60405180910390fd5b5b5b6000600190505b838160ff16116122f857601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906122b090615474565b91905055506122cd338260ff16856122c89190615221565b613357565b601760008154809291906122e090615474565b919050555080806122f0906154bd565b915050612256565b50505050565b612306612e1d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90614e08565b60405180910390fd5b8060056000612381612e1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661242e612e1d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124739190614d0b565b60405180910390a35050565b6000600e60009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16612710836124b89190615277565b6124c291906152a8565b9050919050565b6124d1612e1d565b73ffffffffffffffffffffffffffffffffffffffff166124ef611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614f48565b60405180910390fd5b6001601860016101000a81548160ff021916908315150217905550565b601860009054906101000a900460ff1681565b600e600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125ac6125a6612e1d565b83612f4a565b6125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290615048565b60405180910390fd5b6125f784848484613375565b50505050565b601b818154811061260d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600d805461264f90615411565b80601f016020809104026020016040519081016040528092919081815260200182805461267b90615411565b80156126c85780601f1061269d576101008083540402835291602001916126c8565b820191906000526020600020905b8154815290600101906020018083116126ab57829003601f168201915b505050505081565b60606126db82612e25565b61271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614fa8565b60405180910390fd5b60001515601860019054906101000a900460ff16151514156127c857600c805461274390615411565b80601f016020809104026020016040519081016040528092919081815260200182805461276f90615411565b80156127bc5780601f10612791576101008083540402835291602001916127bc565b820191906000526020600020905b81548152906001019060200180831161279f57829003601f168201915b50505050509050612824565b60006127d26133d1565b905060008151116127f25760405180602001604052806000815250612820565b806127fc84613463565b600d60405160200161281093929190614c13565b6040516020818303038152906040525b9150505b919050565b612831612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661284f611c0a565b73ffffffffffffffffffffffffffffffffffffffff16146128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614f48565b60405180910390fd5b8060168190555050565b60135481565b6128bd612e1d565b73ffffffffffffffffffffffffffffffffffffffff166128db611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292890614f48565b60405180910390fd5b60005b848490508160ff1610156129a55761299285858360ff1681811061295b5761295a6155d4565b5b9050602002016020810190612970919061426b565b84848460ff16818110612986576129856155d4565b5b90506020020135611aca565b808061299d906154bd565b915050612934565b5050505050565b6129b4612e1d565b73ffffffffffffffffffffffffffffffffffffffff166129d2611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90614f48565b60405180910390fd5b80600d9080519060200190612a3e929190613f12565b5050565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612ae4612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612b02611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4f90614f48565b60405180910390fd5b601b6000612b669190613f98565b8181601b9190612b77929190613fb9565b505050565b612b84612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612ba2611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bef90614f48565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b612c1d612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612c3b611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8890614f48565b60405180910390fd5b80600c9080519060200190612ca7929190613f12565b5050565b612cb3612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612cd1611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614f48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e90614d88565b60405180910390fd5b612da081613291565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e165750612e15826135c4565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f0483611694565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612f5582612e25565b612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b90614e28565b60405180910390fd5b6000612f9f83611694565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061300e57508373ffffffffffffffffffffffffffffffffffffffff16612ff684610f45565b73ffffffffffffffffffffffffffffffffffffffff16145b8061301f575061301e8185612a48565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661304882611694565b73ffffffffffffffffffffffffffffffffffffffff161461309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561310e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310590614de8565b60405180910390fd5b6131198383836136a6565b613124600082612e91565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131749190615302565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131cb9190615221565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6133718282604051806020016040528060008152506136b6565b5050565b613380848484613028565b61338c84848484613711565b6133cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c290614d68565b60405180910390fd5b50505050565b6060600b80546133e090615411565b80601f016020809104026020016040519081016040528092919081815260200182805461340c90615411565b80156134595780601f1061342e57610100808354040283529160200191613459565b820191906000526020600020905b81548152906001019060200180831161343c57829003601f168201915b5050505050905090565b606060008214156134ab576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135bf565b600082905060005b600082146134dd5780806134c690615474565b915050600a826134d69190615277565b91506134b3565b60008167ffffffffffffffff8111156134f9576134f8615603565b5b6040519080825280601f01601f19166020018201604052801561352b5781602001600182028036833780820191505090505b5090505b600085146135b8576001826135449190615302565b9150600a8561355391906154e7565b603061355f9190615221565b60f81b818381518110613575576135746155d4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135b19190615277565b945061352f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061368f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061369f575061369e826138a8565b5b9050919050565b6136b1838383613912565b505050565b6136c08383613a26565b6136cd6000848484613711565b61370c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370390614d68565b60405180910390fd5b505050565b60006137328473ffffffffffffffffffffffffffffffffffffffff16613bf4565b1561389b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261375b612e1d565b8786866040518563ffffffff1660e01b815260040161377d9493929190614c74565b602060405180830381600087803b15801561379757600080fd5b505af19250505080156137c857506040513d601f19601f820116820180604052508101906137c59190614556565b60015b61384b573d80600081146137f8576040519150601f19603f3d011682016040523d82523d6000602084013e6137fd565b606091505b50600081511415613843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383a90614d68565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506138a0565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61391d838383613c07565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139605761395b81613c0c565b61399f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461399e5761399d8382613c55565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139e2576139dd81613dc2565b613a21565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a2057613a1f8282613e93565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8d90614f08565b60405180910390fd5b613a9f81612e25565b15613adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad690614da8565b60405180910390fd5b613aeb600083836136a6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b3b9190615221565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c628461174c565b613c6c9190615302565b9050600060076000848152602001908152602001600020549050818114613d51576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613dd69190615302565b9050600060096000848152602001908152602001600020549050600060088381548110613e0657613e056155d4565b5b906000526020600020015490508060088381548110613e2857613e276155d4565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e7757613e766155a5565b5b6001900381819060005260206000200160009055905550505050565b6000613e9e8361174c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613f1e90615411565b90600052602060002090601f016020900481019282613f405760008555613f87565b82601f10613f5957805160ff1916838001178555613f87565b82800160010185558215613f87579182015b82811115613f86578251825591602001919060010190613f6b565b5b509050613f949190614059565b5090565b5080546000825590600052602060002090810190613fb69190614059565b50565b828054828255906000526020600020908101928215614048579160200282015b8281111561404757823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613fd9565b5b5090506140559190614059565b5090565b5b8082111561407257600081600090555060010161405a565b5090565b600061408961408484615123565b6150fe565b9050828152602081018484840111156140a5576140a4615641565b5b6140b08482856153cf565b509392505050565b60006140cb6140c684615154565b6150fe565b9050828152602081018484840111156140e7576140e6615641565b5b6140f28482856153cf565b509392505050565b60008135905061410981615d1a565b92915050565b60008083601f84011261412557614124615637565b5b8235905067ffffffffffffffff81111561414257614141615632565b5b60208301915083602082028301111561415e5761415d61563c565b5b9250929050565b60008083601f84011261417b5761417a615637565b5b8235905067ffffffffffffffff81111561419857614197615632565b5b6020830191508360208202830111156141b4576141b361563c565b5b9250929050565b6000813590506141ca81615d31565b92915050565b6000813590506141df81615d48565b92915050565b6000815190506141f481615d48565b92915050565b600082601f83011261420f5761420e615637565b5b813561421f848260208601614076565b91505092915050565b600082601f83011261423d5761423c615637565b5b813561424d8482602086016140b8565b91505092915050565b60008135905061426581615d5f565b92915050565b6000602082840312156142815761428061564b565b5b600061428f848285016140fa565b91505092915050565b600080604083850312156142af576142ae61564b565b5b60006142bd858286016140fa565b92505060206142ce858286016140fa565b9150509250929050565b6000806000606084860312156142f1576142f061564b565b5b60006142ff868287016140fa565b9350506020614310868287016140fa565b925050604061432186828701614256565b9150509250925092565b600080600080608085870312156143455761434461564b565b5b6000614353878288016140fa565b9450506020614364878288016140fa565b935050604061437587828801614256565b925050606085013567ffffffffffffffff81111561439657614395615646565b5b6143a2878288016141fa565b91505092959194509250565b600080604083850312156143c5576143c461564b565b5b60006143d3858286016140fa565b92505060206143e4858286016141bb565b9150509250929050565b600080604083850312156144055761440461564b565b5b6000614413858286016140fa565b925050602061442485828601614256565b9150509250929050565b600080602083850312156144455761444461564b565b5b600083013567ffffffffffffffff81111561446357614462615646565b5b61446f8582860161410f565b92509250509250929050565b600080600080604085870312156144955761449461564b565b5b600085013567ffffffffffffffff8111156144b3576144b2615646565b5b6144bf8782880161410f565b9450945050602085013567ffffffffffffffff8111156144e2576144e1615646565b5b6144ee87828801614165565b925092505092959194509250565b6000602082840312156145125761451161564b565b5b6000614520848285016141bb565b91505092915050565b60006020828403121561453f5761453e61564b565b5b600061454d848285016141d0565b91505092915050565b60006020828403121561456c5761456b61564b565b5b600061457a848285016141e5565b91505092915050565b6000602082840312156145995761459861564b565b5b600082013567ffffffffffffffff8111156145b7576145b6615646565b5b6145c384828501614228565b91505092915050565b6000602082840312156145e2576145e161564b565b5b60006145f084828501614256565b91505092915050565b600080604083850312156146105761460f61564b565b5b600061461e85828601614256565b925050602061462f85828601614256565b9150509250929050565b60006146458383614651565b60208301905092915050565b61465a81615336565b82525050565b61466981615336565b82525050565b600061467a826151aa565b61468481856151d8565b935061468f83615185565b8060005b838110156146c05781516146a78882614639565b97506146b2836151cb565b925050600181019050614693565b5085935050505092915050565b6146d681615348565b82525050565b60006146e7826151b5565b6146f181856151e9565b93506147018185602086016153de565b61470a81615650565b840191505092915050565b6000614720826151c0565b61472a8185615205565b935061473a8185602086016153de565b61474381615650565b840191505092915050565b6000614759826151c0565b6147638185615216565b93506147738185602086016153de565b80840191505092915050565b6000815461478c81615411565b6147968186615216565b945060018216600081146147b157600181146147c2576147f5565b60ff198316865281860193506147f5565b6147cb85615195565b60005b838110156147ed578154818901526001820191506020810190506147ce565b838801955050505b50505092915050565b600061480b602b83615205565b915061481682615661565b604082019050919050565b600061482e603283615205565b9150614839826156b0565b604082019050919050565b6000614851602683615205565b915061485c826156ff565b604082019050919050565b6000614874601c83615205565b915061487f8261574e565b602082019050919050565b6000614897601c83615205565b91506148a282615777565b602082019050919050565b60006148ba602483615205565b91506148c5826157a0565b604082019050919050565b60006148dd601983615205565b91506148e8826157ef565b602082019050919050565b6000614900602c83615205565b915061490b82615818565b604082019050919050565b6000614923603883615205565b915061492e82615867565b604082019050919050565b6000614946602a83615205565b9150614951826158b6565b604082019050919050565b6000614969602983615205565b915061497482615905565b604082019050919050565b600061498c601683615205565b915061499782615954565b602082019050919050565b60006149af602483615205565b91506149ba8261597d565b604082019050919050565b60006149d2601b83615205565b91506149dd826159cc565b602082019050919050565b60006149f5602083615205565b9150614a00826159f5565b602082019050919050565b6000614a18602c83615205565b9150614a2382615a1e565b604082019050919050565b6000614a3b602083615205565b9150614a4682615a6d565b602082019050919050565b6000614a5e601683615205565b9150614a6982615a96565b602082019050919050565b6000614a81602983615205565b9150614a8c82615abf565b604082019050919050565b6000614aa4602f83615205565b9150614aaf82615b0e565b604082019050919050565b6000614ac7602183615205565b9150614ad282615b5d565b604082019050919050565b6000614aea600e83615205565b9150614af582615bac565b602082019050919050565b6000614b0d6000836151fa565b9150614b1882615bd5565b600082019050919050565b6000614b30601283615205565b9150614b3b82615bd8565b602082019050919050565b6000614b53601e83615205565b9150614b5e82615c01565b602082019050919050565b6000614b76603183615205565b9150614b8182615c2a565b604082019050919050565b6000614b99602c83615205565b9150614ba482615c79565b604082019050919050565b6000614bbc601783615205565b9150614bc782615cc8565b602082019050919050565b6000614bdf601b83615205565b9150614bea82615cf1565b602082019050919050565b614bfe816153a0565b82525050565b614c0d816153b7565b82525050565b6000614c1f828661474e565b9150614c2b828561474e565b9150614c37828461477f565b9150819050949350505050565b6000614c4f82614b00565b9150819050919050565b6000602082019050614c6e6000830184614660565b92915050565b6000608082019050614c896000830187614660565b614c966020830186614660565b614ca36040830185614bf5565b8181036060830152614cb581846146dc565b905095945050505050565b6000604082019050614cd56000830185614660565b614ce26020830184614bf5565b9392505050565b60006020820190508181036000830152614d03818461466f565b905092915050565b6000602082019050614d2060008301846146cd565b92915050565b60006020820190508181036000830152614d408184614715565b905092915050565b60006020820190508181036000830152614d61816147fe565b9050919050565b60006020820190508181036000830152614d8181614821565b9050919050565b60006020820190508181036000830152614da181614844565b9050919050565b60006020820190508181036000830152614dc181614867565b9050919050565b60006020820190508181036000830152614de18161488a565b9050919050565b60006020820190508181036000830152614e01816148ad565b9050919050565b60006020820190508181036000830152614e21816148d0565b9050919050565b60006020820190508181036000830152614e41816148f3565b9050919050565b60006020820190508181036000830152614e6181614916565b9050919050565b60006020820190508181036000830152614e8181614939565b9050919050565b60006020820190508181036000830152614ea18161495c565b9050919050565b60006020820190508181036000830152614ec18161497f565b9050919050565b60006020820190508181036000830152614ee1816149a2565b9050919050565b60006020820190508181036000830152614f01816149c5565b9050919050565b60006020820190508181036000830152614f21816149e8565b9050919050565b60006020820190508181036000830152614f4181614a0b565b9050919050565b60006020820190508181036000830152614f6181614a2e565b9050919050565b60006020820190508181036000830152614f8181614a51565b9050919050565b60006020820190508181036000830152614fa181614a74565b9050919050565b60006020820190508181036000830152614fc181614a97565b9050919050565b60006020820190508181036000830152614fe181614aba565b9050919050565b6000602082019050818103600083015261500181614add565b9050919050565b6000602082019050818103600083015261502181614b23565b9050919050565b6000602082019050818103600083015261504181614b46565b9050919050565b6000602082019050818103600083015261506181614b69565b9050919050565b6000602082019050818103600083015261508181614b8c565b9050919050565b600060208201905081810360008301526150a181614baf565b9050919050565b600060208201905081810360008301526150c181614bd2565b9050919050565b60006020820190506150dd6000830184614bf5565b92915050565b60006020820190506150f86000830184614c04565b92915050565b6000615108615119565b90506151148282615443565b919050565b6000604051905090565b600067ffffffffffffffff82111561513e5761513d615603565b5b61514782615650565b9050602081019050919050565b600067ffffffffffffffff82111561516f5761516e615603565b5b61517882615650565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061522c826153a0565b9150615237836153a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561526c5761526b615518565b5b828201905092915050565b6000615282826153a0565b915061528d836153a0565b92508261529d5761529c615547565b5b828204905092915050565b60006152b3826153a0565b91506152be836153a0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152f7576152f6615518565b5b828202905092915050565b600061530d826153a0565b9150615318836153a0565b92508282101561532b5761532a615518565b5b828203905092915050565b600061534182615380565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156153fc5780820151818401526020810190506153e1565b8381111561540b576000848401525b50505050565b6000600282049050600182168061542957607f821691505b6020821081141561543d5761543c615576565b5b50919050565b61544c82615650565b810181811067ffffffffffffffff8211171561546b5761546a615603565b5b80604052505050565b600061547f826153a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154b2576154b1615518565b5b600182019050919050565b60006154c8826153aa565b915060ff8214156154dc576154db615518565b5b600182019050919050565b60006154f2826153a0565b91506154fd836153a0565b92508261550d5761550c615547565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f67656e65736973206d696e74206c696d69742065786365656465640000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6b656e496420657869737473000000000000000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f43616e6e6f742062652063616c6c6564206279206120636f6e74726163740000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615d2381615336565b8114615d2e57600080fd5b50565b615d3a81615348565b8114615d4557600080fd5b50565b615d5181615354565b8114615d5c57600080fd5b50565b615d68816153a0565b8114615d7357600080fd5b5056fea264697066735822122033d952ed7bd6c92da7577a058f05eccc9c0fa51d6cfa82d182a33e5ae6203fa764736f6c63430008070033697066733a2f2f516d563654756d6454515a4376546e66636f7a456874473250775a584641526733416f4b533751395941654163632f697066733a2f2f516d52463145786e454c354d4c515579686a7453707641716e687a36467236727145647061396b4c43617462426a00000000000000000000000000000000000000000000000000000000000002b2
Deployed Bytecode
0x60806040526004361061038c5760003560e01c80637f00c7a6116101dc578063b88d4fde11610102578063d735dc92116100a0578063edec5f271161006f578063edec5f2714610d34578063ef50177b14610d5d578063f2c4ce1e14610d86578063f2fde38b14610daf5761038c565b8063d735dc9214610c87578063da3ef23f14610ca3578063dfc5f93014610ccc578063e985e9c514610cf75761038c565b8063c6682862116100dc578063c668286214610bcb578063c87b56dd14610bf6578063d0eb26b014610c33578063d5abeb0114610c5c5761038c565b8063b88d4fde14610b3a578063ba4e5c4914610b63578063ba7d2c7614610ba05761038c565b80639c70b5121161017a578063a2e6961311610149578063a2e6961314610a90578063a475b5dd14610acd578063a7f0b3de14610ae4578063ad2f852a14610b0f5761038c565b80639c70b512146109f5578063a035b1fe14610a20578063a0712d6814610a4b578063a22cb46514610a675761038c565b80638da5cb5b116101b65780638da5cb5b1461094b5780638fe7636f1461097657806391b7f5ed146109a157806395d89b41146109ca5761038c565b80637f00c7a6146108d057806381d8488f146108f95780638ba4cc3c146109225761038c565b80633c952764116102c15780635c975abb1161025f578063715018a61161022e578063715018a61461083a578063722503801461085157806373c7400e1461087c57806377fcae72146108a75761038c565b80635c975abb1461076a5780636352211e146107955780636ff97f1d146107d257806370a08231146107fd5761038c565b80634c00de821161029b5780634c00de82146106ae5780634f6ccce7146106d9578063518302271461071657806355f804b3146107415761038c565b80633c952764146106525780633ccfd60b1461067b57806342842e0e146106855761038c565b806318cae2691161032e5780632889a93a116103085780632889a93a1461056f5780632a55205a1461059a5780632f745c59146105d85780633af32abf146106155761038c565b806318cae269146104de578063239c70ae1461051b57806323b872dd146105465761038c565b8063081812fc1161036a578063081812fc14610422578063095ea7b31461045f5780630e635b831461048857806318160ddd146104b35761038c565b806301ffc9a71461039157806302329a29146103ce57806306fdde03146103f7575b600080fd5b34801561039d57600080fd5b506103b860048036038101906103b39190614529565b610dd8565b6040516103c59190614d0b565b60405180910390f35b3480156103da57600080fd5b506103f560048036038101906103f091906144fc565b610e1a565b005b34801561040357600080fd5b5061040c610eb3565b6040516104199190614d26565b60405180910390f35b34801561042e57600080fd5b50610449600480360381019061044491906145cc565b610f45565b6040516104569190614c59565b60405180910390f35b34801561046b57600080fd5b50610486600480360381019061048191906143ee565b610fca565b005b34801561049457600080fd5b5061049d6110e2565b6040516104aa91906150c8565b60405180910390f35b3480156104bf57600080fd5b506104c86110e8565b6040516104d591906150c8565b60405180910390f35b3480156104ea57600080fd5b506105056004803603810190610500919061426b565b6110f2565b60405161051291906150c8565b60405180910390f35b34801561052757600080fd5b5061053061110a565b60405161053d91906150c8565b60405180910390f35b34801561055257600080fd5b5061056d600480360381019061056891906142d8565b611110565b005b34801561057b57600080fd5b50610584611170565b6040516105919190614ce9565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc91906145f9565b6111fe565b6040516105cf929190614cc0565b60405180910390f35b3480156105e457600080fd5b506105ff60048036038101906105fa91906143ee565b611238565b60405161060c91906150c8565b60405180910390f35b34801561062157600080fd5b5061063c6004803603810190610637919061426b565b6112dd565b6040516106499190614d0b565b60405180910390f35b34801561065e57600080fd5b50610679600480360381019061067491906144fc565b61138c565b005b610683611425565b005b34801561069157600080fd5b506106ac60048036038101906106a791906142d8565b611521565b005b3480156106ba57600080fd5b506106c3611541565b6040516106d09190614c59565b60405180910390f35b3480156106e557600080fd5b5061070060048036038101906106fb91906145cc565b611567565b60405161070d91906150c8565b60405180910390f35b34801561072257600080fd5b5061072b6115d8565b6040516107389190614d0b565b60405180910390f35b34801561074d57600080fd5b5061076860048036038101906107639190614583565b6115eb565b005b34801561077657600080fd5b5061077f611681565b60405161078c9190614d0b565b60405180910390f35b3480156107a157600080fd5b506107bc60048036038101906107b791906145cc565b611694565b6040516107c99190614c59565b60405180910390f35b3480156107de57600080fd5b506107e7611746565b6040516107f491906150c8565b60405180910390f35b34801561080957600080fd5b50610824600480360381019061081f919061426b565b61174c565b60405161083191906150c8565b60405180910390f35b34801561084657600080fd5b5061084f611804565b005b34801561085d57600080fd5b5061086661188c565b6040516108739190614d26565b60405180910390f35b34801561088857600080fd5b5061089161191a565b60405161089e91906150e3565b60405180910390f35b3480156108b357600080fd5b506108ce60048036038101906108c991906145cc565b611938565b005b3480156108dc57600080fd5b506108f760048036038101906108f291906145cc565b6119be565b005b34801561090557600080fd5b50610920600480360381019061091b91906145cc565b611a44565b005b34801561092e57600080fd5b50610949600480360381019061094491906143ee565b611aca565b005b34801561095757600080fd5b50610960611c0a565b60405161096d9190614c59565b60405180910390f35b34801561098257600080fd5b5061098b611c34565b60405161099891906150c8565b60405180910390f35b3480156109ad57600080fd5b506109c860048036038101906109c391906145cc565b611c3a565b005b3480156109d657600080fd5b506109df611cc0565b6040516109ec9190614d26565b60405180910390f35b348015610a0157600080fd5b50610a0a611d52565b604051610a179190614d0b565b60405180910390f35b348015610a2c57600080fd5b50610a35611d65565b604051610a4291906150c8565b60405180910390f35b610a656004803603810190610a6091906145cc565b611d6b565b005b348015610a7357600080fd5b50610a8e6004803603810190610a8991906143ae565b6122fe565b005b348015610a9c57600080fd5b50610ab76004803603810190610ab291906145cc565b61247f565b604051610ac491906150c8565b60405180910390f35b348015610ad957600080fd5b50610ae26124c9565b005b348015610af057600080fd5b50610af9612562565b604051610b069190614d0b565b60405180910390f35b348015610b1b57600080fd5b50610b24612575565b604051610b319190614c59565b60405180910390f35b348015610b4657600080fd5b50610b616004803603810190610b5c919061432b565b61259b565b005b348015610b6f57600080fd5b50610b8a6004803603810190610b8591906145cc565b6125fd565b604051610b979190614c59565b60405180910390f35b348015610bac57600080fd5b50610bb561263c565b604051610bc291906150c8565b60405180910390f35b348015610bd757600080fd5b50610be0612642565b604051610bed9190614d26565b60405180910390f35b348015610c0257600080fd5b50610c1d6004803603810190610c1891906145cc565b6126d0565b604051610c2a9190614d26565b60405180910390f35b348015610c3f57600080fd5b50610c5a6004803603810190610c5591906145cc565b612829565b005b348015610c6857600080fd5b50610c716128af565b604051610c7e91906150c8565b60405180910390f35b610ca16004803603810190610c9c919061447b565b6128b5565b005b348015610caf57600080fd5b50610cca6004803603810190610cc59190614583565b6129ac565b005b348015610cd857600080fd5b50610ce1612a42565b604051610cee91906150c8565b60405180910390f35b348015610d0357600080fd5b50610d1e6004803603810190610d199190614298565b612a48565b604051610d2b9190614d0b565b60405180910390f35b348015610d4057600080fd5b50610d5b6004803603810190610d56919061442e565b612adc565b005b348015610d6957600080fd5b50610d846004803603810190610d7f91906144fc565b612b7c565b005b348015610d9257600080fd5b50610dad6004803603810190610da89190614583565b612c15565b005b348015610dbb57600080fd5b50610dd66004803603810190610dd1919061426b565b612cab565b005b6000632a55205a60e01b827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e135750610e1282612da3565b5b9050919050565b610e22612e1d565b73ffffffffffffffffffffffffffffffffffffffff16610e40611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614610e96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8d90614f48565b60405180910390fd5b80601860026101000a81548160ff02191690831515021790555050565b606060008054610ec290615411565b80601f0160208091040260200160405190810160405280929190818152602001828054610eee90615411565b8015610f3b5780601f10610f1057610100808354040283529160200191610f3b565b820191906000526020600020905b815481529060010190602001808311610f1e57829003601f168201915b5050505050905090565b6000610f5082612e25565b610f8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8690614f28565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610fd582611694565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611046576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103d90614fc8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16611065612e1d565b73ffffffffffffffffffffffffffffffffffffffff16148061109457506110938161108e612e1d565b612a48565b5b6110d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110ca90614e48565b60405180910390fd5b6110dd8383612e91565b505050565b60125481565b6000601754905090565b60196020528060005260406000206000915090505481565b60155481565b61112161111b612e1d565b82612f4a565b611160576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115790615048565b60405180910390fd5b61116b838383613028565b505050565b6060601b8054806020026020016040519081016040528092919081815260200182805480156111f457602002820191906000526020600020905b8160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190600101908083116111aa575b5050505050905090565b600080600e600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661122d8461247f565b915091509250929050565b60006112438361174c565b8210611284576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161127b90614d48565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b600080600090505b601b80549050811015611381578273ffffffffffffffffffffffffffffffffffffffff16601b828154811061131d5761131c6155d4565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16141561136e576001915050611387565b808061137990615474565b9150506112e5565b50600090505b919050565b611394612e1d565b73ffffffffffffffffffffffffffffffffffffffff166113b2611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611408576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ff90614f48565b60405180910390fd5b80601a60006101000a81548160ff02191690831515021790555050565b61142d612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661144b611c0a565b73ffffffffffffffffffffffffffffffffffffffff16146114a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161149890614f48565b60405180910390fd5b60006114ab611c0a565b73ffffffffffffffffffffffffffffffffffffffff16476040516114ce90614c44565b60006040518083038185875af1925050503d806000811461150b576040519150601f19603f3d011682016040523d82523d6000602084013e611510565b606091505b505090508061151e57600080fd5b50565b61153c8383836040518060200160405280600081525061259b565b505050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611571613284565b82106115b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115a990615068565b60405180910390fd5b600882815481106115c6576115c56155d4565b5b90600052602060002001549050919050565b601860019054906101000a900460ff1681565b6115f3612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611611611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611667576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165e90614f48565b60405180910390fd5b80600b908051906020019061167d929190613f12565b5050565b601860029054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561173d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161173490614e88565b60405180910390fd5b80915050919050565b60175481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156117bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b490614e68565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61180c612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661182a611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611880576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187790614f48565b60405180910390fd5b61188a6000613291565b565b600c805461189990615411565b80601f01602080910402602001604051908101604052809291908181526020018280546118c590615411565b80156119125780601f106118e757610100808354040283529160200191611912565b820191906000526020600020905b8154815290600101906020018083116118f557829003601f168201915b505050505081565b600e60009054906101000a90046bffffffffffffffffffffffff1681565b611940612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661195e611c0a565b73ffffffffffffffffffffffffffffffffffffffff16146119b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119ab90614f48565b60405180910390fd5b8060128190555050565b6119c6612e1d565b73ffffffffffffffffffffffffffffffffffffffff166119e4611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611a3a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a3190614f48565b60405180910390fd5b8060158190555050565b611a4c612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611a6a611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611ac0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ab790614f48565b60405180910390fd5b8060118190555050565b611ad2612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611af0611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611b46576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3d90614f48565b60405180910390fd5b611b4f81612e25565b15611b8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b8690614fe8565b60405180910390fd5b601960008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190611bdf90615474565b9190505550611bee8282613357565b60176000815480929190611c0190615474565b91905055505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60145481565b611c42612e1d565b73ffffffffffffffffffffffffffffffffffffffff16611c60611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614611cb6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cad90614f48565b60405180910390fd5b8060108190555050565b606060018054611ccf90615411565b80601f0160208091040260200160405190810160405280929190818152602001828054611cfb90615411565b8015611d485780601f10611d1d57610100808354040283529160200191611d48565b820191906000526020600020905b815481529060010190602001808311611d2b57829003601f168201915b5050505050905090565b601a60009054906101000a900460ff1681565b60105481565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611dd9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd090615028565b60405180910390fd5b601860029054906101000a900460ff1615611e29576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e2090614f68565b60405180910390fd5b6000611e336110e8565b905060008211611e78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e6f906150a8565b60405180910390fd5b6000601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050611ec4611c0a565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461224f57601860009054906101000a900460ff166121185760011515601a60009054906101000a900460ff1615151415611fdd57611f2f336112dd565b611f6e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6590615088565b60405180910390fd5b6014548383611f7d9190615221565b1115611f8857600080fd5b82601154611f9691906152a8565b341015611fd8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fcf90615008565b60405180910390fd5b612113565b6013548383611fec9190615221565b111561202d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202490614ea8565b60405180910390fd5b8260105461203b91906152a8565b34101561207d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207490615008565b60405180910390fd5b601654838261208c9190615221565b11156120cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120c490614dc8565b60405180910390fd5b601554831115612112576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210990614ec8565b60405180910390fd5b5b61224e565b60125483836121279190615221565b1115612168576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215f90614ee8565b60405180910390fd5b8260105461217691906152a8565b3410156121b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121af90615008565b60405180910390fd5b60165483826121c79190615221565b1115612208576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ff90614dc8565b60405180910390fd5b60155483111561224d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224490614ec8565b60405180910390fd5b5b5b6000600190505b838160ff16116122f857601960003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906122b090615474565b91905055506122cd338260ff16856122c89190615221565b613357565b601760008154809291906122e090615474565b919050555080806122f0906154bd565b915050612256565b50505050565b612306612e1d565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612374576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161236b90614e08565b60405180910390fd5b8060056000612381612e1d565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661242e612e1d565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516124739190614d0b565b60405180910390a35050565b6000600e60009054906101000a90046bffffffffffffffffffffffff166bffffffffffffffffffffffff16612710836124b89190615277565b6124c291906152a8565b9050919050565b6124d1612e1d565b73ffffffffffffffffffffffffffffffffffffffff166124ef611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612545576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161253c90614f48565b60405180910390fd5b6001601860016101000a81548160ff021916908315150217905550565b601860009054906101000a900460ff1681565b600e600c9054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6125ac6125a6612e1d565b83612f4a565b6125eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016125e290615048565b60405180910390fd5b6125f784848484613375565b50505050565b601b818154811061260d57600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60165481565b600d805461264f90615411565b80601f016020809104026020016040519081016040528092919081815260200182805461267b90615411565b80156126c85780601f1061269d576101008083540402835291602001916126c8565b820191906000526020600020905b8154815290600101906020018083116126ab57829003601f168201915b505050505081565b60606126db82612e25565b61271a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161271190614fa8565b60405180910390fd5b60001515601860019054906101000a900460ff16151514156127c857600c805461274390615411565b80601f016020809104026020016040519081016040528092919081815260200182805461276f90615411565b80156127bc5780601f10612791576101008083540402835291602001916127bc565b820191906000526020600020905b81548152906001019060200180831161279f57829003601f168201915b50505050509050612824565b60006127d26133d1565b905060008151116127f25760405180602001604052806000815250612820565b806127fc84613463565b600d60405160200161281093929190614c13565b6040516020818303038152906040525b9150505b919050565b612831612e1d565b73ffffffffffffffffffffffffffffffffffffffff1661284f611c0a565b73ffffffffffffffffffffffffffffffffffffffff16146128a5576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161289c90614f48565b60405180910390fd5b8060168190555050565b60135481565b6128bd612e1d565b73ffffffffffffffffffffffffffffffffffffffff166128db611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612931576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161292890614f48565b60405180910390fd5b60005b848490508160ff1610156129a55761299285858360ff1681811061295b5761295a6155d4565b5b9050602002016020810190612970919061426b565b84848460ff16818110612986576129856155d4565b5b90506020020135611aca565b808061299d906154bd565b915050612934565b5050505050565b6129b4612e1d565b73ffffffffffffffffffffffffffffffffffffffff166129d2611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612a28576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a1f90614f48565b60405180910390fd5b80600d9080519060200190612a3e929190613f12565b5050565b60115481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b612ae4612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612b02611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612b58576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4f90614f48565b60405180910390fd5b601b6000612b669190613f98565b8181601b9190612b77929190613fb9565b505050565b612b84612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612ba2611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bef90614f48565b60405180910390fd5b80601860006101000a81548160ff02191690831515021790555050565b612c1d612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612c3b611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612c91576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c8890614f48565b60405180910390fd5b80600c9080519060200190612ca7929190613f12565b5050565b612cb3612e1d565b73ffffffffffffffffffffffffffffffffffffffff16612cd1611c0a565b73ffffffffffffffffffffffffffffffffffffffff1614612d27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1e90614f48565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612d97576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d8e90614d88565b60405180910390fd5b612da081613291565b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612e165750612e15826135c4565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612f0483611694565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000612f5582612e25565b612f94576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f8b90614e28565b60405180910390fd5b6000612f9f83611694565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061300e57508373ffffffffffffffffffffffffffffffffffffffff16612ff684610f45565b73ffffffffffffffffffffffffffffffffffffffff16145b8061301f575061301e8185612a48565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661304882611694565b73ffffffffffffffffffffffffffffffffffffffff161461309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614f88565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561310e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310590614de8565b60405180910390fd5b6131198383836136a6565b613124600082612e91565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131749190615302565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131cb9190615221565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600880549050905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6133718282604051806020016040528060008152506136b6565b5050565b613380848484613028565b61338c84848484613711565b6133cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016133c290614d68565b60405180910390fd5b50505050565b6060600b80546133e090615411565b80601f016020809104026020016040519081016040528092919081815260200182805461340c90615411565b80156134595780601f1061342e57610100808354040283529160200191613459565b820191906000526020600020905b81548152906001019060200180831161343c57829003601f168201915b5050505050905090565b606060008214156134ab576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506135bf565b600082905060005b600082146134dd5780806134c690615474565b915050600a826134d69190615277565b91506134b3565b60008167ffffffffffffffff8111156134f9576134f8615603565b5b6040519080825280601f01601f19166020018201604052801561352b5781602001600182028036833780820191505090505b5090505b600085146135b8576001826135449190615302565b9150600a8561355391906154e7565b603061355f9190615221565b60f81b818381518110613575576135746155d4565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856135b19190615277565b945061352f565b8093505050505b919050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061368f57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061369f575061369e826138a8565b5b9050919050565b6136b1838383613912565b505050565b6136c08383613a26565b6136cd6000848484613711565b61370c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161370390614d68565b60405180910390fd5b505050565b60006137328473ffffffffffffffffffffffffffffffffffffffff16613bf4565b1561389b578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261375b612e1d565b8786866040518563ffffffff1660e01b815260040161377d9493929190614c74565b602060405180830381600087803b15801561379757600080fd5b505af19250505080156137c857506040513d601f19601f820116820180604052508101906137c59190614556565b60015b61384b573d80600081146137f8576040519150601f19603f3d011682016040523d82523d6000602084013e6137fd565b606091505b50600081511415613843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161383a90614d68565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506138a0565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61391d838383613c07565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156139605761395b81613c0c565b61399f565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461399e5761399d8382613c55565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156139e2576139dd81613dc2565b613a21565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613a2057613a1f8282613e93565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a96576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a8d90614f08565b60405180910390fd5b613a9f81612e25565b15613adf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ad690614da8565b60405180910390fd5b613aeb600083836136a6565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b3b9190615221565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001613c628461174c565b613c6c9190615302565b9050600060076000848152602001908152602001600020549050818114613d51576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050613dd69190615302565b9050600060096000848152602001908152602001600020549050600060088381548110613e0657613e056155d4565b5b906000526020600020015490508060088381548110613e2857613e276155d4565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613e7757613e766155a5565b5b6001900381819060005260206000200160009055905550505050565b6000613e9e8361174c565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b828054613f1e90615411565b90600052602060002090601f016020900481019282613f405760008555613f87565b82601f10613f5957805160ff1916838001178555613f87565b82800160010185558215613f87579182015b82811115613f86578251825591602001919060010190613f6b565b5b509050613f949190614059565b5090565b5080546000825590600052602060002090810190613fb69190614059565b50565b828054828255906000526020600020908101928215614048579160200282015b8281111561404757823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613fd9565b5b5090506140559190614059565b5090565b5b8082111561407257600081600090555060010161405a565b5090565b600061408961408484615123565b6150fe565b9050828152602081018484840111156140a5576140a4615641565b5b6140b08482856153cf565b509392505050565b60006140cb6140c684615154565b6150fe565b9050828152602081018484840111156140e7576140e6615641565b5b6140f28482856153cf565b509392505050565b60008135905061410981615d1a565b92915050565b60008083601f84011261412557614124615637565b5b8235905067ffffffffffffffff81111561414257614141615632565b5b60208301915083602082028301111561415e5761415d61563c565b5b9250929050565b60008083601f84011261417b5761417a615637565b5b8235905067ffffffffffffffff81111561419857614197615632565b5b6020830191508360208202830111156141b4576141b361563c565b5b9250929050565b6000813590506141ca81615d31565b92915050565b6000813590506141df81615d48565b92915050565b6000815190506141f481615d48565b92915050565b600082601f83011261420f5761420e615637565b5b813561421f848260208601614076565b91505092915050565b600082601f83011261423d5761423c615637565b5b813561424d8482602086016140b8565b91505092915050565b60008135905061426581615d5f565b92915050565b6000602082840312156142815761428061564b565b5b600061428f848285016140fa565b91505092915050565b600080604083850312156142af576142ae61564b565b5b60006142bd858286016140fa565b92505060206142ce858286016140fa565b9150509250929050565b6000806000606084860312156142f1576142f061564b565b5b60006142ff868287016140fa565b9350506020614310868287016140fa565b925050604061432186828701614256565b9150509250925092565b600080600080608085870312156143455761434461564b565b5b6000614353878288016140fa565b9450506020614364878288016140fa565b935050604061437587828801614256565b925050606085013567ffffffffffffffff81111561439657614395615646565b5b6143a2878288016141fa565b91505092959194509250565b600080604083850312156143c5576143c461564b565b5b60006143d3858286016140fa565b92505060206143e4858286016141bb565b9150509250929050565b600080604083850312156144055761440461564b565b5b6000614413858286016140fa565b925050602061442485828601614256565b9150509250929050565b600080602083850312156144455761444461564b565b5b600083013567ffffffffffffffff81111561446357614462615646565b5b61446f8582860161410f565b92509250509250929050565b600080600080604085870312156144955761449461564b565b5b600085013567ffffffffffffffff8111156144b3576144b2615646565b5b6144bf8782880161410f565b9450945050602085013567ffffffffffffffff8111156144e2576144e1615646565b5b6144ee87828801614165565b925092505092959194509250565b6000602082840312156145125761451161564b565b5b6000614520848285016141bb565b91505092915050565b60006020828403121561453f5761453e61564b565b5b600061454d848285016141d0565b91505092915050565b60006020828403121561456c5761456b61564b565b5b600061457a848285016141e5565b91505092915050565b6000602082840312156145995761459861564b565b5b600082013567ffffffffffffffff8111156145b7576145b6615646565b5b6145c384828501614228565b91505092915050565b6000602082840312156145e2576145e161564b565b5b60006145f084828501614256565b91505092915050565b600080604083850312156146105761460f61564b565b5b600061461e85828601614256565b925050602061462f85828601614256565b9150509250929050565b60006146458383614651565b60208301905092915050565b61465a81615336565b82525050565b61466981615336565b82525050565b600061467a826151aa565b61468481856151d8565b935061468f83615185565b8060005b838110156146c05781516146a78882614639565b97506146b2836151cb565b925050600181019050614693565b5085935050505092915050565b6146d681615348565b82525050565b60006146e7826151b5565b6146f181856151e9565b93506147018185602086016153de565b61470a81615650565b840191505092915050565b6000614720826151c0565b61472a8185615205565b935061473a8185602086016153de565b61474381615650565b840191505092915050565b6000614759826151c0565b6147638185615216565b93506147738185602086016153de565b80840191505092915050565b6000815461478c81615411565b6147968186615216565b945060018216600081146147b157600181146147c2576147f5565b60ff198316865281860193506147f5565b6147cb85615195565b60005b838110156147ed578154818901526001820191506020810190506147ce565b838801955050505b50505092915050565b600061480b602b83615205565b915061481682615661565b604082019050919050565b600061482e603283615205565b9150614839826156b0565b604082019050919050565b6000614851602683615205565b915061485c826156ff565b604082019050919050565b6000614874601c83615205565b915061487f8261574e565b602082019050919050565b6000614897601c83615205565b91506148a282615777565b602082019050919050565b60006148ba602483615205565b91506148c5826157a0565b604082019050919050565b60006148dd601983615205565b91506148e8826157ef565b602082019050919050565b6000614900602c83615205565b915061490b82615818565b604082019050919050565b6000614923603883615205565b915061492e82615867565b604082019050919050565b6000614946602a83615205565b9150614951826158b6565b604082019050919050565b6000614969602983615205565b915061497482615905565b604082019050919050565b600061498c601683615205565b915061499782615954565b602082019050919050565b60006149af602483615205565b91506149ba8261597d565b604082019050919050565b60006149d2601b83615205565b91506149dd826159cc565b602082019050919050565b60006149f5602083615205565b9150614a00826159f5565b602082019050919050565b6000614a18602c83615205565b9150614a2382615a1e565b604082019050919050565b6000614a3b602083615205565b9150614a4682615a6d565b602082019050919050565b6000614a5e601683615205565b9150614a6982615a96565b602082019050919050565b6000614a81602983615205565b9150614a8c82615abf565b604082019050919050565b6000614aa4602f83615205565b9150614aaf82615b0e565b604082019050919050565b6000614ac7602183615205565b9150614ad282615b5d565b604082019050919050565b6000614aea600e83615205565b9150614af582615bac565b602082019050919050565b6000614b0d6000836151fa565b9150614b1882615bd5565b600082019050919050565b6000614b30601283615205565b9150614b3b82615bd8565b602082019050919050565b6000614b53601e83615205565b9150614b5e82615c01565b602082019050919050565b6000614b76603183615205565b9150614b8182615c2a565b604082019050919050565b6000614b99602c83615205565b9150614ba482615c79565b604082019050919050565b6000614bbc601783615205565b9150614bc782615cc8565b602082019050919050565b6000614bdf601b83615205565b9150614bea82615cf1565b602082019050919050565b614bfe816153a0565b82525050565b614c0d816153b7565b82525050565b6000614c1f828661474e565b9150614c2b828561474e565b9150614c37828461477f565b9150819050949350505050565b6000614c4f82614b00565b9150819050919050565b6000602082019050614c6e6000830184614660565b92915050565b6000608082019050614c896000830187614660565b614c966020830186614660565b614ca36040830185614bf5565b8181036060830152614cb581846146dc565b905095945050505050565b6000604082019050614cd56000830185614660565b614ce26020830184614bf5565b9392505050565b60006020820190508181036000830152614d03818461466f565b905092915050565b6000602082019050614d2060008301846146cd565b92915050565b60006020820190508181036000830152614d408184614715565b905092915050565b60006020820190508181036000830152614d61816147fe565b9050919050565b60006020820190508181036000830152614d8181614821565b9050919050565b60006020820190508181036000830152614da181614844565b9050919050565b60006020820190508181036000830152614dc181614867565b9050919050565b60006020820190508181036000830152614de18161488a565b9050919050565b60006020820190508181036000830152614e01816148ad565b9050919050565b60006020820190508181036000830152614e21816148d0565b9050919050565b60006020820190508181036000830152614e41816148f3565b9050919050565b60006020820190508181036000830152614e6181614916565b9050919050565b60006020820190508181036000830152614e8181614939565b9050919050565b60006020820190508181036000830152614ea18161495c565b9050919050565b60006020820190508181036000830152614ec18161497f565b9050919050565b60006020820190508181036000830152614ee1816149a2565b9050919050565b60006020820190508181036000830152614f01816149c5565b9050919050565b60006020820190508181036000830152614f21816149e8565b9050919050565b60006020820190508181036000830152614f4181614a0b565b9050919050565b60006020820190508181036000830152614f6181614a2e565b9050919050565b60006020820190508181036000830152614f8181614a51565b9050919050565b60006020820190508181036000830152614fa181614a74565b9050919050565b60006020820190508181036000830152614fc181614a97565b9050919050565b60006020820190508181036000830152614fe181614aba565b9050919050565b6000602082019050818103600083015261500181614add565b9050919050565b6000602082019050818103600083015261502181614b23565b9050919050565b6000602082019050818103600083015261504181614b46565b9050919050565b6000602082019050818103600083015261506181614b69565b9050919050565b6000602082019050818103600083015261508181614b8c565b9050919050565b600060208201905081810360008301526150a181614baf565b9050919050565b600060208201905081810360008301526150c181614bd2565b9050919050565b60006020820190506150dd6000830184614bf5565b92915050565b60006020820190506150f86000830184614c04565b92915050565b6000615108615119565b90506151148282615443565b919050565b6000604051905090565b600067ffffffffffffffff82111561513e5761513d615603565b5b61514782615650565b9050602081019050919050565b600067ffffffffffffffff82111561516f5761516e615603565b5b61517882615650565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061522c826153a0565b9150615237836153a0565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561526c5761526b615518565b5b828201905092915050565b6000615282826153a0565b915061528d836153a0565b92508261529d5761529c615547565b5b828204905092915050565b60006152b3826153a0565b91506152be836153a0565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156152f7576152f6615518565b5b828202905092915050565b600061530d826153a0565b9150615318836153a0565b92508282101561532b5761532a615518565b5b828203905092915050565b600061534182615380565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b600060ff82169050919050565b60006bffffffffffffffffffffffff82169050919050565b82818337600083830152505050565b60005b838110156153fc5780820151818401526020810190506153e1565b8381111561540b576000848401525b50505050565b6000600282049050600182168061542957607f821691505b6020821081141561543d5761543c615576565b5b50919050565b61544c82615650565b810181811067ffffffffffffffff8211171561546b5761546a615603565b5b80604052505050565b600061547f826153a0565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156154b2576154b1615518565b5b600182019050919050565b60006154c8826153aa565b915060ff8214156154dc576154db615518565b5b600182019050919050565b60006154f2826153a0565b91506154fd836153a0565b92508261550d5761550c615547565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f6d6178204e465420706572206164647265737320657863656564656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f67656e65736973206d696e74206c696d69742065786365656465640000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f74686520636f6e74726163742069732070617573656400000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f746f6b656e496420657869737473000000000000000000000000000000000000600082015250565b50565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f43616e6e6f742062652063616c6c6564206279206120636f6e74726163740000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f6e65656420746f206d696e74206174206c656173742031204e46540000000000600082015250565b615d2381615336565b8114615d2e57600080fd5b50565b615d3a81615348565b8114615d4557600080fd5b50565b615d5181615354565b8114615d5c57600080fd5b50565b615d68816153a0565b8114615d7357600080fd5b5056fea264697066735822122033d952ed7bd6c92da7577a058f05eccc9c0fa51d6cfa82d182a33e5ae6203fa764736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
00000000000000000000000000000000000000000000000000000000000002b2
-----Decoded View---------------
Arg [0] : _royaltyFeesInBips (uint96): 690
-----Encoded View---------------
1 Constructor Arguments found :
Arg [0] : 00000000000000000000000000000000000000000000000000000000000002b2
Deployed Bytecode Sourcemap
45019:9023:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48061:254;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52554:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25728:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27421:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26944:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45472:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46661:97;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45806:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45590:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28480:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47048:156;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47650:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;38916:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46766:274;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52641:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52912:481;;;:::i;:::-;;28927:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45298:85;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39525:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45739:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52149:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45774:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25335:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45675:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24978:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11914:94;;;;;;;;;;;;;:::i;:::-;;45145:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45224:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51593:96;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52019:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51913:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53401:251;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;11263:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45550:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51815:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25897:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45870:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45390:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48323:2339;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;27801:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47879:174;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51423:69;;;;;;;;;;;;;:::i;:::-;;45706:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45262:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29183:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45911:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45630:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45180:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50670:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51697:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45512:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53660:379;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52261:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45430:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28199:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52750:154;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51500:85;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52420:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;12163:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48061:254;48200:4;48257:10;48242:25;;:11;:25;;;;:65;;;;48271:36;48295:11;48271:23;:36::i;:::-;48242:65;48222:85;;48061:254;;;:::o;52554:79::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52619:6:::1;52610;;:15;;;;;;;;;;;;;;;;;;52554:79:::0;:::o;25728:100::-;25782:13;25815:5;25808:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25728:100;:::o;27421:308::-;27542:7;27589:16;27597:7;27589;:16::i;:::-;27567:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;27697:15;:24;27713:7;27697:24;;;;;;;;;;;;;;;;;;;;;27690:31;;27421:308;;;:::o;26944:411::-;27025:13;27041:23;27056:7;27041:14;:23::i;:::-;27025:39;;27089:5;27083:11;;:2;:11;;;;27075:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27183:5;27167:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27192:37;27209:5;27216:12;:10;:12::i;:::-;27192:16;:37::i;:::-;27167:62;27145:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27326:21;27335:2;27339:7;27326:8;:21::i;:::-;27014:341;26944:411;;:::o;45472:33::-;;;;:::o;46661:97::-;46714:7;46741:9;;46734:16;;46661:97;:::o;45806:55::-;;;;;;;;;;;;;;;;;:::o;45590:33::-;;;;:::o;28480:376::-;28689:41;28708:12;:10;:12::i;:::-;28722:7;28689:18;:41::i;:::-;28667:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;28820:28;28830:4;28836:2;28840:7;28820:9;:28::i;:::-;28480:376;;;:::o;47048:156::-;47135:16;47176:20;47169:27;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47048:156;:::o;47650:221::-;47776:7;47785;47818:14;;;;;;;;;;;47834:28;47851:10;47834:16;:28::i;:::-;47810:53;;;;47650:221;;;;;:::o;38916:343::-;39058:7;39113:23;39130:5;39113:16;:23::i;:::-;39105:5;:31;39083:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39225:12;:19;39238:5;39225:19;;;;;;;;;;;;;;;:26;39245:5;39225:26;;;;;;;;;;;;39218:33;;38916:343;;;;:::o;46766:274::-;46825:4;46847:9;46859:1;46847:13;;46842:168;46866:20;:27;;;;46862:1;:31;46842:168;;;46946:5;46919:32;;:20;46940:1;46919:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;46915:84;;;46979:4;46972:11;;;;;46915:84;46895:3;;;;;:::i;:::-;;;;46842:168;;;;47027:5;47020:12;;46766:274;;;;:::o;52641:101::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52728:6:::1;52710:15;;:24;;;;;;;;;;;;;;;;;;52641:101:::0;:::o;52912:481::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53205:7:::1;53226;:5;:7::i;:::-;53218:21;;53247;53218:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;53204:69;;;53292:2;53284:11;;;::::0;::::1;;52957:436;52912:481::o:0;28927:185::-;29065:39;29082:4;29088:2;29092:7;29065:39;;;;;;;;;;;;:16;:39::i;:::-;28927:185;;;:::o;45298:85::-;;;;;;;;;;;;;:::o;39525:320::-;39645:7;39700:30;:28;:30::i;:::-;39692:5;:38;39670:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;39820:10;39831:5;39820:17;;;;;;;;:::i;:::-;;;;;;;;;;39813:24;;39525:320;;;:::o;45739:28::-;;;;;;;;;;;;;:::o;52149:104::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52234:11:::1;52224:7;:21;;;;;;;;;;;;:::i;:::-;;52149:104:::0;:::o;45774:25::-;;;;;;;;;;;;;:::o;25335:326::-;25452:7;25477:13;25493:7;:16;25501:7;25493:16;;;;;;;;;;;;;;;;;;;;;25477:32;;25559:1;25542:19;;:5;:19;;;;25520:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;25648:5;25641:12;;;25335:326;;;:::o;45675:24::-;;;;:::o;24978:295::-;25095:7;25159:1;25142:19;;:5;:19;;;;25120:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25249:9;:16;25259:5;25249:16;;;;;;;;;;;;;;;;25242:23;;24978:295;;;:::o;11914:94::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11979:21:::1;11997:1;11979:9;:21::i;:::-;11914:94::o:0;45145:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45224:31::-;;;;;;;;;;;;;:::o;51593:96::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51676:5:::1;51661:12;:20;;;;51593:96:::0;:::o;52019:122::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52116:17:::1;52100:13;:33;;;;52019:122:::0;:::o;51913:98::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51992:11:::1;51982:7;:21;;;;51913:98:::0;:::o;53401:251::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53495:17:::1;53503:8;53495:7;:17::i;:::-;53494:18;53486:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;53542:20;:34;53563:12;53542:34;;;;;;;;;;;;;;;;:36;;;;;;;;;:::i;:::-;;;;;;53589:33;53599:12;53613:8;53589:9;:33::i;:::-;53633:9;;:11;;;;;;;;;:::i;:::-;;;;;;53401:251:::0;;:::o;11263:87::-;11309:7;11336:6;;;;;;;;;;;11329:13;;11263:87;:::o;45550:33::-;;;;:::o;51815:90::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51888:9:::1;51880:5;:17;;;;51815:90:::0;:::o;25897:104::-;25953:13;25986:7;25979:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25897:104;:::o;45870:34::-;;;;;;;;;;;;;:::o;45390:33::-;;;;:::o;48323:2339::-;46455:10;46442:23;;:9;:23;;;46434:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;48406:6:::1;;;;;;;;;;;48405:7;48397:42;;;;;;;;;;;;:::i;:::-;;;;;;;;;48450:14;48467:13;:11;:13::i;:::-;48450:30;;48513:1;48499:11;:15;48491:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;48557:24;48584:20;:32;48605:10;48584:32;;;;;;;;;;;;;;;;48557:59;;48647:7;:5;:7::i;:::-;48633:21;;:10;:21;;;48629:1838;;48676:7;;;;;;;;;;;48671:1785;;48727:4;48708:23;;:15;;;;;;;;;;;:23;;;48704:1147;;;48790:25;48804:10;48790:13;:25::i;:::-;48756:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;48945:11;;48930;48921:6;:20;;;;:::i;:::-;:35;;48913:44;;;::::0;::::1;;49037:11;49027:7;;:21;;;;:::i;:::-;49014:9;:34;;48980:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;48704:1147;;;49225:9;;49210:11;49201:6;:20;;;;:::i;:::-;:33;;49167:141;;;;;;;;;;;;:::i;:::-;;;;;;;;;49388:11;49380:5;;:19;;;;:::i;:::-;49367:9;:32;;49333:136;;;;;;;;;;;;:::i;:::-;;;;;;;;;49560:18;;49545:11;49526:16;:30;;;;:::i;:::-;:52;;49492:166;;;;;;;;;;;;:::i;:::-;;;;;;;;;49730:13;;49715:11;:28;;49681:150;;;;;;;;;;;;:::i;:::-;;;;;;;;;48704:1147;48671:1785;;;49945:12;;49930:11;49921:6;:20;;;;:::i;:::-;:36;;49891:137;;;;;;;;;;;;:::i;:::-;;;;;;;;;50076:11;50068:5;;:19;;;;:::i;:::-;50055:9;:32;;50047:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;50193:18;;50178:11;50159:16;:30;;;;:::i;:::-;:52;;50129:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;50347:13;;50332:11;:28;;50302:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;48671:1785;48629:1838;50484:7;50494:1;50484:11;;50479:176;50502:11;50497:1;:16;;;50479:176;;50535:20;:32;50556:10;50535:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;50584:33;50594:10;50615:1;50606:10;;:6;:10;;;;:::i;:::-;50584:9;:33::i;:::-;50632:9;;:11;;;;;;;;;:::i;:::-;;;;;;50515:3;;;;;:::i;:::-;;;;50479:176;;;;48386:2276;;48323:2339:::0;:::o;27801:327::-;27948:12;:10;:12::i;:::-;27936:24;;:8;:24;;;;27928:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28048:8;28003:18;:32;28022:12;:10;:12::i;:::-;28003:32;;;;;;;;;;;;;;;:42;28036:8;28003:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28101:8;28072:48;;28087:12;:10;:12::i;:::-;28072:48;;;28111:8;28072:48;;;;;;:::i;:::-;;;;;;;;27801:327;;:::o;47879:174::-;47973:7;48028:17;;;;;;;;;;;48005:40;;48019:5;48006:10;:18;;;;:::i;:::-;48005:40;;;;:::i;:::-;47998:47;;47879:174;;;:::o;51423:69::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51480:4:::1;51469:8;;:15;;;;;;;;;;;;;;;;;;51423:69::o:0;45706:26::-;;;;;;;;;;;;;:::o;45262:29::-;;;;;;;;;;;;;:::o;29183:365::-;29372:41;29391:12;:10;:12::i;:::-;29405:7;29372:18;:41::i;:::-;29350:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29501:39;29515:4;29521:2;29525:7;29534:5;29501:13;:39::i;:::-;29183:365;;;;:::o;45911:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;45630:38::-;;;;:::o;45180:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50670:725::-;50788:13;50841:16;50849:7;50841;:16::i;:::-;50819:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50961:5;50949:17;;:8;;;;;;;;;;;:17;;;50945:71;;;50990:14;50983:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50945:71;51028:28;51059:10;:8;:10::i;:::-;51028:41;;51131:1;51106:14;51100:28;:32;:287;;;;;;;;;;;;;;;;;51224:14;51265:18;:7;:16;:18::i;:::-;51310:13;51181:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;51100:287;51080:307;;;50670:725;;;;:::o;51697:110::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51793:6:::1;51772:18;:27;;;;51697:110:::0;:::o;45512:31::-;;;;:::o;53660:379::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;53932:7:::1;53927:105;53945:10;;:17;;53941:1;:21;;;53927:105;;;53984:36;53992:10;;54003:1;53992:13;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;:::i;:::-;54007:9;;54017:1;54007:12;;;;;;;;;:::i;:::-;;;;;;;;53984:7;:36::i;:::-;53964:3;;;;;:::i;:::-;;;;53927:105;;;;53660:379:::0;;;;:::o;52261:151::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52387:17:::1;52371:13;:33;;;;;;;;;;;;:::i;:::-;;52261:151:::0;:::o;45430:35::-;;;;:::o;28199:214::-;28341:4;28370:18;:25;28389:5;28370:25;;;;;;;;;;;;;;;:35;28396:8;28370:35;;;;;;;;;;;;;;;;;;;;;;;;;28363:42;;28199:214;;;;:::o;52750:154::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52836:20:::1;;52829:27;;;;:::i;:::-;52890:6;;52867:20;:29;;;;;;;:::i;:::-;;52750:154:::0;;:::o;51500:85::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51571:6:::1;51561:7;;:16;;;;;;;;;;;;;;;;;;51500:85:::0;:::o;52420:126::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52523:15:::1;52506:14;:32;;;;;;;;;;;;:::i;:::-;;52420:126:::0;:::o;12163:229::-;11494:12;:10;:12::i;:::-;11483:23;;:7;:5;:7::i;:::-;:23;;;11475:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12286:1:::1;12266:22;;:8;:22;;;;12244:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;12365:19;12375:8;12365:9;:19::i;:::-;12163:229:::0;:::o;38532:300::-;38679:4;38736:35;38721:50;;;:11;:50;;;;:103;;;;38788:36;38812:11;38788:23;:36::i;:::-;38721:103;38701:123;;38532:300;;;:::o;10049:98::-;10102:7;10129:10;10122:17;;10049:98;:::o;31095:127::-;31160:4;31212:1;31184:30;;:7;:16;31192:7;31184:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31177:37;;31095:127;;;:::o;35218:174::-;35320:2;35293:15;:24;35309:7;35293:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35376:7;35372:2;35338:46;;35347:23;35362:7;35347:14;:23::i;:::-;35338:46;;;;;;;;;;;;35218:174;;:::o;31389:452::-;31518:4;31562:16;31570:7;31562;:16::i;:::-;31540:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;31661:13;31677:23;31692:7;31677:14;:23::i;:::-;31661:39;;31730:5;31719:16;;:7;:16;;;:64;;;;31776:7;31752:31;;:20;31764:7;31752:11;:20::i;:::-;:31;;;31719:64;:113;;;;31800:32;31817:5;31824:7;31800:16;:32::i;:::-;31719:113;31711:122;;;31389:452;;;;:::o;34485:615::-;34658:4;34631:31;;:23;34646:7;34631:14;:23::i;:::-;:31;;;34609:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;34764:1;34750:16;;:2;:16;;;;34742:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34820:39;34841:4;34847:2;34851:7;34820:20;:39::i;:::-;34924:29;34941:1;34945:7;34924:8;:29::i;:::-;34985:1;34966:9;:15;34976:4;34966:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35014:1;34997:9;:13;35007:2;34997:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35045:2;35026:7;:16;35034:7;35026:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35084:7;35080:2;35065:27;;35074:4;35065:27;;;;;;;;;;;;34485:615;;;:::o;39335:113::-;39396:7;39423:10;:17;;;;39416:24;;39335:113;:::o;12400:173::-;12456:16;12475:6;;;;;;;;;;;12456:25;;12501:8;12492:6;;:17;;;;;;;;;;;;;;;;;;12556:8;12525:40;;12546:8;12525:40;;;;;;;;;;;;12445:128;12400:173;:::o;32183:110::-;32259:26;32269:2;32273:7;32259:26;;;;;;;;;;;;:9;:26::i;:::-;32183:110;;:::o;30430:352::-;30587:28;30597:4;30603:2;30607:7;30587:9;:28::i;:::-;30648:48;30671:4;30677:2;30681:7;30690:5;30648:22;:48::i;:::-;30626:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;30430:352;;;;:::o;46545:108::-;46605:13;46638:7;46631:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46545:108;:::o;12869:723::-;12925:13;13155:1;13146:5;:10;13142:53;;;13173:10;;;;;;;;;;;;;;;;;;;;;13142:53;13205:12;13220:5;13205:20;;13236:14;13261:78;13276:1;13268:4;:9;13261:78;;13294:8;;;;;:::i;:::-;;;;13325:2;13317:10;;;;;:::i;:::-;;;13261:78;;;13349:19;13381:6;13371:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13349:39;;13399:154;13415:1;13406:5;:10;13399:154;;13443:1;13433:11;;;;;:::i;:::-;;;13510:2;13502:5;:10;;;;:::i;:::-;13489:2;:24;;;;:::i;:::-;13476:39;;13459:6;13466;13459:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;13539:2;13530:11;;;;;:::i;:::-;;;13399:154;;;13577:6;13563:21;;;;;12869:723;;;;:::o;24559:355::-;24706:4;24763:25;24748:40;;;:11;:40;;;;:105;;;;24820:33;24805:48;;;:11;:48;;;;24748:105;:158;;;;24870:36;24894:11;24870:23;:36::i;:::-;24748:158;24728:178;;24559:355;;;:::o;47427:215::-;47589:45;47616:4;47622:2;47626:7;47589:26;:45::i;:::-;47427:215;;;:::o;32520:321::-;32650:18;32656:2;32660:7;32650:5;:18::i;:::-;32701:54;32732:1;32736:2;32740:7;32749:5;32701:22;:54::i;:::-;32679:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32520:321;;;:::o;35957:980::-;36112:4;36133:15;:2;:13;;;:15::i;:::-;36129:801;;;36202:2;36186:36;;;36245:12;:10;:12::i;:::-;36280:4;36307:7;36337:5;36186:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36165:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36561:1;36544:6;:13;:18;36540:320;;;36587:108;;;;;;;;;;:::i;:::-;;;;;;;;36540:320;36810:6;36804:13;36795:6;36791:2;36787:15;36780:38;36165:710;36435:41;;;36425:51;;;:6;:51;;;;36418:58;;;;;36129:801;36914:4;36907:11;;35957:980;;;;;;;:::o;9232:207::-;9362:4;9406:25;9391:40;;;:11;:40;;;;9384:47;;9232:207;;;:::o;40458:589::-;40602:45;40629:4;40635:2;40639:7;40602:26;:45::i;:::-;40680:1;40664:18;;:4;:18;;;40660:187;;;40699:40;40731:7;40699:31;:40::i;:::-;40660:187;;;40769:2;40761:10;;:4;:10;;;40757:90;;40788:47;40821:4;40827:7;40788:32;:47::i;:::-;40757:90;40660:187;40875:1;40861:16;;:2;:16;;;40857:183;;;40894:45;40931:7;40894:36;:45::i;:::-;40857:183;;;40967:4;40961:10;;:2;:10;;;40957:83;;40988:40;41016:2;41020:7;40988:27;:40::i;:::-;40957:83;40857:183;40458:589;;;:::o;33177:382::-;33271:1;33257:16;;:2;:16;;;;33249:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33330:16;33338:7;33330;:16::i;:::-;33329:17;33321:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33392:45;33421:1;33425:2;33429:7;33392:20;:45::i;:::-;33467:1;33450:9;:13;33460:2;33450:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33498:2;33479:7;:16;33487:7;33479:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33543:7;33539:2;33518:33;;33535:1;33518:33;;;;;;;;;;;;33177:382;;:::o;15458:387::-;15518:4;15726:12;15793:7;15781:20;15773:28;;15836:1;15829:4;:8;15822:15;;;15458:387;;;:::o;37509:126::-;;;;:::o;41770:164::-;41874:10;:17;;;;41847:15;:24;41863:7;41847:24;;;;;;;;;;;:44;;;;41902:10;41918:7;41902:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41770:164;:::o;42561:1002::-;42841:22;42891:1;42866:22;42883:4;42866:16;:22::i;:::-;:26;;;;:::i;:::-;42841:51;;42903:18;42924:17;:26;42942:7;42924:26;;;;;;;;;;;;42903:47;;43071:14;43057:10;:28;43053:328;;43102:19;43124:12;:18;43137:4;43124:18;;;;;;;;;;;;;;;:34;43143:14;43124:34;;;;;;;;;;;;43102:56;;43208:11;43175:12;:18;43188:4;43175:18;;;;;;;;;;;;;;;:30;43194:10;43175:30;;;;;;;;;;;:44;;;;43325:10;43292:17;:30;43310:11;43292:30;;;;;;;;;;;:43;;;;43087:294;43053:328;43477:17;:26;43495:7;43477:26;;;;;;;;;;;43470:33;;;43521:12;:18;43534:4;43521:18;;;;;;;;;;;;;;;:34;43540:14;43521:34;;;;;;;;;;;43514:41;;;42656:907;;42561:1002;;:::o;43858:1079::-;44111:22;44156:1;44136:10;:17;;;;:21;;;;:::i;:::-;44111:46;;44168:18;44189:15;:24;44205:7;44189:24;;;;;;;;;;;;44168:45;;44540:19;44562:10;44573:14;44562:26;;;;;;;;:::i;:::-;;;;;;;;;;44540:48;;44626:11;44601:10;44612;44601:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;44737:10;44706:15;:28;44722:11;44706:28;;;;;;;;;;;:41;;;;44878:15;:24;44894:7;44878:24;;;;;;;;;;;44871:31;;;44913:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;43929:1008;;;43858:1079;:::o;41348:221::-;41433:14;41450:20;41467:2;41450:16;:20::i;:::-;41433:37;;41508:7;41481:12;:16;41494:2;41481:16;;;;;;;;;;;;;;;:24;41498:6;41481:24;;;;;;;;;;;:34;;;;41555:6;41526:17;:26;41544:7;41526:26;;;;;;;;;;;:35;;;;41422:147;41348:221;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1594:::-;1667:8;1677:6;1727:3;1720:4;1712:6;1708:17;1704:27;1694:122;;1735:79;;:::i;:::-;1694:122;1848:6;1835:20;1825:30;;1878:18;1870:6;1867:30;1864:117;;;1900:79;;:::i;:::-;1864:117;2014:4;2006:6;2002:17;1990:29;;2068:3;2060:4;2052:6;2048:17;2038:8;2034:32;2031:41;2028:128;;;2075:79;;:::i;:::-;2028:128;1594:568;;;;;:::o;2168:133::-;2211:5;2249:6;2236:20;2227:29;;2265:30;2289:5;2265:30;:::i;:::-;2168:133;;;;:::o;2307:137::-;2352:5;2390:6;2377:20;2368:29;;2406:32;2432:5;2406:32;:::i;:::-;2307:137;;;;:::o;2450:141::-;2506:5;2537:6;2531:13;2522:22;;2553:32;2579:5;2553:32;:::i;:::-;2450:141;;;;:::o;2610:338::-;2665:5;2714:3;2707:4;2699:6;2695:17;2691:27;2681:122;;2722:79;;:::i;:::-;2681:122;2839:6;2826:20;2864:78;2938:3;2930:6;2923:4;2915:6;2911:17;2864:78;:::i;:::-;2855:87;;2671:277;2610:338;;;;:::o;2968:340::-;3024:5;3073:3;3066:4;3058:6;3054:17;3050:27;3040:122;;3081:79;;:::i;:::-;3040:122;3198:6;3185:20;3223:79;3298:3;3290:6;3283:4;3275:6;3271:17;3223:79;:::i;:::-;3214:88;;3030:278;2968:340;;;;:::o;3314:139::-;3360:5;3398:6;3385:20;3376:29;;3414:33;3441:5;3414:33;:::i;:::-;3314:139;;;;:::o;3459:329::-;3518:6;3567:2;3555:9;3546:7;3542:23;3538:32;3535:119;;;3573:79;;:::i;:::-;3535:119;3693:1;3718:53;3763:7;3754:6;3743:9;3739:22;3718:53;:::i;:::-;3708:63;;3664:117;3459:329;;;;:::o;3794:474::-;3862:6;3870;3919:2;3907:9;3898:7;3894:23;3890:32;3887:119;;;3925:79;;:::i;:::-;3887:119;4045:1;4070:53;4115:7;4106:6;4095:9;4091:22;4070:53;:::i;:::-;4060:63;;4016:117;4172:2;4198:53;4243:7;4234:6;4223:9;4219:22;4198:53;:::i;:::-;4188:63;;4143:118;3794:474;;;;;:::o;4274:619::-;4351:6;4359;4367;4416:2;4404:9;4395:7;4391:23;4387:32;4384:119;;;4422:79;;:::i;:::-;4384:119;4542:1;4567:53;4612:7;4603:6;4592:9;4588:22;4567:53;:::i;:::-;4557:63;;4513:117;4669:2;4695:53;4740:7;4731:6;4720:9;4716:22;4695:53;:::i;:::-;4685:63;;4640:118;4797:2;4823:53;4868:7;4859:6;4848:9;4844:22;4823:53;:::i;:::-;4813:63;;4768:118;4274:619;;;;;:::o;4899:943::-;4994:6;5002;5010;5018;5067:3;5055:9;5046:7;5042:23;5038:33;5035:120;;;5074:79;;:::i;:::-;5035:120;5194:1;5219:53;5264:7;5255:6;5244:9;5240:22;5219:53;:::i;:::-;5209:63;;5165:117;5321:2;5347:53;5392:7;5383:6;5372:9;5368:22;5347:53;:::i;:::-;5337:63;;5292:118;5449:2;5475:53;5520:7;5511:6;5500:9;5496:22;5475:53;:::i;:::-;5465:63;;5420:118;5605:2;5594:9;5590:18;5577:32;5636:18;5628:6;5625:30;5622:117;;;5658:79;;:::i;:::-;5622:117;5763:62;5817:7;5808:6;5797:9;5793:22;5763:62;:::i;:::-;5753:72;;5548:287;4899:943;;;;;;;:::o;5848:468::-;5913:6;5921;5970:2;5958:9;5949:7;5945:23;5941:32;5938:119;;;5976:79;;:::i;:::-;5938:119;6096:1;6121:53;6166:7;6157:6;6146:9;6142:22;6121:53;:::i;:::-;6111:63;;6067:117;6223:2;6249:50;6291:7;6282:6;6271:9;6267:22;6249:50;:::i;:::-;6239:60;;6194:115;5848:468;;;;;:::o;6322:474::-;6390:6;6398;6447:2;6435:9;6426:7;6422:23;6418:32;6415:119;;;6453:79;;:::i;:::-;6415:119;6573:1;6598:53;6643:7;6634:6;6623:9;6619:22;6598:53;:::i;:::-;6588:63;;6544:117;6700:2;6726:53;6771:7;6762:6;6751:9;6747:22;6726:53;:::i;:::-;6716:63;;6671:118;6322:474;;;;;:::o;6802:559::-;6888:6;6896;6945:2;6933:9;6924:7;6920:23;6916:32;6913:119;;;6951:79;;:::i;:::-;6913:119;7099:1;7088:9;7084:17;7071:31;7129:18;7121:6;7118:30;7115:117;;;7151:79;;:::i;:::-;7115:117;7264:80;7336:7;7327:6;7316:9;7312:22;7264:80;:::i;:::-;7246:98;;;;7042:312;6802:559;;;;;:::o;7367:934::-;7489:6;7497;7505;7513;7562:2;7550:9;7541:7;7537:23;7533:32;7530:119;;;7568:79;;:::i;:::-;7530:119;7716:1;7705:9;7701:17;7688:31;7746:18;7738:6;7735:30;7732:117;;;7768:79;;:::i;:::-;7732:117;7881:80;7953:7;7944:6;7933:9;7929:22;7881:80;:::i;:::-;7863:98;;;;7659:312;8038:2;8027:9;8023:18;8010:32;8069:18;8061:6;8058:30;8055:117;;;8091:79;;:::i;:::-;8055:117;8204:80;8276:7;8267:6;8256:9;8252:22;8204:80;:::i;:::-;8186:98;;;;7981:313;7367:934;;;;;;;:::o;8307:323::-;8363:6;8412:2;8400:9;8391:7;8387:23;8383:32;8380:119;;;8418:79;;:::i;:::-;8380:119;8538:1;8563:50;8605:7;8596:6;8585:9;8581:22;8563:50;:::i;:::-;8553:60;;8509:114;8307:323;;;;:::o;8636:327::-;8694:6;8743:2;8731:9;8722:7;8718:23;8714:32;8711:119;;;8749:79;;:::i;:::-;8711:119;8869:1;8894:52;8938:7;8929:6;8918:9;8914:22;8894:52;:::i;:::-;8884:62;;8840:116;8636:327;;;;:::o;8969:349::-;9038:6;9087:2;9075:9;9066:7;9062:23;9058:32;9055:119;;;9093:79;;:::i;:::-;9055:119;9213:1;9238:63;9293:7;9284:6;9273:9;9269:22;9238:63;:::i;:::-;9228:73;;9184:127;8969:349;;;;:::o;9324:509::-;9393:6;9442:2;9430:9;9421:7;9417:23;9413:32;9410:119;;;9448:79;;:::i;:::-;9410:119;9596:1;9585:9;9581:17;9568:31;9626:18;9618:6;9615:30;9612:117;;;9648:79;;:::i;:::-;9612:117;9753:63;9808:7;9799:6;9788:9;9784:22;9753:63;:::i;:::-;9743:73;;9539:287;9324:509;;;;:::o;9839:329::-;9898:6;9947:2;9935:9;9926:7;9922:23;9918:32;9915:119;;;9953:79;;:::i;:::-;9915:119;10073:1;10098:53;10143:7;10134:6;10123:9;10119:22;10098:53;:::i;:::-;10088:63;;10044:117;9839:329;;;;:::o;10174:474::-;10242:6;10250;10299:2;10287:9;10278:7;10274:23;10270:32;10267:119;;;10305:79;;:::i;:::-;10267:119;10425:1;10450:53;10495:7;10486:6;10475:9;10471:22;10450:53;:::i;:::-;10440:63;;10396:117;10552:2;10578:53;10623:7;10614:6;10603:9;10599:22;10578:53;:::i;:::-;10568:63;;10523:118;10174:474;;;;;:::o;10654:179::-;10723:10;10744:46;10786:3;10778:6;10744:46;:::i;:::-;10822:4;10817:3;10813:14;10799:28;;10654:179;;;;:::o;10839:108::-;10916:24;10934:5;10916:24;:::i;:::-;10911:3;10904:37;10839:108;;:::o;10953:118::-;11040:24;11058:5;11040:24;:::i;:::-;11035:3;11028:37;10953:118;;:::o;11107:732::-;11226:3;11255:54;11303:5;11255:54;:::i;:::-;11325:86;11404:6;11399:3;11325:86;:::i;:::-;11318:93;;11435:56;11485:5;11435:56;:::i;:::-;11514:7;11545:1;11530:284;11555:6;11552:1;11549:13;11530:284;;;11631:6;11625:13;11658:63;11717:3;11702:13;11658:63;:::i;:::-;11651:70;;11744:60;11797:6;11744:60;:::i;:::-;11734:70;;11590:224;11577:1;11574;11570:9;11565:14;;11530:284;;;11534:14;11830:3;11823:10;;11231:608;;;11107:732;;;;:::o;11845:109::-;11926:21;11941:5;11926:21;:::i;:::-;11921:3;11914:34;11845:109;;:::o;11960:360::-;12046:3;12074:38;12106:5;12074:38;:::i;:::-;12128:70;12191:6;12186:3;12128:70;:::i;:::-;12121:77;;12207:52;12252:6;12247:3;12240:4;12233:5;12229:16;12207:52;:::i;:::-;12284:29;12306:6;12284:29;:::i;:::-;12279:3;12275:39;12268:46;;12050:270;11960:360;;;;:::o;12326:364::-;12414:3;12442:39;12475:5;12442:39;:::i;:::-;12497:71;12561:6;12556:3;12497:71;:::i;:::-;12490:78;;12577:52;12622:6;12617:3;12610:4;12603:5;12599:16;12577:52;:::i;:::-;12654:29;12676:6;12654:29;:::i;:::-;12649:3;12645:39;12638:46;;12418:272;12326:364;;;;:::o;12696:377::-;12802:3;12830:39;12863:5;12830:39;:::i;:::-;12885:89;12967:6;12962:3;12885:89;:::i;:::-;12878:96;;12983:52;13028:6;13023:3;13016:4;13009:5;13005:16;12983:52;:::i;:::-;13060:6;13055:3;13051:16;13044:23;;12806:267;12696:377;;;;:::o;13103:845::-;13206:3;13243:5;13237:12;13272:36;13298:9;13272:36;:::i;:::-;13324:89;13406:6;13401:3;13324:89;:::i;:::-;13317:96;;13444:1;13433:9;13429:17;13460:1;13455:137;;;;13606:1;13601:341;;;;13422:520;;13455:137;13539:4;13535:9;13524;13520:25;13515:3;13508:38;13575:6;13570:3;13566:16;13559:23;;13455:137;;13601:341;13668:38;13700:5;13668:38;:::i;:::-;13728:1;13742:154;13756:6;13753:1;13750:13;13742:154;;;13830:7;13824:14;13820:1;13815:3;13811:11;13804:35;13880:1;13871:7;13867:15;13856:26;;13778:4;13775:1;13771:12;13766:17;;13742:154;;;13925:6;13920:3;13916:16;13909:23;;13608:334;;13422:520;;13210:738;;13103:845;;;;:::o;13954:366::-;14096:3;14117:67;14181:2;14176:3;14117:67;:::i;:::-;14110:74;;14193:93;14282:3;14193:93;:::i;:::-;14311:2;14306:3;14302:12;14295:19;;13954:366;;;:::o;14326:::-;14468:3;14489:67;14553:2;14548:3;14489:67;:::i;:::-;14482:74;;14565:93;14654:3;14565:93;:::i;:::-;14683:2;14678:3;14674:12;14667:19;;14326:366;;;:::o;14698:::-;14840:3;14861:67;14925:2;14920:3;14861:67;:::i;:::-;14854:74;;14937:93;15026:3;14937:93;:::i;:::-;15055:2;15050:3;15046:12;15039:19;;14698:366;;;:::o;15070:::-;15212:3;15233:67;15297:2;15292:3;15233:67;:::i;:::-;15226:74;;15309:93;15398:3;15309:93;:::i;:::-;15427:2;15422:3;15418:12;15411:19;;15070:366;;;:::o;15442:::-;15584:3;15605:67;15669:2;15664:3;15605:67;:::i;:::-;15598:74;;15681:93;15770:3;15681:93;:::i;:::-;15799:2;15794:3;15790:12;15783:19;;15442:366;;;:::o;15814:::-;15956:3;15977:67;16041:2;16036:3;15977:67;:::i;:::-;15970:74;;16053:93;16142:3;16053:93;:::i;:::-;16171:2;16166:3;16162:12;16155:19;;15814:366;;;:::o;16186:::-;16328:3;16349:67;16413:2;16408:3;16349:67;:::i;:::-;16342:74;;16425:93;16514:3;16425:93;:::i;:::-;16543:2;16538:3;16534:12;16527:19;;16186:366;;;:::o;16558:::-;16700:3;16721:67;16785:2;16780:3;16721:67;:::i;:::-;16714:74;;16797:93;16886:3;16797:93;:::i;:::-;16915:2;16910:3;16906:12;16899:19;;16558:366;;;:::o;16930:::-;17072:3;17093:67;17157:2;17152:3;17093:67;:::i;:::-;17086:74;;17169:93;17258:3;17169:93;:::i;:::-;17287:2;17282:3;17278:12;17271:19;;16930:366;;;:::o;17302:::-;17444:3;17465:67;17529:2;17524:3;17465:67;:::i;:::-;17458:74;;17541:93;17630:3;17541:93;:::i;:::-;17659:2;17654:3;17650:12;17643:19;;17302:366;;;:::o;17674:::-;17816:3;17837:67;17901:2;17896:3;17837:67;:::i;:::-;17830:74;;17913:93;18002:3;17913:93;:::i;:::-;18031:2;18026:3;18022:12;18015:19;;17674:366;;;:::o;18046:::-;18188:3;18209:67;18273:2;18268:3;18209:67;:::i;:::-;18202:74;;18285:93;18374:3;18285:93;:::i;:::-;18403:2;18398:3;18394:12;18387:19;;18046:366;;;:::o;18418:::-;18560:3;18581:67;18645:2;18640:3;18581:67;:::i;:::-;18574:74;;18657:93;18746:3;18657:93;:::i;:::-;18775:2;18770:3;18766:12;18759:19;;18418:366;;;:::o;18790:::-;18932:3;18953:67;19017:2;19012:3;18953:67;:::i;:::-;18946:74;;19029:93;19118:3;19029:93;:::i;:::-;19147:2;19142:3;19138:12;19131:19;;18790:366;;;:::o;19162:::-;19304:3;19325:67;19389:2;19384:3;19325:67;:::i;:::-;19318:74;;19401:93;19490:3;19401:93;:::i;:::-;19519:2;19514:3;19510:12;19503:19;;19162:366;;;:::o;19534:::-;19676:3;19697:67;19761:2;19756:3;19697:67;:::i;:::-;19690:74;;19773:93;19862:3;19773:93;:::i;:::-;19891:2;19886:3;19882:12;19875:19;;19534:366;;;:::o;19906:::-;20048:3;20069:67;20133:2;20128:3;20069:67;:::i;:::-;20062:74;;20145:93;20234:3;20145:93;:::i;:::-;20263:2;20258:3;20254:12;20247:19;;19906:366;;;:::o;20278:::-;20420:3;20441:67;20505:2;20500:3;20441:67;:::i;:::-;20434:74;;20517:93;20606:3;20517:93;:::i;:::-;20635:2;20630:3;20626:12;20619:19;;20278:366;;;:::o;20650:::-;20792:3;20813:67;20877:2;20872:3;20813:67;:::i;:::-;20806:74;;20889:93;20978:3;20889:93;:::i;:::-;21007:2;21002:3;20998:12;20991:19;;20650:366;;;:::o;21022:::-;21164:3;21185:67;21249:2;21244:3;21185:67;:::i;:::-;21178:74;;21261:93;21350:3;21261:93;:::i;:::-;21379:2;21374:3;21370:12;21363:19;;21022:366;;;:::o;21394:::-;21536:3;21557:67;21621:2;21616:3;21557:67;:::i;:::-;21550:74;;21633:93;21722:3;21633:93;:::i;:::-;21751:2;21746:3;21742:12;21735:19;;21394:366;;;:::o;21766:::-;21908:3;21929:67;21993:2;21988:3;21929:67;:::i;:::-;21922:74;;22005:93;22094:3;22005:93;:::i;:::-;22123:2;22118:3;22114:12;22107:19;;21766:366;;;:::o;22138:398::-;22297:3;22318:83;22399:1;22394:3;22318:83;:::i;:::-;22311:90;;22410:93;22499:3;22410:93;:::i;:::-;22528:1;22523:3;22519:11;22512:18;;22138:398;;;:::o;22542:366::-;22684:3;22705:67;22769:2;22764:3;22705:67;:::i;:::-;22698:74;;22781:93;22870:3;22781:93;:::i;:::-;22899:2;22894:3;22890:12;22883:19;;22542:366;;;:::o;22914:::-;23056:3;23077:67;23141:2;23136:3;23077:67;:::i;:::-;23070:74;;23153:93;23242:3;23153:93;:::i;:::-;23271:2;23266:3;23262:12;23255:19;;22914:366;;;:::o;23286:::-;23428:3;23449:67;23513:2;23508:3;23449:67;:::i;:::-;23442:74;;23525:93;23614:3;23525:93;:::i;:::-;23643:2;23638:3;23634:12;23627:19;;23286:366;;;:::o;23658:::-;23800:3;23821:67;23885:2;23880:3;23821:67;:::i;:::-;23814:74;;23897:93;23986:3;23897:93;:::i;:::-;24015:2;24010:3;24006:12;23999:19;;23658:366;;;:::o;24030:::-;24172:3;24193:67;24257:2;24252:3;24193:67;:::i;:::-;24186:74;;24269:93;24358:3;24269:93;:::i;:::-;24387:2;24382:3;24378:12;24371:19;;24030:366;;;:::o;24402:::-;24544:3;24565:67;24629:2;24624:3;24565:67;:::i;:::-;24558:74;;24641:93;24730:3;24641:93;:::i;:::-;24759:2;24754:3;24750:12;24743:19;;24402:366;;;:::o;24774:118::-;24861:24;24879:5;24861:24;:::i;:::-;24856:3;24849:37;24774:118;;:::o;24898:115::-;24983:23;25000:5;24983:23;:::i;:::-;24978:3;24971:36;24898:115;;:::o;25019:589::-;25244:3;25266:95;25357:3;25348:6;25266:95;:::i;:::-;25259:102;;25378:95;25469:3;25460:6;25378:95;:::i;:::-;25371:102;;25490:92;25578:3;25569:6;25490:92;:::i;:::-;25483:99;;25599:3;25592:10;;25019:589;;;;;;:::o;25614:379::-;25798:3;25820:147;25963:3;25820:147;:::i;:::-;25813:154;;25984:3;25977:10;;25614:379;;;:::o;25999:222::-;26092:4;26130:2;26119:9;26115:18;26107:26;;26143:71;26211:1;26200:9;26196:17;26187:6;26143:71;:::i;:::-;25999:222;;;;:::o;26227:640::-;26422:4;26460:3;26449:9;26445:19;26437:27;;26474:71;26542:1;26531:9;26527:17;26518:6;26474:71;:::i;:::-;26555:72;26623:2;26612:9;26608:18;26599:6;26555:72;:::i;:::-;26637;26705:2;26694:9;26690:18;26681:6;26637:72;:::i;:::-;26756:9;26750:4;26746:20;26741:2;26730:9;26726:18;26719:48;26784:76;26855:4;26846:6;26784:76;:::i;:::-;26776:84;;26227:640;;;;;;;:::o;26873:332::-;26994:4;27032:2;27021:9;27017:18;27009:26;;27045:71;27113:1;27102:9;27098:17;27089:6;27045:71;:::i;:::-;27126:72;27194:2;27183:9;27179:18;27170:6;27126:72;:::i;:::-;26873:332;;;;;:::o;27211:373::-;27354:4;27392:2;27381:9;27377:18;27369:26;;27441:9;27435:4;27431:20;27427:1;27416:9;27412:17;27405:47;27469:108;27572:4;27563:6;27469:108;:::i;:::-;27461:116;;27211:373;;;;:::o;27590:210::-;27677:4;27715:2;27704:9;27700:18;27692:26;;27728:65;27790:1;27779:9;27775:17;27766:6;27728:65;:::i;:::-;27590:210;;;;:::o;27806:313::-;27919:4;27957:2;27946:9;27942:18;27934:26;;28006:9;28000:4;27996:20;27992:1;27981:9;27977:17;27970:47;28034:78;28107:4;28098:6;28034:78;:::i;:::-;28026:86;;27806:313;;;;:::o;28125:419::-;28291:4;28329:2;28318:9;28314:18;28306:26;;28378:9;28372:4;28368:20;28364:1;28353:9;28349:17;28342:47;28406:131;28532:4;28406:131;:::i;:::-;28398:139;;28125:419;;;:::o;28550:::-;28716:4;28754:2;28743:9;28739:18;28731:26;;28803:9;28797:4;28793:20;28789:1;28778:9;28774:17;28767:47;28831:131;28957:4;28831:131;:::i;:::-;28823:139;;28550:419;;;:::o;28975:::-;29141:4;29179:2;29168:9;29164:18;29156:26;;29228:9;29222:4;29218:20;29214:1;29203:9;29199:17;29192:47;29256:131;29382:4;29256:131;:::i;:::-;29248:139;;28975:419;;;:::o;29400:::-;29566:4;29604:2;29593:9;29589:18;29581:26;;29653:9;29647:4;29643:20;29639:1;29628:9;29624:17;29617:47;29681:131;29807:4;29681:131;:::i;:::-;29673:139;;29400:419;;;:::o;29825:::-;29991:4;30029:2;30018:9;30014:18;30006:26;;30078:9;30072:4;30068:20;30064:1;30053:9;30049:17;30042:47;30106:131;30232:4;30106:131;:::i;:::-;30098:139;;29825:419;;;:::o;30250:::-;30416:4;30454:2;30443:9;30439:18;30431:26;;30503:9;30497:4;30493:20;30489:1;30478:9;30474:17;30467:47;30531:131;30657:4;30531:131;:::i;:::-;30523:139;;30250:419;;;:::o;30675:::-;30841:4;30879:2;30868:9;30864:18;30856:26;;30928:9;30922:4;30918:20;30914:1;30903:9;30899:17;30892:47;30956:131;31082:4;30956:131;:::i;:::-;30948:139;;30675:419;;;:::o;31100:::-;31266:4;31304:2;31293:9;31289:18;31281:26;;31353:9;31347:4;31343:20;31339:1;31328:9;31324:17;31317:47;31381:131;31507:4;31381:131;:::i;:::-;31373:139;;31100:419;;;:::o;31525:::-;31691:4;31729:2;31718:9;31714:18;31706:26;;31778:9;31772:4;31768:20;31764:1;31753:9;31749:17;31742:47;31806:131;31932:4;31806:131;:::i;:::-;31798:139;;31525:419;;;:::o;31950:::-;32116:4;32154:2;32143:9;32139:18;32131:26;;32203:9;32197:4;32193:20;32189:1;32178:9;32174:17;32167:47;32231:131;32357:4;32231:131;:::i;:::-;32223:139;;31950:419;;;:::o;32375:::-;32541:4;32579:2;32568:9;32564:18;32556:26;;32628:9;32622:4;32618:20;32614:1;32603:9;32599:17;32592:47;32656:131;32782:4;32656:131;:::i;:::-;32648:139;;32375:419;;;:::o;32800:::-;32966:4;33004:2;32993:9;32989:18;32981:26;;33053:9;33047:4;33043:20;33039:1;33028:9;33024:17;33017:47;33081:131;33207:4;33081:131;:::i;:::-;33073:139;;32800:419;;;:::o;33225:::-;33391:4;33429:2;33418:9;33414:18;33406:26;;33478:9;33472:4;33468:20;33464:1;33453:9;33449:17;33442:47;33506:131;33632:4;33506:131;:::i;:::-;33498:139;;33225:419;;;:::o;33650:::-;33816:4;33854:2;33843:9;33839:18;33831:26;;33903:9;33897:4;33893:20;33889:1;33878:9;33874:17;33867:47;33931:131;34057:4;33931:131;:::i;:::-;33923:139;;33650:419;;;:::o;34075:::-;34241:4;34279:2;34268:9;34264:18;34256:26;;34328:9;34322:4;34318:20;34314:1;34303:9;34299:17;34292:47;34356:131;34482:4;34356:131;:::i;:::-;34348:139;;34075:419;;;:::o;34500:::-;34666:4;34704:2;34693:9;34689:18;34681:26;;34753:9;34747:4;34743:20;34739:1;34728:9;34724:17;34717:47;34781:131;34907:4;34781:131;:::i;:::-;34773:139;;34500:419;;;:::o;34925:::-;35091:4;35129:2;35118:9;35114:18;35106:26;;35178:9;35172:4;35168:20;35164:1;35153:9;35149:17;35142:47;35206:131;35332:4;35206:131;:::i;:::-;35198:139;;34925:419;;;:::o;35350:::-;35516:4;35554:2;35543:9;35539:18;35531:26;;35603:9;35597:4;35593:20;35589:1;35578:9;35574:17;35567:47;35631:131;35757:4;35631:131;:::i;:::-;35623:139;;35350:419;;;:::o;35775:::-;35941:4;35979:2;35968:9;35964:18;35956:26;;36028:9;36022:4;36018:20;36014:1;36003:9;35999:17;35992:47;36056:131;36182:4;36056:131;:::i;:::-;36048:139;;35775:419;;;:::o;36200:::-;36366:4;36404:2;36393:9;36389:18;36381:26;;36453:9;36447:4;36443:20;36439:1;36428:9;36424:17;36417:47;36481:131;36607:4;36481:131;:::i;:::-;36473:139;;36200:419;;;:::o;36625:::-;36791:4;36829:2;36818:9;36814:18;36806:26;;36878:9;36872:4;36868:20;36864:1;36853:9;36849:17;36842:47;36906:131;37032:4;36906:131;:::i;:::-;36898:139;;36625:419;;;:::o;37050:::-;37216:4;37254:2;37243:9;37239:18;37231:26;;37303:9;37297:4;37293:20;37289:1;37278:9;37274:17;37267:47;37331:131;37457:4;37331:131;:::i;:::-;37323:139;;37050:419;;;:::o;37475:::-;37641:4;37679:2;37668:9;37664:18;37656:26;;37728:9;37722:4;37718:20;37714:1;37703:9;37699:17;37692:47;37756:131;37882:4;37756:131;:::i;:::-;37748:139;;37475:419;;;:::o;37900:::-;38066:4;38104:2;38093:9;38089:18;38081:26;;38153:9;38147:4;38143:20;38139:1;38128:9;38124:17;38117:47;38181:131;38307:4;38181:131;:::i;:::-;38173:139;;37900:419;;;:::o;38325:::-;38491:4;38529:2;38518:9;38514:18;38506:26;;38578:9;38572:4;38568:20;38564:1;38553:9;38549:17;38542:47;38606:131;38732:4;38606:131;:::i;:::-;38598:139;;38325:419;;;:::o;38750:::-;38916:4;38954:2;38943:9;38939:18;38931:26;;39003:9;38997:4;38993:20;38989:1;38978:9;38974:17;38967:47;39031:131;39157:4;39031:131;:::i;:::-;39023:139;;38750:419;;;:::o;39175:::-;39341:4;39379:2;39368:9;39364:18;39356:26;;39428:9;39422:4;39418:20;39414:1;39403:9;39399:17;39392:47;39456:131;39582:4;39456:131;:::i;:::-;39448:139;;39175:419;;;:::o;39600:::-;39766:4;39804:2;39793:9;39789:18;39781:26;;39853:9;39847:4;39843:20;39839:1;39828:9;39824:17;39817:47;39881:131;40007:4;39881:131;:::i;:::-;39873:139;;39600:419;;;:::o;40025:222::-;40118:4;40156:2;40145:9;40141:18;40133:26;;40169:71;40237:1;40226:9;40222:17;40213:6;40169:71;:::i;:::-;40025:222;;;;:::o;40253:218::-;40344:4;40382:2;40371:9;40367:18;40359:26;;40395:69;40461:1;40450:9;40446:17;40437:6;40395:69;:::i;:::-;40253:218;;;;:::o;40477:129::-;40511:6;40538:20;;:::i;:::-;40528:30;;40567:33;40595:4;40587:6;40567:33;:::i;:::-;40477:129;;;:::o;40612:75::-;40645:6;40678:2;40672:9;40662:19;;40612:75;:::o;40693:307::-;40754:4;40844:18;40836:6;40833:30;40830:56;;;40866:18;;:::i;:::-;40830:56;40904:29;40926:6;40904:29;:::i;:::-;40896:37;;40988:4;40982;40978:15;40970:23;;40693:307;;;:::o;41006:308::-;41068:4;41158:18;41150:6;41147:30;41144:56;;;41180:18;;:::i;:::-;41144:56;41218:29;41240:6;41218:29;:::i;:::-;41210:37;;41302:4;41296;41292:15;41284:23;;41006:308;;;:::o;41320:132::-;41387:4;41410:3;41402:11;;41440:4;41435:3;41431:14;41423:22;;41320:132;;;:::o;41458:141::-;41507:4;41530:3;41522:11;;41553:3;41550:1;41543:14;41587:4;41584:1;41574:18;41566:26;;41458:141;;;:::o;41605:114::-;41672:6;41706:5;41700:12;41690:22;;41605:114;;;:::o;41725:98::-;41776:6;41810:5;41804:12;41794:22;;41725:98;;;:::o;41829:99::-;41881:6;41915:5;41909:12;41899:22;;41829:99;;;:::o;41934:113::-;42004:4;42036;42031:3;42027:14;42019:22;;41934:113;;;:::o;42053:184::-;42152:11;42186:6;42181:3;42174:19;42226:4;42221:3;42217:14;42202:29;;42053:184;;;;:::o;42243:168::-;42326:11;42360:6;42355:3;42348:19;42400:4;42395:3;42391:14;42376:29;;42243:168;;;;:::o;42417:147::-;42518:11;42555:3;42540:18;;42417:147;;;;:::o;42570:169::-;42654:11;42688:6;42683:3;42676:19;42728:4;42723:3;42719:14;42704:29;;42570:169;;;;:::o;42745:148::-;42847:11;42884:3;42869:18;;42745:148;;;;:::o;42899:305::-;42939:3;42958:20;42976:1;42958:20;:::i;:::-;42953:25;;42992:20;43010:1;42992:20;:::i;:::-;42987:25;;43146:1;43078:66;43074:74;43071:1;43068:81;43065:107;;;43152:18;;:::i;:::-;43065:107;43196:1;43193;43189:9;43182:16;;42899:305;;;;:::o;43210:185::-;43250:1;43267:20;43285:1;43267:20;:::i;:::-;43262:25;;43301:20;43319:1;43301:20;:::i;:::-;43296:25;;43340:1;43330:35;;43345:18;;:::i;:::-;43330:35;43387:1;43384;43380:9;43375:14;;43210:185;;;;:::o;43401:348::-;43441:7;43464:20;43482:1;43464:20;:::i;:::-;43459:25;;43498:20;43516:1;43498:20;:::i;:::-;43493:25;;43686:1;43618:66;43614:74;43611:1;43608:81;43603:1;43596:9;43589:17;43585:105;43582:131;;;43693:18;;:::i;:::-;43582:131;43741:1;43738;43734:9;43723:20;;43401:348;;;;:::o;43755:191::-;43795:4;43815:20;43833:1;43815:20;:::i;:::-;43810:25;;43849:20;43867:1;43849:20;:::i;:::-;43844:25;;43888:1;43885;43882:8;43879:34;;;43893:18;;:::i;:::-;43879:34;43938:1;43935;43931:9;43923:17;;43755:191;;;;:::o;43952:96::-;43989:7;44018:24;44036:5;44018:24;:::i;:::-;44007:35;;43952:96;;;:::o;44054:90::-;44088:7;44131:5;44124:13;44117:21;44106:32;;44054:90;;;:::o;44150:149::-;44186:7;44226:66;44219:5;44215:78;44204:89;;44150:149;;;:::o;44305:126::-;44342:7;44382:42;44375:5;44371:54;44360:65;;44305:126;;;:::o;44437:77::-;44474:7;44503:5;44492:16;;44437:77;;;:::o;44520:86::-;44555:7;44595:4;44588:5;44584:16;44573:27;;44520:86;;;:::o;44612:109::-;44648:7;44688:26;44681:5;44677:38;44666:49;;44612:109;;;:::o;44727:154::-;44811:6;44806:3;44801;44788:30;44873:1;44864:6;44859:3;44855:16;44848:27;44727:154;;;:::o;44887:307::-;44955:1;44965:113;44979:6;44976:1;44973:13;44965:113;;;45064:1;45059:3;45055:11;45049:18;45045:1;45040:3;45036:11;45029:39;45001:2;44998:1;44994:10;44989:15;;44965:113;;;45096:6;45093:1;45090:13;45087:101;;;45176:1;45167:6;45162:3;45158:16;45151:27;45087:101;44936:258;44887:307;;;:::o;45200:320::-;45244:6;45281:1;45275:4;45271:12;45261:22;;45328:1;45322:4;45318:12;45349:18;45339:81;;45405:4;45397:6;45393:17;45383:27;;45339:81;45467:2;45459:6;45456:14;45436:18;45433:38;45430:84;;;45486:18;;:::i;:::-;45430:84;45251:269;45200:320;;;:::o;45526:281::-;45609:27;45631:4;45609:27;:::i;:::-;45601:6;45597:40;45739:6;45727:10;45724:22;45703:18;45691:10;45688:34;45685:62;45682:88;;;45750:18;;:::i;:::-;45682:88;45790:10;45786:2;45779:22;45569:238;45526:281;;:::o;45813:233::-;45852:3;45875:24;45893:5;45875:24;:::i;:::-;45866:33;;45921:66;45914:5;45911:77;45908:103;;;45991:18;;:::i;:::-;45908:103;46038:1;46031:5;46027:13;46020:20;;45813:233;;;:::o;46052:167::-;46089:3;46112:22;46128:5;46112:22;:::i;:::-;46103:31;;46156:4;46149:5;46146:15;46143:41;;;46164:18;;:::i;:::-;46143:41;46211:1;46204:5;46200:13;46193:20;;46052:167;;;:::o;46225:176::-;46257:1;46274:20;46292:1;46274:20;:::i;:::-;46269:25;;46308:20;46326:1;46308:20;:::i;:::-;46303:25;;46347:1;46337:35;;46352:18;;:::i;:::-;46337:35;46393:1;46390;46386:9;46381:14;;46225:176;;;;:::o;46407:180::-;46455:77;46452:1;46445:88;46552:4;46549:1;46542:15;46576:4;46573:1;46566:15;46593:180;46641:77;46638:1;46631:88;46738:4;46735:1;46728:15;46762:4;46759:1;46752:15;46779:180;46827:77;46824:1;46817:88;46924:4;46921:1;46914:15;46948:4;46945:1;46938:15;46965:180;47013:77;47010:1;47003:88;47110:4;47107:1;47100:15;47134:4;47131:1;47124:15;47151:180;47199:77;47196:1;47189:88;47296:4;47293:1;47286:15;47320:4;47317:1;47310:15;47337:180;47385:77;47382:1;47375:88;47482:4;47479:1;47472:15;47506:4;47503:1;47496:15;47523:117;47632:1;47629;47622:12;47646:117;47755:1;47752;47745:12;47769:117;47878:1;47875;47868:12;47892:117;48001:1;47998;47991:12;48015:117;48124:1;48121;48114:12;48138:117;48247:1;48244;48237:12;48261:102;48302:6;48353:2;48349:7;48344:2;48337:5;48333:14;48329:28;48319:38;;48261:102;;;:::o;48369:230::-;48509:34;48505:1;48497:6;48493:14;48486:58;48578:13;48573:2;48565:6;48561:15;48554:38;48369:230;:::o;48605:237::-;48745:34;48741:1;48733:6;48729:14;48722:58;48814:20;48809:2;48801:6;48797:15;48790:45;48605:237;:::o;48848:225::-;48988:34;48984:1;48976:6;48972:14;48965:58;49057:8;49052:2;49044:6;49040:15;49033:33;48848:225;:::o;49079:178::-;49219:30;49215:1;49207:6;49203:14;49196:54;49079:178;:::o;49263:::-;49403:30;49399:1;49391:6;49387:14;49380:54;49263:178;:::o;49447:223::-;49587:34;49583:1;49575:6;49571:14;49564:58;49656:6;49651:2;49643:6;49639:15;49632:31;49447:223;:::o;49676:175::-;49816:27;49812:1;49804:6;49800:14;49793:51;49676:175;:::o;49857:231::-;49997:34;49993:1;49985:6;49981:14;49974:58;50066:14;50061:2;50053:6;50049:15;50042:39;49857:231;:::o;50094:243::-;50234:34;50230:1;50222:6;50218:14;50211:58;50303:26;50298:2;50290:6;50286:15;50279:51;50094:243;:::o;50343:229::-;50483:34;50479:1;50471:6;50467:14;50460:58;50552:12;50547:2;50539:6;50535:15;50528:37;50343:229;:::o;50578:228::-;50718:34;50714:1;50706:6;50702:14;50695:58;50787:11;50782:2;50774:6;50770:15;50763:36;50578:228;:::o;50812:172::-;50952:24;50948:1;50940:6;50936:14;50929:48;50812:172;:::o;50990:223::-;51130:34;51126:1;51118:6;51114:14;51107:58;51199:6;51194:2;51186:6;51182:15;51175:31;50990:223;:::o;51219:177::-;51359:29;51355:1;51347:6;51343:14;51336:53;51219:177;:::o;51402:182::-;51542:34;51538:1;51530:6;51526:14;51519:58;51402:182;:::o;51590:231::-;51730:34;51726:1;51718:6;51714:14;51707:58;51799:14;51794:2;51786:6;51782:15;51775:39;51590:231;:::o;51827:182::-;51967:34;51963:1;51955:6;51951:14;51944:58;51827:182;:::o;52015:172::-;52155:24;52151:1;52143:6;52139:14;52132:48;52015:172;:::o;52193:228::-;52333:34;52329:1;52321:6;52317:14;52310:58;52402:11;52397:2;52389:6;52385:15;52378:36;52193:228;:::o;52427:234::-;52567:34;52563:1;52555:6;52551:14;52544:58;52636:17;52631:2;52623:6;52619:15;52612:42;52427:234;:::o;52667:220::-;52807:34;52803:1;52795:6;52791:14;52784:58;52876:3;52871:2;52863:6;52859:15;52852:28;52667:220;:::o;52893:164::-;53033:16;53029:1;53021:6;53017:14;53010:40;52893:164;:::o;53063:114::-;;:::o;53183:168::-;53323:20;53319:1;53311:6;53307:14;53300:44;53183:168;:::o;53357:180::-;53497:32;53493:1;53485:6;53481:14;53474:56;53357:180;:::o;53543:236::-;53683:34;53679:1;53671:6;53667:14;53660:58;53752:19;53747:2;53739:6;53735:15;53728:44;53543:236;:::o;53785:231::-;53925:34;53921:1;53913:6;53909:14;53902:58;53994:14;53989:2;53981:6;53977:15;53970:39;53785:231;:::o;54022:173::-;54162:25;54158:1;54150:6;54146:14;54139:49;54022:173;:::o;54201:177::-;54341:29;54337:1;54329:6;54325:14;54318:53;54201:177;:::o;54384:122::-;54457:24;54475:5;54457:24;:::i;:::-;54450:5;54447:35;54437:63;;54496:1;54493;54486:12;54437:63;54384:122;:::o;54512:116::-;54582:21;54597:5;54582:21;:::i;:::-;54575:5;54572:32;54562:60;;54618:1;54615;54608:12;54562:60;54512:116;:::o;54634:120::-;54706:23;54723:5;54706:23;:::i;:::-;54699:5;54696:34;54686:62;;54744:1;54741;54734:12;54686:62;54634:120;:::o;54760:122::-;54833:24;54851:5;54833:24;:::i;:::-;54826:5;54823:35;54813:63;;54872:1;54869;54862:12;54813:63;54760:122;:::o
Swarm Source
ipfs://33d952ed7bd6c92da7577a058f05eccc9c0fa51d6cfa82d182a33e5ae6203fa7
Loading...
Loading
Loading...
Loading
Net Worth in USD
$304.05
Net Worth in ETH
0.159989
Token Allocations
ETH
100.00%
Multichain Portfolio | 33 Chains
| Chain | Token | Portfolio % | Price | Amount | Value |
|---|---|---|---|---|---|
| ETH | 100.00% | $1,900.32 | 0.16 | $304.05 |
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.