ERC-721
Overview
Max Total Supply
999 BSZ
Holders
320
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
2 BSZLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BITSHADOWZ
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-03-31 */ // SPDX-License-Identifier: UNLICENSED // ____ ____ _ _ ___ _ _ ____ ____ _ _ ____ _ _ ___ _ ____ ____ // [__ | | | | | |__| |___ |__/ |\ | |___ |\/| |__] | |__/ |___ // ___] |__| |__| | | | |___ | \ | \| |___ | | | | | \ |___ // ________ ___ _________ ________ ___ ___ ________ ________ ________ ___ __ ________ // |\ __ \|\ \|\___ ___\\ ____\|\ \|\ \|\ __ \|\ ___ \|\ __ \|\ \ |\ \|\_____ \ // \ \ \|\ /\ \ \|___ \ \_\ \ \___|\ \ \\\ \ \ \|\ \ \ \_|\ \ \ \|\ \ \ \ \ \ \\|___/ /| // \ \ __ \ \ \ \ \ \ \ \_____ \ \ __ \ \ __ \ \ \ \\ \ \ \\\ \ \ \ __\ \ \ / / / // \ \ \|\ \ \ \ \ \ \ \|____|\ \ \ \ \ \ \ \ \ \ \ \_\\ \ \ \\\ \ \ \|\__\_\ \ / /_/__ // \ \_______\ \__\ \ \__\ ____\_\ \ \__\ \__\ \__\ \__\ \_______\ \_______\ \____________\\________\ // \|_______|\|__| \|__| |\_________\|__|\|__|\|__|\|__|\|_______|\|_______|\|____________|\|_______| // \|_________| // ____ ___ ____ ___ ___ ____ _ _ _ _ _ _ _ ___ ___ ____ ____ ____ _ _ _ _ _ _ ____ __ _ ____ ____ __ // |___ /__ |=== |--' | |--| _X_ |___ | |\/| | | |==] |--< |=== |--| |-:_ _X_ |--| |--| | \| |___ [__] [_,] pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } pragma solidity ^0.8.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 { _setApprovalForAll(_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); _afterTokenTransfer(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); _afterTokenTransfer(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 from incorrect owner"); 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); _afterTokenTransfer(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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @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 {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } pragma solidity ^0.8.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); /** * @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); } pragma solidity ^0.8.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(); } } pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.4; // SOUTHERN EMPIRE BITSHADOWZ contract BITSHADOWZ is ERC721Enumerable, Ownable { uint256 public mintPrice; uint256 public currentSupply; uint256 public maxSupply; uint256 public maxPerWallet; bool public isPublicMintEnabled; string internal baseTokenURI; address payable public withdrawWallet; mapping(address => uint256) public walletMints; constructor() payable ERC721('BITSHADOWZ', 'BSZ'){ mintPrice = 30 ether; currentSupply = 0; maxSupply = 999; maxPerWallet = 10; withdrawWallet = payable(0x2AAfE02E2e535c86D5B9e0E7DFc27aDbF250DB28); } function setIsPublicMintEnabled(bool isPublicMintEnabled_) external onlyOwner { isPublicMintEnabled = isPublicMintEnabled_; } function setBaseTokenURI(string calldata baseTokenURI_) external onlyOwner { baseTokenURI = baseTokenURI_; } function tokenURI(uint256 tokenId_) public view override returns (string memory){ require(_exists(tokenId_), "Token doesn't exist yo!"); return string(abi.encodePacked(baseTokenURI, Strings.toString(tokenId_), ".json")); } function withdraw() external onlyOwner { (bool success, ) = withdrawWallet.call{ value: address(this).balance }(''); require(success, "Withdraw failed :`("); } function mint(uint256 quantity_) public payable { require(isPublicMintEnabled, "Minting not enabled yet!"); require(msg.value == quantity_ * mintPrice, "Wrong mint value!"); require(currentSupply + quantity_ <= maxSupply, "Sold Out!"); require(walletMints[msg.sender] + quantity_ <= maxPerWallet, "Exceeded max wallet amount!"); for (uint256 i = 0; i < quantity_; i++){ uint256 newTokenId = currentSupply + 1; currentSupply++; walletMints[msg.sender] += 1; _safeMint(msg.sender, newTokenId); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","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":"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":"currentSupply","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":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxPerWallet","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseTokenURI_","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPublicMintEnabled_","type":"bool"}],"name":"setIsPublicMintEnabled","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":"","type":"address"}],"name":"walletMints","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdrawWallet","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600a81526020017f424954534841444f575a000000000000000000000000000000000000000000008152506040518060400160405280600381526020017f42535a000000000000000000000000000000000000000000000000000000000081525081600090805190602001906200008892919062000216565b508060019080519060200190620000a192919062000216565b505050620000c4620000b86200014860201b60201c565b6200015060201b60201c565b6801a055690d9db80000600b819055506000600c819055506103e7600d81905550600a600e81905550732aafe02e2e535c86d5b9e0e7dfc27adbf250db28601160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200032b565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200022490620002c6565b90600052602060002090601f01602090048101928262000248576000855562000294565b82601f106200026357805160ff191683800117855562000294565b8280016001018555821562000294579182015b828111156200029357825182559160200191906001019062000276565b5b509050620002a39190620002a7565b5090565b5b80821115620002c2576000816000905550600101620002a8565b5090565b60006002820490506001821680620002df57607f821691505b60208210811415620002f657620002f5620002fc565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b614033806200033b6000396000f3fe6080604052600436106101cd5760003560e01c80636817c76c116100f7578063a0712d6811610095578063d5abeb0111610064578063d5abeb0114610669578063e985e9c514610694578063f0293fd3146106d1578063f2fde38b1461070e576101cd565b8063a0712d68146105be578063a22cb465146105da578063b88d4fde14610603578063c87b56dd1461062c576101cd565b8063771282f6116100d1578063771282f61461051257806385d178f41461053d5780638da5cb5b1461056857806395d89b4114610593576101cd565b80636817c76c1461049357806370a08231146104be578063715018a6146104fb576101cd565b806323b872dd1161016f57806342842e0e1161013e57806342842e0e146103c5578063453c2310146103ee5780634f6ccce7146104195780636352211e14610456576101cd565b806323b872dd1461031f5780632f745c591461034857806330176e13146103855780633ccfd60b146103ae576101cd565b8063081812fc116101ab578063081812fc14610265578063095ea7b3146102a257806318160ddd146102cb5780632373ac22146102f6576101cd565b80630116bc2d146101d257806301ffc9a7146101fd57806306fdde031461023a575b600080fd5b3480156101de57600080fd5b506101e7610737565b6040516101f49190613260565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612c11565b61074a565b6040516102319190613260565b60405180910390f35b34801561024657600080fd5b5061024f6107c4565b60405161025c919061327b565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190612ca8565b610856565b60405161029991906131de565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612bac565b6108db565b005b3480156102d757600080fd5b506102e06109f3565b6040516102ed919061357d565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190612be8565b610a00565b005b34801561032b57600080fd5b5061034660048036038101906103419190612aa6565b610a99565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612bac565b610af9565b60405161037c919061357d565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612c63565b610b9e565b005b3480156103ba57600080fd5b506103c3610c30565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612aa6565b610d7d565b005b3480156103fa57600080fd5b50610403610d9d565b604051610410919061357d565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190612ca8565b610da3565b60405161044d919061357d565b60405180910390f35b34801561046257600080fd5b5061047d60048036038101906104789190612ca8565b610e3a565b60405161048a91906131de565b60405180910390f35b34801561049f57600080fd5b506104a8610eec565b6040516104b5919061357d565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612a41565b610ef2565b6040516104f2919061357d565b60405180910390f35b34801561050757600080fd5b50610510610faa565b005b34801561051e57600080fd5b50610527611032565b604051610534919061357d565b60405180910390f35b34801561054957600080fd5b50610552611038565b60405161055f91906131f9565b60405180910390f35b34801561057457600080fd5b5061057d61105e565b60405161058a91906131de565b60405180910390f35b34801561059f57600080fd5b506105a8611088565b6040516105b5919061327b565b60405180910390f35b6105d860048036038101906105d39190612ca8565b61111a565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612b70565b611348565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612af5565b61135e565b005b34801561063857600080fd5b50610653600480360381019061064e9190612ca8565b6113c0565b604051610660919061327b565b60405180910390f35b34801561067557600080fd5b5061067e61143c565b60405161068b919061357d565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190612a6a565b611442565b6040516106c89190613260565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190612a41565b6114d6565b604051610705919061357d565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190612a41565b6114ee565b005b600f60009054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107bd57506107bc826115e6565b5b9050919050565b6060600080546107d39061382e565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff9061382e565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b5050505050905090565b6000610861826116c8565b6108a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108979061347d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e682610e3a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e906134fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610976611734565b73ffffffffffffffffffffffffffffffffffffffff1614806109a557506109a48161099f611734565b611442565b5b6109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db906133dd565b60405180910390fd5b6109ee838361173c565b505050565b6000600880549050905090565b610a08611734565b73ffffffffffffffffffffffffffffffffffffffff16610a2661105e565b73ffffffffffffffffffffffffffffffffffffffff1614610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061349d565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b610aaa610aa4611734565b826117f5565b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae09061353d565b60405180910390fd5b610af48383836118d3565b505050565b6000610b0483610ef2565b8210610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c9061329d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ba6611734565b73ffffffffffffffffffffffffffffffffffffffff16610bc461105e565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c119061349d565b60405180910390fd5b818160109190610c2b929190612883565b505050565b610c38611734565b73ffffffffffffffffffffffffffffffffffffffff16610c5661105e565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca39061349d565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610cf4906131c9565b60006040518083038185875af1925050503d8060008114610d31576040519150601f19603f3d011682016040523d82523d6000602084013e610d36565b606091505b5050905080610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061343d565b60405180910390fd5b50565b610d988383836040518060200160405280600081525061135e565b505050565b600e5481565b6000610dad6109f3565b8210610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de59061355d565b60405180910390fd5b60088281548110610e28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda9061341d565b60405180910390fd5b80915050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a906133fd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb2611734565b73ffffffffffffffffffffffffffffffffffffffff16610fd061105e565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d9061349d565b60405180910390fd5b6110306000611b3a565b565b600c5481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110979061382e565b80601f01602080910402602001604051908101604052809291908181526020018280546110c39061382e565b80156111105780601f106110e557610100808354040283529160200191611110565b820191906000526020600020905b8154815290600101906020018083116110f357829003601f168201915b5050505050905090565b600f60009054906101000a900460ff16611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906133bd565b60405180910390fd5b600b548161117791906136d8565b34146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af906134bd565b60405180910390fd5b600d5481600c546111c99190613651565b111561120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019061331d565b60405180910390fd5b600e5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112589190613651565b1115611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061351d565b60405180910390fd5b60005b818110156113445760006001600c546112b59190613651565b9050600c60008154809291906112ca90613891565b91905055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131f9190613651565b925050819055506113303382611c00565b50808061133c90613891565b91505061129c565b5050565b61135a611353611734565b8383611c1e565b5050565b61136f611369611734565b836117f5565b6113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a59061353d565b60405180910390fd5b6113ba84848484611d8b565b50505050565b60606113cb826116c8565b61140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906134dd565b60405180910390fd5b601061141583611de7565b60405160200161142692919061319a565b6040516020818303038152906040529050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60126020528060005260406000206000915090505481565b6114f6611734565b73ffffffffffffffffffffffffffffffffffffffff1661151461105e565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115619061349d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906132dd565b60405180910390fd5b6115e381611b3a565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116b157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116c157506116c082611f94565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117af83610e3a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611800826116c8565b61183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118369061339d565b60405180910390fd5b600061184a83610e3a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118b957508373ffffffffffffffffffffffffffffffffffffffff166118a184610856565b73ffffffffffffffffffffffffffffffffffffffff16145b806118ca57506118c98185611442565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118f382610e3a565b73ffffffffffffffffffffffffffffffffffffffff1614611949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611940906132fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b09061335d565b60405180910390fd5b6119c4838383611ffe565b6119cf60008261173c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a1f9190613732565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a769190613651565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b35838383612112565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c1a828260405180602001604052806000815250612117565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c849061337d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d7e9190613260565b60405180910390a3505050565b611d968484846118d3565b611da284848484612172565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906132bd565b60405180910390fd5b50505050565b60606000821415611e2f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f8f565b600082905060005b60008214611e61578080611e4a90613891565b915050600a82611e5a91906136a7565b9150611e37565b60008167ffffffffffffffff811115611ea3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611ed55781602001600182028036833780820191505090505b5090505b60008514611f8857600182611eee9190613732565b9150600a85611efd91906138da565b6030611f099190613651565b60f81b818381518110611f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f8191906136a7565b9450611ed9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612009838383612309565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561204c576120478161230e565b61208b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461208a576120898382612357565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ce576120c9816124c4565b61210d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461210c5761210b8282612607565b5b5b505050565b505050565b6121218383612686565b61212e6000848484612172565b61216d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612164906132bd565b60405180910390fd5b505050565b60006121938473ffffffffffffffffffffffffffffffffffffffff16612860565b156122fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121bc611734565b8786866040518563ffffffff1660e01b81526004016121de9493929190613214565b602060405180830381600087803b1580156121f857600080fd5b505af192505050801561222957506040513d601f19601f820116820180604052508101906122269190612c3a565b60015b6122ac573d8060008114612259576040519150601f19603f3d011682016040523d82523d6000602084013e61225e565b606091505b506000815114156122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b906132bd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612301565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161236484610ef2565b61236e9190613732565b9050600060076000848152602001908152602001600020549050818114612453576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506124d89190613732565b905060006009600084815260200190815260200160002054905060006008838154811061252e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612576577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061261283610ef2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed9061345d565b60405180910390fd5b6126ff816116c8565b1561273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369061333d565b60405180910390fd5b61274b60008383611ffe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279b9190613651565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461285c60008383612112565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461288f9061382e565b90600052602060002090601f0160209004810192826128b157600085556128f8565b82601f106128ca57803560ff19168380011785556128f8565b828001600101855582156128f8579182015b828111156128f75782358255916020019190600101906128dc565b5b5090506129059190612909565b5090565b5b8082111561292257600081600090555060010161290a565b5090565b6000612939612934846135bd565b613598565b90508281526020810184848401111561295157600080fd5b61295c8482856137ec565b509392505050565b60008135905061297381613fa1565b92915050565b60008135905061298881613fb8565b92915050565b60008135905061299d81613fcf565b92915050565b6000815190506129b281613fcf565b92915050565b600082601f8301126129c957600080fd5b81356129d9848260208601612926565b91505092915050565b60008083601f8401126129f457600080fd5b8235905067ffffffffffffffff811115612a0d57600080fd5b602083019150836001820283011115612a2557600080fd5b9250929050565b600081359050612a3b81613fe6565b92915050565b600060208284031215612a5357600080fd5b6000612a6184828501612964565b91505092915050565b60008060408385031215612a7d57600080fd5b6000612a8b85828601612964565b9250506020612a9c85828601612964565b9150509250929050565b600080600060608486031215612abb57600080fd5b6000612ac986828701612964565b9350506020612ada86828701612964565b9250506040612aeb86828701612a2c565b9150509250925092565b60008060008060808587031215612b0b57600080fd5b6000612b1987828801612964565b9450506020612b2a87828801612964565b9350506040612b3b87828801612a2c565b925050606085013567ffffffffffffffff811115612b5857600080fd5b612b64878288016129b8565b91505092959194509250565b60008060408385031215612b8357600080fd5b6000612b9185828601612964565b9250506020612ba285828601612979565b9150509250929050565b60008060408385031215612bbf57600080fd5b6000612bcd85828601612964565b9250506020612bde85828601612a2c565b9150509250929050565b600060208284031215612bfa57600080fd5b6000612c0884828501612979565b91505092915050565b600060208284031215612c2357600080fd5b6000612c318482850161298e565b91505092915050565b600060208284031215612c4c57600080fd5b6000612c5a848285016129a3565b91505092915050565b60008060208385031215612c7657600080fd5b600083013567ffffffffffffffff811115612c9057600080fd5b612c9c858286016129e2565b92509250509250929050565b600060208284031215612cba57600080fd5b6000612cc884828501612a2c565b91505092915050565b612cda81613778565b82525050565b612ce981613766565b82525050565b612cf88161378a565b82525050565b6000612d0982613603565b612d138185613619565b9350612d238185602086016137fb565b612d2c816139c7565b840191505092915050565b6000612d428261360e565b612d4c8185613635565b9350612d5c8185602086016137fb565b612d65816139c7565b840191505092915050565b6000612d7b8261360e565b612d858185613646565b9350612d958185602086016137fb565b80840191505092915050565b60008154612dae8161382e565b612db88186613646565b94506001821660008114612dd35760018114612de457612e17565b60ff19831686528186019350612e17565b612ded856135ee565b60005b83811015612e0f57815481890152600182019150602081019050612df0565b838801955050505b50505092915050565b6000612e2d602b83613635565b9150612e38826139d8565b604082019050919050565b6000612e50603283613635565b9150612e5b82613a27565b604082019050919050565b6000612e73602683613635565b9150612e7e82613a76565b604082019050919050565b6000612e96602583613635565b9150612ea182613ac5565b604082019050919050565b6000612eb9600983613635565b9150612ec482613b14565b602082019050919050565b6000612edc601c83613635565b9150612ee782613b3d565b602082019050919050565b6000612eff602483613635565b9150612f0a82613b66565b604082019050919050565b6000612f22601983613635565b9150612f2d82613bb5565b602082019050919050565b6000612f45602c83613635565b9150612f5082613bde565b604082019050919050565b6000612f68601883613635565b9150612f7382613c2d565b602082019050919050565b6000612f8b603883613635565b9150612f9682613c56565b604082019050919050565b6000612fae602a83613635565b9150612fb982613ca5565b604082019050919050565b6000612fd1602983613635565b9150612fdc82613cf4565b604082019050919050565b6000612ff4601383613635565b9150612fff82613d43565b602082019050919050565b6000613017602083613635565b915061302282613d6c565b602082019050919050565b600061303a602c83613635565b915061304582613d95565b604082019050919050565b600061305d600583613646565b915061306882613de4565b600582019050919050565b6000613080602083613635565b915061308b82613e0d565b602082019050919050565b60006130a3601183613635565b91506130ae82613e36565b602082019050919050565b60006130c6601783613635565b91506130d182613e5f565b602082019050919050565b60006130e9602183613635565b91506130f482613e88565b604082019050919050565b600061310c601b83613635565b915061311782613ed7565b602082019050919050565b600061312f60008361362a565b915061313a82613f00565b600082019050919050565b6000613152603183613635565b915061315d82613f03565b604082019050919050565b6000613175602c83613635565b915061318082613f52565b604082019050919050565b613194816137e2565b82525050565b60006131a68285612da1565b91506131b28284612d70565b91506131bd82613050565b91508190509392505050565b60006131d482613122565b9150819050919050565b60006020820190506131f36000830184612ce0565b92915050565b600060208201905061320e6000830184612cd1565b92915050565b60006080820190506132296000830187612ce0565b6132366020830186612ce0565b613243604083018561318b565b81810360608301526132558184612cfe565b905095945050505050565b60006020820190506132756000830184612cef565b92915050565b600060208201905081810360008301526132958184612d37565b905092915050565b600060208201905081810360008301526132b681612e20565b9050919050565b600060208201905081810360008301526132d681612e43565b9050919050565b600060208201905081810360008301526132f681612e66565b9050919050565b6000602082019050818103600083015261331681612e89565b9050919050565b6000602082019050818103600083015261333681612eac565b9050919050565b6000602082019050818103600083015261335681612ecf565b9050919050565b6000602082019050818103600083015261337681612ef2565b9050919050565b6000602082019050818103600083015261339681612f15565b9050919050565b600060208201905081810360008301526133b681612f38565b9050919050565b600060208201905081810360008301526133d681612f5b565b9050919050565b600060208201905081810360008301526133f681612f7e565b9050919050565b6000602082019050818103600083015261341681612fa1565b9050919050565b6000602082019050818103600083015261343681612fc4565b9050919050565b6000602082019050818103600083015261345681612fe7565b9050919050565b600060208201905081810360008301526134768161300a565b9050919050565b600060208201905081810360008301526134968161302d565b9050919050565b600060208201905081810360008301526134b681613073565b9050919050565b600060208201905081810360008301526134d681613096565b9050919050565b600060208201905081810360008301526134f6816130b9565b9050919050565b60006020820190508181036000830152613516816130dc565b9050919050565b60006020820190508181036000830152613536816130ff565b9050919050565b6000602082019050818103600083015261355681613145565b9050919050565b6000602082019050818103600083015261357681613168565b9050919050565b6000602082019050613592600083018461318b565b92915050565b60006135a26135b3565b90506135ae8282613860565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d8576135d7613998565b5b6135e1826139c7565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061365c826137e2565b9150613667836137e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561369c5761369b61390b565b5b828201905092915050565b60006136b2826137e2565b91506136bd836137e2565b9250826136cd576136cc61393a565b5b828204905092915050565b60006136e3826137e2565b91506136ee836137e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137275761372661390b565b5b828202905092915050565b600061373d826137e2565b9150613748836137e2565b92508282101561375b5761375a61390b565b5b828203905092915050565b6000613771826137c2565b9050919050565b6000613783826137c2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138195780820151818401526020810190506137fe565b83811115613828576000848401525b50505050565b6000600282049050600182168061384657607f821691505b6020821081141561385a57613859613969565b5b50919050565b613869826139c7565b810181811067ffffffffffffffff8211171561388857613887613998565b5b80604052505050565b600061389c826137e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138cf576138ce61390b565b5b600182019050919050565b60006138e5826137e2565b91506138f0836137e2565b925082613900576138ff61393a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f536f6c64204f7574210000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f7420656e61626c656420796574210000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f5769746864726177206661696c6564203a602800000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f57726f6e67206d696e742076616c756521000000000000000000000000000000600082015250565b7f546f6b656e20646f65736e277420657869737420796f21000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d61782077616c6c657420616d6f756e74210000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613faa81613766565b8114613fb557600080fd5b50565b613fc18161378a565b8114613fcc57600080fd5b50565b613fd881613796565b8114613fe357600080fd5b50565b613fef816137e2565b8114613ffa57600080fd5b5056fea26469706673582212204b363768e09ce53eacc773ea70e402068681d33d10dc871b125a50d031a8583964736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101cd5760003560e01c80636817c76c116100f7578063a0712d6811610095578063d5abeb0111610064578063d5abeb0114610669578063e985e9c514610694578063f0293fd3146106d1578063f2fde38b1461070e576101cd565b8063a0712d68146105be578063a22cb465146105da578063b88d4fde14610603578063c87b56dd1461062c576101cd565b8063771282f6116100d1578063771282f61461051257806385d178f41461053d5780638da5cb5b1461056857806395d89b4114610593576101cd565b80636817c76c1461049357806370a08231146104be578063715018a6146104fb576101cd565b806323b872dd1161016f57806342842e0e1161013e57806342842e0e146103c5578063453c2310146103ee5780634f6ccce7146104195780636352211e14610456576101cd565b806323b872dd1461031f5780632f745c591461034857806330176e13146103855780633ccfd60b146103ae576101cd565b8063081812fc116101ab578063081812fc14610265578063095ea7b3146102a257806318160ddd146102cb5780632373ac22146102f6576101cd565b80630116bc2d146101d257806301ffc9a7146101fd57806306fdde031461023a575b600080fd5b3480156101de57600080fd5b506101e7610737565b6040516101f49190613260565b60405180910390f35b34801561020957600080fd5b50610224600480360381019061021f9190612c11565b61074a565b6040516102319190613260565b60405180910390f35b34801561024657600080fd5b5061024f6107c4565b60405161025c919061327b565b60405180910390f35b34801561027157600080fd5b5061028c60048036038101906102879190612ca8565b610856565b60405161029991906131de565b60405180910390f35b3480156102ae57600080fd5b506102c960048036038101906102c49190612bac565b6108db565b005b3480156102d757600080fd5b506102e06109f3565b6040516102ed919061357d565b60405180910390f35b34801561030257600080fd5b5061031d60048036038101906103189190612be8565b610a00565b005b34801561032b57600080fd5b5061034660048036038101906103419190612aa6565b610a99565b005b34801561035457600080fd5b5061036f600480360381019061036a9190612bac565b610af9565b60405161037c919061357d565b60405180910390f35b34801561039157600080fd5b506103ac60048036038101906103a79190612c63565b610b9e565b005b3480156103ba57600080fd5b506103c3610c30565b005b3480156103d157600080fd5b506103ec60048036038101906103e79190612aa6565b610d7d565b005b3480156103fa57600080fd5b50610403610d9d565b604051610410919061357d565b60405180910390f35b34801561042557600080fd5b50610440600480360381019061043b9190612ca8565b610da3565b60405161044d919061357d565b60405180910390f35b34801561046257600080fd5b5061047d60048036038101906104789190612ca8565b610e3a565b60405161048a91906131de565b60405180910390f35b34801561049f57600080fd5b506104a8610eec565b6040516104b5919061357d565b60405180910390f35b3480156104ca57600080fd5b506104e560048036038101906104e09190612a41565b610ef2565b6040516104f2919061357d565b60405180910390f35b34801561050757600080fd5b50610510610faa565b005b34801561051e57600080fd5b50610527611032565b604051610534919061357d565b60405180910390f35b34801561054957600080fd5b50610552611038565b60405161055f91906131f9565b60405180910390f35b34801561057457600080fd5b5061057d61105e565b60405161058a91906131de565b60405180910390f35b34801561059f57600080fd5b506105a8611088565b6040516105b5919061327b565b60405180910390f35b6105d860048036038101906105d39190612ca8565b61111a565b005b3480156105e657600080fd5b5061060160048036038101906105fc9190612b70565b611348565b005b34801561060f57600080fd5b5061062a60048036038101906106259190612af5565b61135e565b005b34801561063857600080fd5b50610653600480360381019061064e9190612ca8565b6113c0565b604051610660919061327b565b60405180910390f35b34801561067557600080fd5b5061067e61143c565b60405161068b919061357d565b60405180910390f35b3480156106a057600080fd5b506106bb60048036038101906106b69190612a6a565b611442565b6040516106c89190613260565b60405180910390f35b3480156106dd57600080fd5b506106f860048036038101906106f39190612a41565b6114d6565b604051610705919061357d565b60405180910390f35b34801561071a57600080fd5b5061073560048036038101906107309190612a41565b6114ee565b005b600f60009054906101000a900460ff1681565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107bd57506107bc826115e6565b5b9050919050565b6060600080546107d39061382e565b80601f01602080910402602001604051908101604052809291908181526020018280546107ff9061382e565b801561084c5780601f106108215761010080835404028352916020019161084c565b820191906000526020600020905b81548152906001019060200180831161082f57829003601f168201915b5050505050905090565b6000610861826116c8565b6108a0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108979061347d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e682610e3a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610957576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094e906134fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610976611734565b73ffffffffffffffffffffffffffffffffffffffff1614806109a557506109a48161099f611734565b611442565b5b6109e4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109db906133dd565b60405180910390fd5b6109ee838361173c565b505050565b6000600880549050905090565b610a08611734565b73ffffffffffffffffffffffffffffffffffffffff16610a2661105e565b73ffffffffffffffffffffffffffffffffffffffff1614610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a739061349d565b60405180910390fd5b80600f60006101000a81548160ff02191690831515021790555050565b610aaa610aa4611734565b826117f5565b610ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae09061353d565b60405180910390fd5b610af48383836118d3565b505050565b6000610b0483610ef2565b8210610b45576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3c9061329d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610ba6611734565b73ffffffffffffffffffffffffffffffffffffffff16610bc461105e565b73ffffffffffffffffffffffffffffffffffffffff1614610c1a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c119061349d565b60405180910390fd5b818160109190610c2b929190612883565b505050565b610c38611734565b73ffffffffffffffffffffffffffffffffffffffff16610c5661105e565b73ffffffffffffffffffffffffffffffffffffffff1614610cac576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ca39061349d565b60405180910390fd5b6000601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610cf4906131c9565b60006040518083038185875af1925050503d8060008114610d31576040519150601f19603f3d011682016040523d82523d6000602084013e610d36565b606091505b5050905080610d7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d719061343d565b60405180910390fd5b50565b610d988383836040518060200160405280600081525061135e565b505050565b600e5481565b6000610dad6109f3565b8210610dee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610de59061355d565b60405180910390fd5b60088281548110610e28577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eda9061341d565b60405180910390fd5b80915050919050565b600b5481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f63576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f5a906133fd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fb2611734565b73ffffffffffffffffffffffffffffffffffffffff16610fd061105e565b73ffffffffffffffffffffffffffffffffffffffff1614611026576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101d9061349d565b60405180910390fd5b6110306000611b3a565b565b600c5481565b601160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546110979061382e565b80601f01602080910402602001604051908101604052809291908181526020018280546110c39061382e565b80156111105780601f106110e557610100808354040283529160200191611110565b820191906000526020600020905b8154815290600101906020018083116110f357829003601f168201915b5050505050905090565b600f60009054906101000a900460ff16611169576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611160906133bd565b60405180910390fd5b600b548161117791906136d8565b34146111b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111af906134bd565b60405180910390fd5b600d5481600c546111c99190613651565b111561120a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112019061331d565b60405180910390fd5b600e5481601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020546112589190613651565b1115611299576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112909061351d565b60405180910390fd5b60005b818110156113445760006001600c546112b59190613651565b9050600c60008154809291906112ca90613891565b91905055506001601260003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461131f9190613651565b925050819055506113303382611c00565b50808061133c90613891565b91505061129c565b5050565b61135a611353611734565b8383611c1e565b5050565b61136f611369611734565b836117f5565b6113ae576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113a59061353d565b60405180910390fd5b6113ba84848484611d8b565b50505050565b60606113cb826116c8565b61140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906134dd565b60405180910390fd5b601061141583611de7565b60405160200161142692919061319a565b6040516020818303038152906040529050919050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b60126020528060005260406000206000915090505481565b6114f6611734565b73ffffffffffffffffffffffffffffffffffffffff1661151461105e565b73ffffffffffffffffffffffffffffffffffffffff161461156a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115619061349d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156115da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115d1906132dd565b60405180910390fd5b6115e381611b3a565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806116b157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806116c157506116c082611f94565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166117af83610e3a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611800826116c8565b61183f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118369061339d565b60405180910390fd5b600061184a83610e3a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806118b957508373ffffffffffffffffffffffffffffffffffffffff166118a184610856565b73ffffffffffffffffffffffffffffffffffffffff16145b806118ca57506118c98185611442565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166118f382610e3a565b73ffffffffffffffffffffffffffffffffffffffff1614611949576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611940906132fd565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b09061335d565b60405180910390fd5b6119c4838383611ffe565b6119cf60008261173c565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a1f9190613732565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611a769190613651565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611b35838383612112565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611c1a828260405180602001604052806000815250612117565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c8d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c849061337d565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611d7e9190613260565b60405180910390a3505050565b611d968484846118d3565b611da284848484612172565b611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906132bd565b60405180910390fd5b50505050565b60606000821415611e2f576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050611f8f565b600082905060005b60008214611e61578080611e4a90613891565b915050600a82611e5a91906136a7565b9150611e37565b60008167ffffffffffffffff811115611ea3577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015611ed55781602001600182028036833780820191505090505b5090505b60008514611f8857600182611eee9190613732565b9150600a85611efd91906138da565b6030611f099190613651565b60f81b818381518110611f45577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85611f8191906136a7565b9450611ed9565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612009838383612309565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561204c576120478161230e565b61208b565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161461208a576120898382612357565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156120ce576120c9816124c4565b61210d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161461210c5761210b8282612607565b5b5b505050565b505050565b6121218383612686565b61212e6000848484612172565b61216d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612164906132bd565b60405180910390fd5b505050565b60006121938473ffffffffffffffffffffffffffffffffffffffff16612860565b156122fc578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026121bc611734565b8786866040518563ffffffff1660e01b81526004016121de9493929190613214565b602060405180830381600087803b1580156121f857600080fd5b505af192505050801561222957506040513d601f19601f820116820180604052508101906122269190612c3a565b60015b6122ac573d8060008114612259576040519150601f19603f3d011682016040523d82523d6000602084013e61225e565b606091505b506000815114156122a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229b906132bd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612301565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161236484610ef2565b61236e9190613732565b9050600060076000848152602001908152602001600020549050818114612453576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506124d89190613732565b905060006009600084815260200190815260200160002054905060006008838154811061252e577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020015490508060088381548110612576577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806125eb577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061261283610ef2565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156126f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126ed9061345d565b60405180910390fd5b6126ff816116c8565b1561273f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127369061333d565b60405180910390fd5b61274b60008383611ffe565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461279b9190613651565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a461285c60008383612112565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461288f9061382e565b90600052602060002090601f0160209004810192826128b157600085556128f8565b82601f106128ca57803560ff19168380011785556128f8565b828001600101855582156128f8579182015b828111156128f75782358255916020019190600101906128dc565b5b5090506129059190612909565b5090565b5b8082111561292257600081600090555060010161290a565b5090565b6000612939612934846135bd565b613598565b90508281526020810184848401111561295157600080fd5b61295c8482856137ec565b509392505050565b60008135905061297381613fa1565b92915050565b60008135905061298881613fb8565b92915050565b60008135905061299d81613fcf565b92915050565b6000815190506129b281613fcf565b92915050565b600082601f8301126129c957600080fd5b81356129d9848260208601612926565b91505092915050565b60008083601f8401126129f457600080fd5b8235905067ffffffffffffffff811115612a0d57600080fd5b602083019150836001820283011115612a2557600080fd5b9250929050565b600081359050612a3b81613fe6565b92915050565b600060208284031215612a5357600080fd5b6000612a6184828501612964565b91505092915050565b60008060408385031215612a7d57600080fd5b6000612a8b85828601612964565b9250506020612a9c85828601612964565b9150509250929050565b600080600060608486031215612abb57600080fd5b6000612ac986828701612964565b9350506020612ada86828701612964565b9250506040612aeb86828701612a2c565b9150509250925092565b60008060008060808587031215612b0b57600080fd5b6000612b1987828801612964565b9450506020612b2a87828801612964565b9350506040612b3b87828801612a2c565b925050606085013567ffffffffffffffff811115612b5857600080fd5b612b64878288016129b8565b91505092959194509250565b60008060408385031215612b8357600080fd5b6000612b9185828601612964565b9250506020612ba285828601612979565b9150509250929050565b60008060408385031215612bbf57600080fd5b6000612bcd85828601612964565b9250506020612bde85828601612a2c565b9150509250929050565b600060208284031215612bfa57600080fd5b6000612c0884828501612979565b91505092915050565b600060208284031215612c2357600080fd5b6000612c318482850161298e565b91505092915050565b600060208284031215612c4c57600080fd5b6000612c5a848285016129a3565b91505092915050565b60008060208385031215612c7657600080fd5b600083013567ffffffffffffffff811115612c9057600080fd5b612c9c858286016129e2565b92509250509250929050565b600060208284031215612cba57600080fd5b6000612cc884828501612a2c565b91505092915050565b612cda81613778565b82525050565b612ce981613766565b82525050565b612cf88161378a565b82525050565b6000612d0982613603565b612d138185613619565b9350612d238185602086016137fb565b612d2c816139c7565b840191505092915050565b6000612d428261360e565b612d4c8185613635565b9350612d5c8185602086016137fb565b612d65816139c7565b840191505092915050565b6000612d7b8261360e565b612d858185613646565b9350612d958185602086016137fb565b80840191505092915050565b60008154612dae8161382e565b612db88186613646565b94506001821660008114612dd35760018114612de457612e17565b60ff19831686528186019350612e17565b612ded856135ee565b60005b83811015612e0f57815481890152600182019150602081019050612df0565b838801955050505b50505092915050565b6000612e2d602b83613635565b9150612e38826139d8565b604082019050919050565b6000612e50603283613635565b9150612e5b82613a27565b604082019050919050565b6000612e73602683613635565b9150612e7e82613a76565b604082019050919050565b6000612e96602583613635565b9150612ea182613ac5565b604082019050919050565b6000612eb9600983613635565b9150612ec482613b14565b602082019050919050565b6000612edc601c83613635565b9150612ee782613b3d565b602082019050919050565b6000612eff602483613635565b9150612f0a82613b66565b604082019050919050565b6000612f22601983613635565b9150612f2d82613bb5565b602082019050919050565b6000612f45602c83613635565b9150612f5082613bde565b604082019050919050565b6000612f68601883613635565b9150612f7382613c2d565b602082019050919050565b6000612f8b603883613635565b9150612f9682613c56565b604082019050919050565b6000612fae602a83613635565b9150612fb982613ca5565b604082019050919050565b6000612fd1602983613635565b9150612fdc82613cf4565b604082019050919050565b6000612ff4601383613635565b9150612fff82613d43565b602082019050919050565b6000613017602083613635565b915061302282613d6c565b602082019050919050565b600061303a602c83613635565b915061304582613d95565b604082019050919050565b600061305d600583613646565b915061306882613de4565b600582019050919050565b6000613080602083613635565b915061308b82613e0d565b602082019050919050565b60006130a3601183613635565b91506130ae82613e36565b602082019050919050565b60006130c6601783613635565b91506130d182613e5f565b602082019050919050565b60006130e9602183613635565b91506130f482613e88565b604082019050919050565b600061310c601b83613635565b915061311782613ed7565b602082019050919050565b600061312f60008361362a565b915061313a82613f00565b600082019050919050565b6000613152603183613635565b915061315d82613f03565b604082019050919050565b6000613175602c83613635565b915061318082613f52565b604082019050919050565b613194816137e2565b82525050565b60006131a68285612da1565b91506131b28284612d70565b91506131bd82613050565b91508190509392505050565b60006131d482613122565b9150819050919050565b60006020820190506131f36000830184612ce0565b92915050565b600060208201905061320e6000830184612cd1565b92915050565b60006080820190506132296000830187612ce0565b6132366020830186612ce0565b613243604083018561318b565b81810360608301526132558184612cfe565b905095945050505050565b60006020820190506132756000830184612cef565b92915050565b600060208201905081810360008301526132958184612d37565b905092915050565b600060208201905081810360008301526132b681612e20565b9050919050565b600060208201905081810360008301526132d681612e43565b9050919050565b600060208201905081810360008301526132f681612e66565b9050919050565b6000602082019050818103600083015261331681612e89565b9050919050565b6000602082019050818103600083015261333681612eac565b9050919050565b6000602082019050818103600083015261335681612ecf565b9050919050565b6000602082019050818103600083015261337681612ef2565b9050919050565b6000602082019050818103600083015261339681612f15565b9050919050565b600060208201905081810360008301526133b681612f38565b9050919050565b600060208201905081810360008301526133d681612f5b565b9050919050565b600060208201905081810360008301526133f681612f7e565b9050919050565b6000602082019050818103600083015261341681612fa1565b9050919050565b6000602082019050818103600083015261343681612fc4565b9050919050565b6000602082019050818103600083015261345681612fe7565b9050919050565b600060208201905081810360008301526134768161300a565b9050919050565b600060208201905081810360008301526134968161302d565b9050919050565b600060208201905081810360008301526134b681613073565b9050919050565b600060208201905081810360008301526134d681613096565b9050919050565b600060208201905081810360008301526134f6816130b9565b9050919050565b60006020820190508181036000830152613516816130dc565b9050919050565b60006020820190508181036000830152613536816130ff565b9050919050565b6000602082019050818103600083015261355681613145565b9050919050565b6000602082019050818103600083015261357681613168565b9050919050565b6000602082019050613592600083018461318b565b92915050565b60006135a26135b3565b90506135ae8282613860565b919050565b6000604051905090565b600067ffffffffffffffff8211156135d8576135d7613998565b5b6135e1826139c7565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b600061365c826137e2565b9150613667836137e2565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561369c5761369b61390b565b5b828201905092915050565b60006136b2826137e2565b91506136bd836137e2565b9250826136cd576136cc61393a565b5b828204905092915050565b60006136e3826137e2565b91506136ee836137e2565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156137275761372661390b565b5b828202905092915050565b600061373d826137e2565b9150613748836137e2565b92508282101561375b5761375a61390b565b5b828203905092915050565b6000613771826137c2565b9050919050565b6000613783826137c2565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156138195780820151818401526020810190506137fe565b83811115613828576000848401525b50505050565b6000600282049050600182168061384657607f821691505b6020821081141561385a57613859613969565b5b50919050565b613869826139c7565b810181811067ffffffffffffffff8211171561388857613887613998565b5b80604052505050565b600061389c826137e2565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156138cf576138ce61390b565b5b600182019050919050565b60006138e5826137e2565b91506138f0836137e2565b925082613900576138ff61393a565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f536f6c64204f7574210000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4d696e74696e67206e6f7420656e61626c656420796574210000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f5769746864726177206661696c6564203a602800000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f57726f6e67206d696e742076616c756521000000000000000000000000000000600082015250565b7f546f6b656e20646f65736e277420657869737420796f21000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4578636565646564206d61782077616c6c657420616d6f756e74210000000000600082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b613faa81613766565b8114613fb557600080fd5b50565b613fc18161378a565b8114613fcc57600080fd5b50565b613fd881613796565b8114613fe357600080fd5b50565b613fef816137e2565b8114613ffa57600080fd5b5056fea26469706673582212204b363768e09ce53eacc773ea70e402068681d33d10dc871b125a50d031a8583964736f6c63430008040033
Deployed Bytecode Sourcemap
45220:1949:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45407:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36598:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22695:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24254:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23777:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37238:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45836:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25004:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36906:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45983:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46366:182;;;;;;;;;;;;;:::i;:::-;;25414:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45373:27;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37428:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22389:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45276:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22119:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44343:103;;;;;;;;;;;;;:::i;:::-;;45307:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45480:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43692:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22864:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46556:610;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24547:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25670:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46113:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45342:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24773:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45524:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44601:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45407:31;;;;;;;;;;;;;:::o;36598:224::-;36700:4;36739:35;36724:50;;;:11;:50;;;;:90;;;;36778:36;36802:11;36778:23;:36::i;:::-;36724:90;36717:97;;36598:224;;;:::o;22695:100::-;22749:13;22782:5;22775:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22695:100;:::o;24254:221::-;24330:7;24358:16;24366:7;24358;:16::i;:::-;24350:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24443:15;:24;24459:7;24443:24;;;;;;;;;;;;;;;;;;;;;24436:31;;24254:221;;;:::o;23777:411::-;23858:13;23874:23;23889:7;23874:14;:23::i;:::-;23858:39;;23922:5;23916:11;;:2;:11;;;;23908:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24016:5;24000:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24025:37;24042:5;24049:12;:10;:12::i;:::-;24025:16;:37::i;:::-;24000:62;23978:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;24159:21;24168:2;24172:7;24159:8;:21::i;:::-;23777:411;;;:::o;37238:113::-;37299:7;37326:10;:17;;;;37319:24;;37238:113;:::o;45836:139::-;43923:12;:10;:12::i;:::-;43912:23;;:7;:5;:7::i;:::-;:23;;;43904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45947:20:::1;45925:19;;:42;;;;;;;;;;;;;;;;;;45836:139:::0;:::o;25004:339::-;25199:41;25218:12;:10;:12::i;:::-;25232:7;25199:18;:41::i;:::-;25191:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25307:28;25317:4;25323:2;25327:7;25307:9;:28::i;:::-;25004:339;;;:::o;36906:256::-;37003:7;37039:23;37056:5;37039:16;:23::i;:::-;37031:5;:31;37023:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;37128:12;:19;37141:5;37128:19;;;;;;;;;;;;;;;:26;37148:5;37128:26;;;;;;;;;;;;37121:33;;36906:256;;;;:::o;45983:122::-;43923:12;:10;:12::i;:::-;43912:23;;:7;:5;:7::i;:::-;:23;;;43904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46084:13:::1;;46069:12;:28;;;;;;;:::i;:::-;;45983:122:::0;;:::o;46366:182::-;43923:12;:10;:12::i;:::-;43912:23;;:7;:5;:7::i;:::-;:23;;;43904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46417:12:::1;46435:14;;;;;;;;;;;:19;;46463:21;46435:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46416:74;;;46509:7;46501:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;43983:1;46366:182::o:0;25414:185::-;25552:39;25569:4;25575:2;25579:7;25552:39;;;;;;;;;;;;:16;:39::i;:::-;25414:185;;;:::o;45373:27::-;;;;:::o;37428:233::-;37503:7;37539:30;:28;:30::i;:::-;37531:5;:38;37523:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37636:10;37647:5;37636:17;;;;;;;;;;;;;;;;;;;;;;;;37629:24;;37428:233;;;:::o;22389:239::-;22461:7;22481:13;22497:7;:16;22505:7;22497:16;;;;;;;;;;;;;;;;;;;;;22481:32;;22549:1;22532:19;;:5;:19;;;;22524:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;22615:5;22608:12;;;22389:239;;;:::o;45276:24::-;;;;:::o;22119:208::-;22191:7;22236:1;22219:19;;:5;:19;;;;22211:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;22303:9;:16;22313:5;22303:16;;;;;;;;;;;;;;;;22296:23;;22119:208;;;:::o;44343:103::-;43923:12;:10;:12::i;:::-;43912:23;;:7;:5;:7::i;:::-;:23;;;43904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44408:30:::1;44435:1;44408:18;:30::i;:::-;44343:103::o:0;45307:28::-;;;;:::o;45480:37::-;;;;;;;;;;;;;:::o;43692:87::-;43738:7;43765:6;;;;;;;;;;;43758:13;;43692:87;:::o;22864:104::-;22920:13;22953:7;22946:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22864:104;:::o;46556:610::-;46623:19;;;;;;;;;;;46615:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46715:9;;46703;:21;;;;:::i;:::-;46690:9;:34;46682:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;46794:9;;46781;46765:13;;:25;;;;:::i;:::-;:38;;46757:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46875:12;;46862:9;46836:11;:23;46848:10;46836:23;;;;;;;;;;;;;;;;:35;;;;:::i;:::-;:51;;46828:91;;;;;;;;;;;;:::i;:::-;;;;;;;;;46937:9;46932:225;46956:9;46952:1;:13;46932:225;;;46986:18;47023:1;47007:13;;:17;;;;:::i;:::-;46986:38;;47039:13;;:15;;;;;;;;;:::i;:::-;;;;;;47096:1;47069:11;:23;47081:10;47069:23;;;;;;;;;;;;;;;;:28;;;;;;;:::i;:::-;;;;;;;;47112:33;47122:10;47134;47112:9;:33::i;:::-;46932:225;46967:3;;;;;:::i;:::-;;;;46932:225;;;;46556:610;:::o;24547:155::-;24642:52;24661:12;:10;:12::i;:::-;24675:8;24685;24642:18;:52::i;:::-;24547:155;;:::o;25670:328::-;25845:41;25864:12;:10;:12::i;:::-;25878:7;25845:18;:41::i;:::-;25837:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;25951:39;25965:4;25971:2;25975:7;25984:5;25951:13;:39::i;:::-;25670:328;;;;:::o;46113:245::-;46179:13;46212:17;46220:8;46212:7;:17::i;:::-;46204:53;;;;;;;;;;;;:::i;:::-;;;;;;;;;46299:12;46313:26;46330:8;46313:16;:26::i;:::-;46282:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46268:82;;46113:245;;;:::o;45342:24::-;;;;:::o;24773:164::-;24870:4;24894:18;:25;24913:5;24894:25;;;;;;;;;;;;;;;:35;24920:8;24894:35;;;;;;;;;;;;;;;;;;;;;;;;;24887:42;;24773:164;;;;:::o;45524:46::-;;;;;;;;;;;;;;;;;:::o;44601:201::-;43923:12;:10;:12::i;:::-;43912:23;;:7;:5;:7::i;:::-;:23;;;43904:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44710:1:::1;44690:22;;:8;:22;;;;44682:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44766:28;44785:8;44766:18;:28::i;:::-;44601:201:::0;:::o;21750:305::-;21852:4;21904:25;21889:40;;;:11;:40;;;;:105;;;;21961:33;21946:48;;;:11;:48;;;;21889:105;:158;;;;22011:36;22035:11;22011:23;:36::i;:::-;21889:158;21869:178;;21750:305;;;:::o;27508:127::-;27573:4;27625:1;27597:30;;:7;:16;27605:7;27597:16;;;;;;;;;;;;;;;;;;;;;:30;;;;27590:37;;27508:127;;;:::o;17383:98::-;17436:7;17463:10;17456:17;;17383:98;:::o;31654:174::-;31756:2;31729:15;:24;31745:7;31729:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31812:7;31808:2;31774:46;;31783:23;31798:7;31783:14;:23::i;:::-;31774:46;;;;;;;;;;;;31654:174;;:::o;27802:348::-;27895:4;27920:16;27928:7;27920;:16::i;:::-;27912:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27996:13;28012:23;28027:7;28012:14;:23::i;:::-;27996:39;;28065:5;28054:16;;:7;:16;;;:51;;;;28098:7;28074:31;;:20;28086:7;28074:11;:20::i;:::-;:31;;;28054:51;:87;;;;28109:32;28126:5;28133:7;28109:16;:32::i;:::-;28054:87;28046:96;;;27802:348;;;;:::o;30911:625::-;31070:4;31043:31;;:23;31058:7;31043:14;:23::i;:::-;:31;;;31035:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;31149:1;31135:16;;:2;:16;;;;31127:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;31205:39;31226:4;31232:2;31236:7;31205:20;:39::i;:::-;31309:29;31326:1;31330:7;31309:8;:29::i;:::-;31370:1;31351:9;:15;31361:4;31351:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31399:1;31382:9;:13;31392:2;31382:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31430:2;31411:7;:16;31419:7;31411:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31469:7;31465:2;31450:27;;31459:4;31450:27;;;;;;;;;;;;31490:38;31510:4;31516:2;31520:7;31490:19;:38::i;:::-;30911:625;;;:::o;44962:191::-;45036:16;45055:6;;;;;;;;;;;45036:25;;45081:8;45072:6;;:17;;;;;;;;;;;;;;;;;;45136:8;45105:40;;45126:8;45105:40;;;;;;;;;;;;44962:191;;:::o;28492:110::-;28568:26;28578:2;28582:7;28568:26;;;;;;;;;;;;:9;:26::i;:::-;28492:110;;:::o;31970:315::-;32125:8;32116:17;;:5;:17;;;;32108:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32212:8;32174:18;:25;32193:5;32174:25;;;;;;;;;;;;;;;:35;32200:8;32174:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;32258:8;32236:41;;32251:5;32236:41;;;32268:8;32236:41;;;;;;:::i;:::-;;;;;;;;31970:315;;;:::o;26880:::-;27037:28;27047:4;27053:2;27057:7;27037:9;:28::i;:::-;27084:48;27107:4;27113:2;27117:7;27126:5;27084:22;:48::i;:::-;27076:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;26880:315;;;;:::o;17850:723::-;17906:13;18136:1;18127:5;:10;18123:53;;;18154:10;;;;;;;;;;;;;;;;;;;;;18123:53;18186:12;18201:5;18186:20;;18217:14;18242:78;18257:1;18249:4;:9;18242:78;;18275:8;;;;;:::i;:::-;;;;18306:2;18298:10;;;;;:::i;:::-;;;18242:78;;;18330:19;18362:6;18352:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;18330:39;;18380:154;18396:1;18387:5;:10;18380:154;;18424:1;18414:11;;;;;:::i;:::-;;;18491:2;18483:5;:10;;;;:::i;:::-;18470:2;:24;;;;:::i;:::-;18457:39;;18440:6;18447;18440:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;18520:2;18511:11;;;;;:::i;:::-;;;18380:154;;;18558:6;18544:21;;;;;17850:723;;;;:::o;20334:157::-;20419:4;20458:25;20443:40;;;:11;:40;;;;20436:47;;20334:157;;;:::o;38274:589::-;38418:45;38445:4;38451:2;38455:7;38418:26;:45::i;:::-;38496:1;38480:18;;:4;:18;;;38476:187;;;38515:40;38547:7;38515:31;:40::i;:::-;38476:187;;;38585:2;38577:10;;:4;:10;;;38573:90;;38604:47;38637:4;38643:7;38604:32;:47::i;:::-;38573:90;38476:187;38691:1;38677:16;;:2;:16;;;38673:183;;;38710:45;38747:7;38710:36;:45::i;:::-;38673:183;;;38783:4;38777:10;;:2;:10;;;38773:83;;38804:40;38832:2;38836:7;38804:27;:40::i;:::-;38773:83;38673:183;38274:589;;;:::o;34732:125::-;;;;:::o;28829:321::-;28959:18;28965:2;28969:7;28959:5;:18::i;:::-;29010:54;29041:1;29045:2;29049:7;29058:5;29010:22;:54::i;:::-;28988:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;28829:321;;;:::o;32850:799::-;33005:4;33026:15;:2;:13;;;:15::i;:::-;33022:620;;;33078:2;33062:36;;;33099:12;:10;:12::i;:::-;33113:4;33119:7;33128:5;33062:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33058:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;33321:1;33304:6;:13;:18;33300:272;;;33347:60;;;;;;;;;;:::i;:::-;;;;;;;;33300:272;33522:6;33516:13;33507:6;33503:2;33499:15;33492:38;33058:529;33195:41;;;33185:51;;;:6;:51;;;;33178:58;;;;;33022:620;33626:4;33619:11;;32850:799;;;;;;;:::o;34221:126::-;;;;:::o;39586:164::-;39690:10;:17;;;;39663:15;:24;39679:7;39663:24;;;;;;;;;;;:44;;;;39718:10;39734:7;39718:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39586:164;:::o;40377:988::-;40643:22;40693:1;40668:22;40685:4;40668:16;:22::i;:::-;:26;;;;:::i;:::-;40643:51;;40705:18;40726:17;:26;40744:7;40726:26;;;;;;;;;;;;40705:47;;40873:14;40859:10;:28;40855:328;;40904:19;40926:12;:18;40939:4;40926:18;;;;;;;;;;;;;;;:34;40945:14;40926:34;;;;;;;;;;;;40904:56;;41010:11;40977:12;:18;40990:4;40977:18;;;;;;;;;;;;;;;:30;40996:10;40977:30;;;;;;;;;;;:44;;;;41127:10;41094:17;:30;41112:11;41094:30;;;;;;;;;;;:43;;;;40855:328;;41279:17;:26;41297:7;41279:26;;;;;;;;;;;41272:33;;;41323:12;:18;41336:4;41323:18;;;;;;;;;;;;;;;:34;41342:14;41323:34;;;;;;;;;;;41316:41;;;40377:988;;;;:::o;41660:1079::-;41913:22;41958:1;41938:10;:17;;;;:21;;;;:::i;:::-;41913:46;;41970:18;41991:15;:24;42007:7;41991:24;;;;;;;;;;;;41970:45;;42342:19;42364:10;42375:14;42364:26;;;;;;;;;;;;;;;;;;;;;;;;42342:48;;42428:11;42403:10;42414;42403:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;42539:10;42508:15;:28;42524:11;42508:28;;;;;;;;;;;:41;;;;42680:15;:24;42696:7;42680:24;;;;;;;;;;;42673:31;;;42715:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41660:1079;;;;:::o;39164:221::-;39249:14;39266:20;39283:2;39266:16;:20::i;:::-;39249:37;;39324:7;39297:12;:16;39310:2;39297:16;;;;;;;;;;;;;;;:24;39314:6;39297:24;;;;;;;;;;;:34;;;;39371:6;39342:17;:26;39360:7;39342:26;;;;;;;;;;;:35;;;;39164:221;;;:::o;29486:439::-;29580:1;29566:16;;:2;:16;;;;29558:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29639:16;29647:7;29639;:16::i;:::-;29638:17;29630:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;29701:45;29730:1;29734:2;29738:7;29701:20;:45::i;:::-;29776:1;29759:9;:13;29769:2;29759:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29807:2;29788:7;:16;29796:7;29788:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29852:7;29848:2;29827:33;;29844:1;29827:33;;;;;;;;;;;;29873:44;29901:1;29905:2;29909:7;29873:19;:44::i;:::-;29486:439;;:::o;9546:326::-;9606:4;9863:1;9841:7;:19;;;:23;9834:30;;9546:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343: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:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:139::-;402:5;440:6;427:20;418:29;;456:33;483:5;456:33;:::i;:::-;408:87;;;;:::o;501:133::-;544:5;582:6;569:20;560:29;;598:30;622:5;598:30;:::i;:::-;550:84;;;;:::o;640:137::-;685:5;723:6;710:20;701:29;;739:32;765:5;739:32;:::i;:::-;691:86;;;;:::o;783:141::-;839:5;870:6;864:13;855:22;;886:32;912:5;886:32;:::i;:::-;845:79;;;;:::o;943:271::-;998:5;1047:3;1040:4;1032:6;1028:17;1024:27;1014:2;;1065:1;1062;1055:12;1014:2;1105:6;1092:20;1130:78;1204:3;1196:6;1189:4;1181:6;1177:17;1130:78;:::i;:::-;1121:87;;1004:210;;;;;:::o;1234:352::-;1292:8;1302:6;1352:3;1345:4;1337:6;1333:17;1329:27;1319:2;;1370:1;1367;1360:12;1319:2;1406:6;1393:20;1383:30;;1436:18;1428:6;1425:30;1422:2;;;1468:1;1465;1458:12;1422:2;1505:4;1497:6;1493:17;1481:29;;1559:3;1551:4;1543:6;1539:17;1529:8;1525:32;1522:41;1519:2;;;1576:1;1573;1566:12;1519:2;1309:277;;;;;:::o;1592:139::-;1638:5;1676:6;1663:20;1654:29;;1692:33;1719:5;1692:33;:::i;:::-;1644:87;;;;:::o;1737:262::-;1796:6;1845:2;1833:9;1824:7;1820:23;1816:32;1813:2;;;1861:1;1858;1851:12;1813:2;1904:1;1929:53;1974:7;1965:6;1954:9;1950:22;1929:53;:::i;:::-;1919:63;;1875:117;1803:196;;;;:::o;2005:407::-;2073:6;2081;2130:2;2118:9;2109:7;2105:23;2101:32;2098:2;;;2146:1;2143;2136:12;2098:2;2189:1;2214:53;2259:7;2250:6;2239:9;2235:22;2214:53;:::i;:::-;2204:63;;2160:117;2316:2;2342:53;2387:7;2378:6;2367:9;2363:22;2342:53;:::i;:::-;2332:63;;2287:118;2088:324;;;;;:::o;2418:552::-;2495:6;2503;2511;2560:2;2548:9;2539:7;2535:23;2531:32;2528:2;;;2576:1;2573;2566:12;2528:2;2619:1;2644:53;2689:7;2680:6;2669:9;2665:22;2644:53;:::i;:::-;2634:63;;2590:117;2746:2;2772:53;2817:7;2808:6;2797:9;2793:22;2772:53;:::i;:::-;2762:63;;2717:118;2874:2;2900:53;2945:7;2936:6;2925:9;2921:22;2900:53;:::i;:::-;2890:63;;2845:118;2518:452;;;;;:::o;2976:809::-;3071:6;3079;3087;3095;3144:3;3132:9;3123:7;3119:23;3115:33;3112:2;;;3161:1;3158;3151:12;3112:2;3204:1;3229:53;3274:7;3265:6;3254:9;3250:22;3229:53;:::i;:::-;3219:63;;3175:117;3331:2;3357:53;3402:7;3393:6;3382:9;3378:22;3357:53;:::i;:::-;3347:63;;3302:118;3459:2;3485:53;3530:7;3521:6;3510:9;3506:22;3485:53;:::i;:::-;3475:63;;3430:118;3615:2;3604:9;3600:18;3587:32;3646:18;3638:6;3635:30;3632:2;;;3678:1;3675;3668:12;3632:2;3706:62;3760:7;3751:6;3740:9;3736:22;3706:62;:::i;:::-;3696:72;;3558:220;3102:683;;;;;;;:::o;3791:401::-;3856:6;3864;3913:2;3901:9;3892:7;3888:23;3884:32;3881:2;;;3929:1;3926;3919:12;3881:2;3972:1;3997:53;4042:7;4033:6;4022:9;4018:22;3997:53;:::i;:::-;3987:63;;3943:117;4099:2;4125:50;4167:7;4158:6;4147:9;4143:22;4125:50;:::i;:::-;4115:60;;4070:115;3871:321;;;;;:::o;4198:407::-;4266:6;4274;4323:2;4311:9;4302:7;4298:23;4294:32;4291:2;;;4339:1;4336;4329:12;4291:2;4382:1;4407:53;4452:7;4443:6;4432:9;4428:22;4407:53;:::i;:::-;4397:63;;4353:117;4509:2;4535:53;4580:7;4571:6;4560:9;4556:22;4535:53;:::i;:::-;4525:63;;4480:118;4281:324;;;;;:::o;4611:256::-;4667:6;4716:2;4704:9;4695:7;4691:23;4687:32;4684:2;;;4732:1;4729;4722:12;4684:2;4775:1;4800:50;4842:7;4833:6;4822:9;4818:22;4800:50;:::i;:::-;4790:60;;4746:114;4674:193;;;;:::o;4873:260::-;4931:6;4980:2;4968:9;4959:7;4955:23;4951:32;4948:2;;;4996:1;4993;4986:12;4948:2;5039:1;5064:52;5108:7;5099:6;5088:9;5084:22;5064:52;:::i;:::-;5054:62;;5010:116;4938:195;;;;:::o;5139:282::-;5208:6;5257:2;5245:9;5236:7;5232:23;5228:32;5225:2;;;5273:1;5270;5263:12;5225:2;5316:1;5341:63;5396:7;5387:6;5376:9;5372:22;5341:63;:::i;:::-;5331:73;;5287:127;5215:206;;;;:::o;5427:395::-;5498:6;5506;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5740:65;5797:7;5788:6;5777:9;5773:22;5740:65;:::i;:::-;5722:83;;;;5585:230;5513:309;;;;;:::o;5828:262::-;5887:6;5936:2;5924:9;5915:7;5911:23;5907:32;5904:2;;;5952:1;5949;5942:12;5904:2;5995:1;6020:53;6065:7;6056:6;6045:9;6041:22;6020:53;:::i;:::-;6010:63;;5966:117;5894:196;;;;:::o;6096:142::-;6199:32;6225:5;6199:32;:::i;:::-;6194:3;6187:45;6177:61;;:::o;6244:118::-;6331:24;6349:5;6331:24;:::i;:::-;6326:3;6319:37;6309:53;;:::o;6368:109::-;6449:21;6464:5;6449:21;:::i;:::-;6444:3;6437:34;6427:50;;:::o;6483:360::-;6569:3;6597:38;6629:5;6597:38;:::i;:::-;6651:70;6714:6;6709:3;6651:70;:::i;:::-;6644:77;;6730:52;6775:6;6770:3;6763:4;6756:5;6752:16;6730:52;:::i;:::-;6807:29;6829:6;6807:29;:::i;:::-;6802:3;6798:39;6791:46;;6573:270;;;;;:::o;6849:364::-;6937:3;6965:39;6998:5;6965:39;:::i;:::-;7020:71;7084:6;7079:3;7020:71;:::i;:::-;7013:78;;7100:52;7145:6;7140:3;7133:4;7126:5;7122:16;7100:52;:::i;:::-;7177:29;7199:6;7177:29;:::i;:::-;7172:3;7168:39;7161:46;;6941:272;;;;;:::o;7219:377::-;7325:3;7353:39;7386:5;7353:39;:::i;:::-;7408:89;7490:6;7485:3;7408:89;:::i;:::-;7401:96;;7506:52;7551:6;7546:3;7539:4;7532:5;7528:16;7506:52;:::i;:::-;7583:6;7578:3;7574:16;7567:23;;7329:267;;;;;:::o;7626:845::-;7729:3;7766:5;7760:12;7795:36;7821:9;7795:36;:::i;:::-;7847:89;7929:6;7924:3;7847:89;:::i;:::-;7840:96;;7967:1;7956:9;7952:17;7983:1;7978:137;;;;8129:1;8124:341;;;;7945:520;;7978:137;8062:4;8058:9;8047;8043:25;8038:3;8031:38;8098:6;8093:3;8089:16;8082:23;;7978:137;;8124:341;8191:38;8223:5;8191:38;:::i;:::-;8251:1;8265:154;8279:6;8276:1;8273:13;8265:154;;;8353:7;8347:14;8343:1;8338:3;8334:11;8327:35;8403:1;8394:7;8390:15;8379:26;;8301:4;8298:1;8294:12;8289:17;;8265:154;;;8448:6;8443:3;8439:16;8432:23;;8131:334;;7945:520;;7733:738;;;;;;:::o;8477:366::-;8619:3;8640:67;8704:2;8699:3;8640:67;:::i;:::-;8633:74;;8716:93;8805:3;8716:93;:::i;:::-;8834:2;8829:3;8825:12;8818:19;;8623:220;;;:::o;8849:366::-;8991:3;9012:67;9076:2;9071:3;9012:67;:::i;:::-;9005:74;;9088:93;9177:3;9088:93;:::i;:::-;9206:2;9201:3;9197:12;9190:19;;8995:220;;;:::o;9221:366::-;9363:3;9384:67;9448:2;9443:3;9384:67;:::i;:::-;9377:74;;9460:93;9549:3;9460:93;:::i;:::-;9578:2;9573:3;9569:12;9562:19;;9367:220;;;:::o;9593:366::-;9735:3;9756:67;9820:2;9815:3;9756:67;:::i;:::-;9749:74;;9832:93;9921:3;9832:93;:::i;:::-;9950:2;9945:3;9941:12;9934:19;;9739:220;;;:::o;9965:365::-;10107:3;10128:66;10192:1;10187:3;10128:66;:::i;:::-;10121:73;;10203:93;10292:3;10203:93;:::i;:::-;10321:2;10316:3;10312:12;10305:19;;10111:219;;;:::o;10336:366::-;10478:3;10499:67;10563:2;10558:3;10499:67;:::i;:::-;10492:74;;10575:93;10664:3;10575:93;:::i;:::-;10693:2;10688:3;10684:12;10677:19;;10482:220;;;:::o;10708:366::-;10850:3;10871:67;10935:2;10930:3;10871:67;:::i;:::-;10864:74;;10947:93;11036:3;10947:93;:::i;:::-;11065:2;11060:3;11056:12;11049:19;;10854:220;;;:::o;11080:366::-;11222:3;11243:67;11307:2;11302:3;11243:67;:::i;:::-;11236:74;;11319:93;11408:3;11319:93;:::i;:::-;11437:2;11432:3;11428:12;11421:19;;11226:220;;;:::o;11452:366::-;11594:3;11615:67;11679:2;11674:3;11615:67;:::i;:::-;11608:74;;11691:93;11780:3;11691:93;:::i;:::-;11809:2;11804:3;11800:12;11793:19;;11598:220;;;:::o;11824:366::-;11966:3;11987:67;12051:2;12046:3;11987:67;:::i;:::-;11980:74;;12063:93;12152:3;12063:93;:::i;:::-;12181:2;12176:3;12172:12;12165:19;;11970:220;;;:::o;12196:366::-;12338:3;12359:67;12423:2;12418:3;12359:67;:::i;:::-;12352:74;;12435:93;12524:3;12435:93;:::i;:::-;12553:2;12548:3;12544:12;12537:19;;12342:220;;;:::o;12568:366::-;12710:3;12731:67;12795:2;12790:3;12731:67;:::i;:::-;12724:74;;12807:93;12896:3;12807:93;:::i;:::-;12925:2;12920:3;12916:12;12909:19;;12714:220;;;:::o;12940:366::-;13082:3;13103:67;13167:2;13162:3;13103:67;:::i;:::-;13096:74;;13179:93;13268:3;13179:93;:::i;:::-;13297:2;13292:3;13288:12;13281:19;;13086:220;;;:::o;13312:366::-;13454:3;13475:67;13539:2;13534:3;13475:67;:::i;:::-;13468:74;;13551:93;13640:3;13551:93;:::i;:::-;13669:2;13664:3;13660:12;13653:19;;13458:220;;;:::o;13684:366::-;13826:3;13847:67;13911:2;13906:3;13847:67;:::i;:::-;13840:74;;13923:93;14012:3;13923:93;:::i;:::-;14041:2;14036:3;14032:12;14025:19;;13830:220;;;:::o;14056:366::-;14198:3;14219:67;14283:2;14278:3;14219:67;:::i;:::-;14212:74;;14295:93;14384:3;14295:93;:::i;:::-;14413:2;14408:3;14404:12;14397:19;;14202:220;;;:::o;14428:400::-;14588:3;14609:84;14691:1;14686:3;14609:84;:::i;:::-;14602:91;;14702:93;14791:3;14702:93;:::i;:::-;14820:1;14815:3;14811:11;14804:18;;14592:236;;;:::o;14834:366::-;14976:3;14997:67;15061:2;15056:3;14997:67;:::i;:::-;14990:74;;15073:93;15162:3;15073:93;:::i;:::-;15191:2;15186:3;15182:12;15175:19;;14980:220;;;:::o;15206:366::-;15348:3;15369:67;15433:2;15428:3;15369:67;:::i;:::-;15362:74;;15445:93;15534:3;15445:93;:::i;:::-;15563:2;15558:3;15554:12;15547:19;;15352:220;;;:::o;15578:366::-;15720:3;15741:67;15805:2;15800:3;15741:67;:::i;:::-;15734:74;;15817:93;15906:3;15817:93;:::i;:::-;15935:2;15930:3;15926:12;15919:19;;15724:220;;;:::o;15950:366::-;16092:3;16113:67;16177:2;16172:3;16113:67;:::i;:::-;16106:74;;16189:93;16278:3;16189:93;:::i;:::-;16307:2;16302:3;16298:12;16291:19;;16096:220;;;:::o;16322:366::-;16464:3;16485:67;16549:2;16544:3;16485:67;:::i;:::-;16478:74;;16561:93;16650:3;16561:93;:::i;:::-;16679:2;16674:3;16670:12;16663:19;;16468:220;;;:::o;16694:398::-;16853:3;16874:83;16955:1;16950:3;16874:83;:::i;:::-;16867:90;;16966:93;17055:3;16966:93;:::i;:::-;17084:1;17079:3;17075:11;17068:18;;16857:235;;;:::o;17098:366::-;17240:3;17261:67;17325:2;17320:3;17261:67;:::i;:::-;17254:74;;17337:93;17426:3;17337:93;:::i;:::-;17455:2;17450:3;17446:12;17439:19;;17244:220;;;:::o;17470:366::-;17612:3;17633:67;17697:2;17692:3;17633:67;:::i;:::-;17626:74;;17709:93;17798:3;17709:93;:::i;:::-;17827:2;17822:3;17818:12;17811:19;;17616:220;;;:::o;17842:118::-;17929:24;17947:5;17929:24;:::i;:::-;17924:3;17917:37;17907:53;;:::o;17966:695::-;18244:3;18266:92;18354:3;18345:6;18266:92;:::i;:::-;18259:99;;18375:95;18466:3;18457:6;18375:95;:::i;:::-;18368:102;;18487:148;18631:3;18487:148;:::i;:::-;18480:155;;18652:3;18645:10;;18248:413;;;;;:::o;18667:379::-;18851:3;18873:147;19016:3;18873:147;:::i;:::-;18866:154;;19037:3;19030:10;;18855:191;;;:::o;19052:222::-;19145:4;19183:2;19172:9;19168:18;19160:26;;19196:71;19264:1;19253:9;19249:17;19240:6;19196:71;:::i;:::-;19150:124;;;;:::o;19280:254::-;19389:4;19427:2;19416:9;19412:18;19404:26;;19440:87;19524:1;19513:9;19509:17;19500:6;19440:87;:::i;:::-;19394:140;;;;:::o;19540:640::-;19735:4;19773:3;19762:9;19758:19;19750:27;;19787:71;19855:1;19844:9;19840:17;19831:6;19787:71;:::i;:::-;19868:72;19936:2;19925:9;19921:18;19912:6;19868:72;:::i;:::-;19950;20018:2;20007:9;20003:18;19994:6;19950:72;:::i;:::-;20069:9;20063:4;20059:20;20054:2;20043:9;20039:18;20032:48;20097:76;20168:4;20159:6;20097:76;:::i;:::-;20089:84;;19740:440;;;;;;;:::o;20186:210::-;20273:4;20311:2;20300:9;20296:18;20288:26;;20324:65;20386:1;20375:9;20371:17;20362:6;20324:65;:::i;:::-;20278:118;;;;:::o;20402:313::-;20515:4;20553:2;20542:9;20538:18;20530:26;;20602:9;20596:4;20592:20;20588:1;20577:9;20573:17;20566:47;20630:78;20703:4;20694:6;20630:78;:::i;:::-;20622:86;;20520:195;;;;:::o;20721:419::-;20887:4;20925:2;20914:9;20910:18;20902:26;;20974:9;20968:4;20964:20;20960:1;20949:9;20945:17;20938:47;21002:131;21128:4;21002:131;:::i;:::-;20994:139;;20892:248;;;:::o;21146:419::-;21312:4;21350:2;21339:9;21335:18;21327:26;;21399:9;21393:4;21389:20;21385:1;21374:9;21370:17;21363:47;21427:131;21553:4;21427:131;:::i;:::-;21419:139;;21317:248;;;:::o;21571:419::-;21737:4;21775:2;21764:9;21760:18;21752:26;;21824:9;21818:4;21814:20;21810:1;21799:9;21795:17;21788:47;21852:131;21978:4;21852:131;:::i;:::-;21844:139;;21742:248;;;:::o;21996:419::-;22162:4;22200:2;22189:9;22185:18;22177:26;;22249:9;22243:4;22239:20;22235:1;22224:9;22220:17;22213:47;22277:131;22403:4;22277:131;:::i;:::-;22269:139;;22167:248;;;:::o;22421:419::-;22587:4;22625:2;22614:9;22610:18;22602:26;;22674:9;22668:4;22664:20;22660:1;22649:9;22645:17;22638:47;22702:131;22828:4;22702:131;:::i;:::-;22694:139;;22592:248;;;:::o;22846:419::-;23012:4;23050:2;23039:9;23035:18;23027:26;;23099:9;23093:4;23089:20;23085:1;23074:9;23070:17;23063:47;23127:131;23253:4;23127:131;:::i;:::-;23119:139;;23017:248;;;:::o;23271:419::-;23437:4;23475:2;23464:9;23460:18;23452:26;;23524:9;23518:4;23514:20;23510:1;23499:9;23495:17;23488:47;23552:131;23678:4;23552:131;:::i;:::-;23544:139;;23442:248;;;:::o;23696:419::-;23862:4;23900:2;23889:9;23885:18;23877:26;;23949:9;23943:4;23939:20;23935:1;23924:9;23920:17;23913:47;23977:131;24103:4;23977:131;:::i;:::-;23969:139;;23867:248;;;:::o;24121:419::-;24287:4;24325:2;24314:9;24310:18;24302:26;;24374:9;24368:4;24364:20;24360:1;24349:9;24345:17;24338:47;24402:131;24528:4;24402:131;:::i;:::-;24394:139;;24292:248;;;:::o;24546:419::-;24712:4;24750:2;24739:9;24735:18;24727:26;;24799:9;24793:4;24789:20;24785:1;24774:9;24770:17;24763:47;24827:131;24953:4;24827:131;:::i;:::-;24819:139;;24717:248;;;:::o;24971:419::-;25137:4;25175:2;25164:9;25160:18;25152:26;;25224:9;25218:4;25214:20;25210:1;25199:9;25195:17;25188:47;25252:131;25378:4;25252:131;:::i;:::-;25244:139;;25142:248;;;:::o;25396:419::-;25562:4;25600:2;25589:9;25585:18;25577:26;;25649:9;25643:4;25639:20;25635:1;25624:9;25620:17;25613:47;25677:131;25803:4;25677:131;:::i;:::-;25669:139;;25567:248;;;:::o;25821:419::-;25987:4;26025:2;26014:9;26010:18;26002:26;;26074:9;26068:4;26064:20;26060:1;26049:9;26045:17;26038:47;26102:131;26228:4;26102:131;:::i;:::-;26094:139;;25992:248;;;:::o;26246:419::-;26412:4;26450:2;26439:9;26435:18;26427:26;;26499:9;26493:4;26489:20;26485:1;26474:9;26470:17;26463:47;26527:131;26653:4;26527:131;:::i;:::-;26519:139;;26417:248;;;:::o;26671:419::-;26837:4;26875:2;26864:9;26860:18;26852:26;;26924:9;26918:4;26914:20;26910:1;26899:9;26895:17;26888:47;26952:131;27078:4;26952:131;:::i;:::-;26944:139;;26842:248;;;:::o;27096:419::-;27262:4;27300:2;27289:9;27285:18;27277:26;;27349:9;27343:4;27339:20;27335:1;27324:9;27320:17;27313:47;27377:131;27503:4;27377:131;:::i;:::-;27369:139;;27267:248;;;:::o;27521:419::-;27687:4;27725:2;27714:9;27710:18;27702:26;;27774:9;27768:4;27764:20;27760:1;27749:9;27745:17;27738:47;27802:131;27928:4;27802:131;:::i;:::-;27794:139;;27692:248;;;:::o;27946:419::-;28112:4;28150:2;28139:9;28135:18;28127:26;;28199:9;28193:4;28189:20;28185:1;28174:9;28170:17;28163:47;28227:131;28353:4;28227:131;:::i;:::-;28219:139;;28117:248;;;:::o;28371:419::-;28537:4;28575:2;28564:9;28560:18;28552:26;;28624:9;28618:4;28614:20;28610:1;28599:9;28595:17;28588:47;28652:131;28778:4;28652:131;:::i;:::-;28644:139;;28542:248;;;:::o;28796:419::-;28962:4;29000:2;28989:9;28985:18;28977:26;;29049:9;29043:4;29039:20;29035:1;29024:9;29020:17;29013:47;29077:131;29203:4;29077:131;:::i;:::-;29069:139;;28967:248;;;:::o;29221:419::-;29387:4;29425:2;29414:9;29410:18;29402:26;;29474:9;29468:4;29464:20;29460:1;29449:9;29445:17;29438:47;29502:131;29628:4;29502:131;:::i;:::-;29494:139;;29392:248;;;:::o;29646:419::-;29812:4;29850:2;29839:9;29835:18;29827:26;;29899:9;29893:4;29889:20;29885:1;29874:9;29870:17;29863:47;29927:131;30053:4;29927:131;:::i;:::-;29919:139;;29817:248;;;:::o;30071:419::-;30237:4;30275:2;30264:9;30260:18;30252:26;;30324:9;30318:4;30314:20;30310:1;30299:9;30295:17;30288:47;30352:131;30478:4;30352:131;:::i;:::-;30344:139;;30242:248;;;:::o;30496:222::-;30589:4;30627:2;30616:9;30612:18;30604:26;;30640:71;30708:1;30697:9;30693:17;30684:6;30640:71;:::i;:::-;30594:124;;;;:::o;30724:129::-;30758:6;30785:20;;:::i;:::-;30775:30;;30814:33;30842:4;30834:6;30814:33;:::i;:::-;30765:88;;;:::o;30859:75::-;30892:6;30925:2;30919:9;30909:19;;30899:35;:::o;30940:307::-;31001:4;31091:18;31083:6;31080:30;31077:2;;;31113:18;;:::i;:::-;31077:2;31151:29;31173:6;31151:29;:::i;:::-;31143:37;;31235:4;31229;31225:15;31217:23;;31006:241;;;:::o;31253:141::-;31302:4;31325:3;31317:11;;31348:3;31345:1;31338:14;31382:4;31379:1;31369:18;31361:26;;31307:87;;;:::o;31400:98::-;31451:6;31485:5;31479:12;31469:22;;31458:40;;;:::o;31504:99::-;31556:6;31590:5;31584:12;31574:22;;31563:40;;;:::o;31609:168::-;31692:11;31726:6;31721:3;31714:19;31766:4;31761:3;31757:14;31742:29;;31704:73;;;;:::o;31783:147::-;31884:11;31921:3;31906:18;;31896:34;;;;:::o;31936:169::-;32020:11;32054:6;32049:3;32042:19;32094:4;32089:3;32085:14;32070:29;;32032:73;;;;:::o;32111:148::-;32213:11;32250:3;32235:18;;32225:34;;;;:::o;32265:305::-;32305:3;32324:20;32342:1;32324:20;:::i;:::-;32319:25;;32358:20;32376:1;32358:20;:::i;:::-;32353:25;;32512:1;32444:66;32440:74;32437:1;32434:81;32431:2;;;32518:18;;:::i;:::-;32431:2;32562:1;32559;32555:9;32548:16;;32309:261;;;;:::o;32576:185::-;32616:1;32633:20;32651:1;32633:20;:::i;:::-;32628:25;;32667:20;32685:1;32667:20;:::i;:::-;32662:25;;32706:1;32696:2;;32711:18;;:::i;:::-;32696:2;32753:1;32750;32746:9;32741:14;;32618:143;;;;:::o;32767:348::-;32807:7;32830:20;32848:1;32830:20;:::i;:::-;32825:25;;32864:20;32882:1;32864:20;:::i;:::-;32859:25;;33052:1;32984:66;32980:74;32977:1;32974:81;32969:1;32962:9;32955:17;32951:105;32948:2;;;33059:18;;:::i;:::-;32948:2;33107:1;33104;33100:9;33089:20;;32815:300;;;;:::o;33121:191::-;33161:4;33181:20;33199:1;33181:20;:::i;:::-;33176:25;;33215:20;33233:1;33215:20;:::i;:::-;33210:25;;33254:1;33251;33248:8;33245:2;;;33259:18;;:::i;:::-;33245:2;33304:1;33301;33297:9;33289:17;;33166:146;;;;:::o;33318:96::-;33355:7;33384:24;33402:5;33384:24;:::i;:::-;33373:35;;33363:51;;;:::o;33420:104::-;33465:7;33494:24;33512:5;33494:24;:::i;:::-;33483:35;;33473:51;;;:::o;33530:90::-;33564:7;33607:5;33600:13;33593:21;33582:32;;33572:48;;;:::o;33626:149::-;33662:7;33702:66;33695:5;33691:78;33680:89;;33670:105;;;:::o;33781:126::-;33818:7;33858:42;33851:5;33847:54;33836:65;;33826:81;;;:::o;33913:77::-;33950:7;33979:5;33968:16;;33958:32;;;:::o;33996:154::-;34080:6;34075:3;34070;34057:30;34142:1;34133:6;34128:3;34124:16;34117:27;34047:103;;;:::o;34156:307::-;34224:1;34234:113;34248:6;34245:1;34242:13;34234:113;;;34333:1;34328:3;34324:11;34318:18;34314:1;34309:3;34305:11;34298:39;34270:2;34267:1;34263:10;34258:15;;34234:113;;;34365:6;34362:1;34359:13;34356:2;;;34445:1;34436:6;34431:3;34427:16;34420:27;34356:2;34205:258;;;;:::o;34469:320::-;34513:6;34550:1;34544:4;34540:12;34530:22;;34597:1;34591:4;34587:12;34618:18;34608:2;;34674:4;34666:6;34662:17;34652:27;;34608:2;34736;34728:6;34725:14;34705:18;34702:38;34699:2;;;34755:18;;:::i;:::-;34699:2;34520:269;;;;:::o;34795:281::-;34878:27;34900:4;34878:27;:::i;:::-;34870:6;34866:40;35008:6;34996:10;34993:22;34972:18;34960:10;34957:34;34954:62;34951:2;;;35019:18;;:::i;:::-;34951:2;35059:10;35055:2;35048:22;34838:238;;;:::o;35082:233::-;35121:3;35144:24;35162:5;35144:24;:::i;:::-;35135:33;;35190:66;35183:5;35180:77;35177:2;;;35260:18;;:::i;:::-;35177:2;35307:1;35300:5;35296:13;35289:20;;35125:190;;;:::o;35321:176::-;35353:1;35370:20;35388:1;35370:20;:::i;:::-;35365:25;;35404:20;35422:1;35404:20;:::i;:::-;35399:25;;35443:1;35433:2;;35448:18;;:::i;:::-;35433:2;35489:1;35486;35482:9;35477:14;;35355:142;;;;:::o;35503:180::-;35551:77;35548:1;35541:88;35648:4;35645:1;35638:15;35672:4;35669:1;35662:15;35689:180;35737:77;35734:1;35727:88;35834:4;35831:1;35824:15;35858:4;35855:1;35848:15;35875:180;35923:77;35920:1;35913:88;36020:4;36017:1;36010:15;36044:4;36041:1;36034:15;36061:180;36109:77;36106:1;36099:88;36206:4;36203:1;36196:15;36230:4;36227:1;36220:15;36247:102;36288:6;36339:2;36335:7;36330:2;36323:5;36319:14;36315:28;36305:38;;36295:54;;;:::o;36355:230::-;36495:34;36491:1;36483:6;36479:14;36472:58;36564:13;36559:2;36551:6;36547:15;36540:38;36461:124;:::o;36591:237::-;36731:34;36727:1;36719:6;36715:14;36708:58;36800:20;36795:2;36787:6;36783:15;36776:45;36697:131;:::o;36834:225::-;36974:34;36970:1;36962:6;36958:14;36951:58;37043:8;37038:2;37030:6;37026:15;37019:33;36940:119;:::o;37065:224::-;37205:34;37201:1;37193:6;37189:14;37182:58;37274:7;37269:2;37261:6;37257:15;37250:32;37171:118;:::o;37295:159::-;37435:11;37431:1;37423:6;37419:14;37412:35;37401:53;:::o;37460:178::-;37600:30;37596:1;37588:6;37584:14;37577:54;37566:72;:::o;37644:223::-;37784:34;37780:1;37772:6;37768:14;37761:58;37853:6;37848:2;37840:6;37836:15;37829:31;37750:117;:::o;37873:175::-;38013:27;38009:1;38001:6;37997:14;37990:51;37979:69;:::o;38054:231::-;38194:34;38190:1;38182:6;38178:14;38171:58;38263:14;38258:2;38250:6;38246:15;38239:39;38160:125;:::o;38291:174::-;38431:26;38427:1;38419:6;38415:14;38408:50;38397:68;:::o;38471:243::-;38611:34;38607:1;38599:6;38595:14;38588:58;38680:26;38675:2;38667:6;38663:15;38656:51;38577:137;:::o;38720:229::-;38860:34;38856:1;38848:6;38844:14;38837:58;38929:12;38924:2;38916:6;38912:15;38905:37;38826:123;:::o;38955:228::-;39095:34;39091:1;39083:6;39079:14;39072:58;39164:11;39159:2;39151:6;39147:15;39140:36;39061:122;:::o;39189:173::-;39329:21;39325:1;39317:6;39313:14;39306:45;39295:67;:::o;39372:190::-;39516:34;39512:1;39504:6;39500:14;39493:58;39478:84;:::o;39572:243::-;39716:34;39712:1;39704:6;39700:14;39693:58;39789:14;39784:2;39776:6;39772:15;39765:39;39678:137;:::o;39825:163::-;39969:7;39965:1;39957:6;39953:14;39946:31;39931:57;:::o;39998:190::-;40142:34;40138:1;40130:6;40126:14;40119:58;40104:84;:::o;40198:175::-;40342:19;40338:1;40330:6;40326:14;40319:43;40304:69;:::o;40383:181::-;40527:25;40523:1;40515:6;40511:14;40504:49;40489:75;:::o;40574:232::-;40718:34;40714:1;40706:6;40702:14;40695:58;40791:3;40786:2;40778:6;40774:15;40767:28;40680:126;:::o;40816:185::-;40960:29;40956:1;40948:6;40944:14;40937:53;40922:79;:::o;41011:118::-;41117:12;:::o;41139:248::-;41283:34;41279:1;41271:6;41267:14;41260:58;41356:19;41351:2;41343:6;41339:15;41332:44;41245:142;:::o;41397:243::-;41541:34;41537:1;41529:6;41525:14;41518:58;41614:14;41609:2;41601:6;41597:15;41590:39;41503:137;:::o;41650:130::-;41727:24;41745:5;41727:24;:::i;:::-;41720:5;41717:35;41707:2;;41766:1;41763;41756:12;41707:2;41693:87;:::o;41790:124::-;41864:21;41879:5;41864:21;:::i;:::-;41857:5;41854:32;41844:2;;41900:1;41897;41890:12;41844:2;41830:84;:::o;41924:128::-;42000:23;42017:5;42000:23;:::i;:::-;41993:5;41990:34;41980:2;;42038:1;42035;42028:12;41980:2;41966:86;:::o;42062:130::-;42139:24;42157:5;42139:24;:::i;:::-;42132:5;42129:35;42119:2;;42178:1;42175;42168:12;42119:2;42105:87;:::o
Swarm Source
ipfs://4b363768e09ce53eacc773ea70e402068681d33d10dc871b125a50d031a85839
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.