CRC-721
Overview
Max Total Supply
555 ORIGAMI
Holders
48
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
0 ORIGAMILoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
Origami_Legends
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity Multiple files format)
// SPDX-License-Identifier: MIT pragma solidity ^0.8.4; import "./ERC721.sol"; import "./Ownable.sol"; import "./ERC721Burnable.sol"; import "./ERC721URIStorage.sol"; import "./ERC721Enumerable.sol"; import "./Strings.sol"; contract Origami_Legends is ERC721, ERC721Enumerable, Ownable, ERC721URIStorage { bool public presaleActive = false; bool public saleActive = false; bool public whitelistEnforced = true; mapping(address => bool) public whitelist; uint256 private _tokenIdCounter; uint256 public mintPrice = 100 ether; uint256 MAX_SUPPLY = 555; uint256 MAX_PER_BUYER = 27; uint256 public totalMinted; string private tokenBaseURI; mapping( address => uint256) public mintedWallets; mapping (uint256 => string) private tokenURIs; bool public isMintEnabled; event Minted(address indexed sender, uint256 indexed tokenId, uint256 quantity); event Withdrawn(address indexed owner, uint256 amount); constructor() ERC721 ("Origami Legends" , "ORIGAMI") {} function isMintEnable(bool isMintEnabled_) external onlyOwner { isMintEnabled = isMintEnabled_; } function setPrice(uint256 newPrice) public onlyOwner { mintPrice = newPrice; } function setMAXSUPPLY(uint256 newMaxSupply) public onlyOwner { MAX_SUPPLY = newMaxSupply; } function setMAXPERBUYER(uint256 newMaxPerBuyer) public onlyOwner { MAX_PER_BUYER = newMaxPerBuyer; } function setBaseTokenUri (string calldata tokenBaseURI_) external onlyOwner { tokenBaseURI = tokenBaseURI_; } function activatePresale() public onlyOwner { presaleActive = !presaleActive; } function activateSale() public onlyOwner { saleActive = !saleActive; } function activateWhitelistEnforcement() public onlyOwner { whitelistEnforced = !whitelistEnforced; } function addToWhitelist(address[] calldata toAddAddresses) external onlyOwner { for (uint i = 0; i < toAddAddresses.length; i++) { whitelist[toAddAddresses[i]] = true; } } function removeFromWhitelist(address[] calldata toRemoveAddresses) external onlyOwner { for (uint i = 0; i < toRemoveAddresses.length; i++) { delete whitelist[toRemoveAddresses[i]]; } } // Transfer specific token IDs to the contract owner function transferTokenToOwner(uint256[] memory tokenIds) public onlyOwner { require(!isMintEnabled, "Public minting is already enabled"); for (uint256 i = 0; i < tokenIds.length; i++) { uint256 tokenId = tokenIds[i]; _safeMint(owner(), tokenId); totalMinted++; } } //New function function safeTransferFromMultiple(address from, address to, uint256[] memory tokenIds) public { require(to != address(0), "ERC721: transfer to the zero address"); for (uint256 i = 0; i < tokenIds.length; i++) { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenIds[i]), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenIds[i], ""); } } function mint(uint256 _quantity) public payable { // Adding whitelist functionality if (presaleActive == true && whitelistEnforced) { require(whitelist[msg.sender], "user is not whitelisted"); } require(isMintEnabled, "Minting is not enabled"); require(_tokenIdCounter + _quantity <= MAX_SUPPLY, "We are sold out"); require(msg.value >= mintPrice * _quantity, "Incorrect value sent"); require(mintedWallets[msg.sender] + _quantity <= MAX_PER_BUYER, "Max per buyer reached"); uint256 newMintedQuantity = mintedWallets[msg.sender] + _quantity; uint256 tokenId; uint256[] memory reservedTokenIds = new uint256[](_quantity); uint256 reservedIndex = 0; for (uint256 i = 0; i < _quantity; ) { tokenId = _tokenIdCounter + 1; if (!_exists(tokenId)) { reservedTokenIds[reservedIndex] = tokenId; reservedIndex++; i++; } _tokenIdCounter++; } mintedWallets[msg.sender] = newMintedQuantity; totalMinted += _quantity; for (uint256 i = 0; i < _quantity; i++) { tokenId = reservedTokenIds[i]; _safeMint(msg.sender, tokenId); _setTokenURI(tokenId, string(abi.encodePacked(tokenBaseURI, Strings.toString(tokenId), ".json"))); emit Minted(msg.sender, tokenId, _quantity); } } function withdraw() public onlyOwner { require(address(this).balance > 0, "Balance is 0"); uint256 amountToWithdraw = address(this).balance; (bool success, ) = payable(owner()).call{value: amountToWithdraw}(""); require(success, "Withdrawal failed"); emit Withdrawn(owner(), amountToWithdraw); } function _baseURI() internal view virtual override returns (string memory) { return tokenBaseURI; } function _requireMinted(uint256 tokenId) internal view { require(_exists(tokenId), "Token ID does not exist"); } function tokenURI(uint256 tokenId) public view override(ERC721, ERC721URIStorage) returns (string memory) { _requireMinted(tokenId); string memory baseURI = _baseURI(); string memory tmp = string(abi.encodePacked(baseURI, Strings.toString(tokenId))); string memory tmp2 = string(abi.encodePacked(tmp, ".json")); return bytes(baseURI).length > 0 ? tmp2 : ""; } function _deleteTokenUri(uint256 tokenId) internal { delete tokenURIs[tokenId]; } function _burn(uint256 tokenId) internal virtual override(ERC721URIStorage, ERC721) { super._burn(tokenId); _deleteTokenUri(tokenId); } function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal override (ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @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; } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; import "./IERC721Receiver.sol"; import "./IERC721Metadata.sol"; import "./Address.sol"; import "./Context.sol"; import "./Strings.sol"; import "./ERC165.sol"; /** * @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 overridden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual 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 || isApprovedForAll(owner, spender) || getApproved(tokenId) == 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 an {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 an {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 {} }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Burnable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./Context.sol"; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; import "./ERC721.sol"; import "./IERC721Enumerable.sol"; /** * @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(); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; import "../ERC721.sol"; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard as defined in the 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 * [EIP section](https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified) * 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); }
// SPDX-License-Identifier: MIT pragma solidity ^0.8.0; import "./IERC165.sol"; import "./IERC721.sol"; /// @title EIP-721 Metadata Update Extension interface IERC4906 is IERC165, IERC721 { /// @dev This event emits when the metadata of a token is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFT. event MetadataUpdate(uint256 _tokenId); /// @dev This event emits when the metadata of a range of tokens is changed. /// So that the third-party platforms such as NFT market could /// timely update the images and related attributes of the NFTs. event BatchMetadataUpdate(uint256 _fromTokenId, uint256 _toTokenId); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; import "./IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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; /** * @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 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 the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; import "./IERC721.sol"; /** * @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); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721Receiver.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; import "./Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ 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); } }
// SPDX-License-Identifier: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"sender","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"quantity","type":"uint256"}],"name":"Minted","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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":false,"internalType":"uint256","name":"amount","type":"uint256"}],"name":"Withdrawn","type":"event"},{"inputs":[],"name":"activatePresale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"activateWhitelistEnforcement","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"toAddAddresses","type":"address[]"}],"name":"addToWhitelist","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bool","name":"isMintEnabled_","type":"bool"}],"name":"isMintEnable","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"isMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"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":[{"internalType":"address","name":"","type":"address"}],"name":"mintedWallets","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":"presaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"toRemoveAddresses","type":"address[]"}],"name":"removeFromWhitelist","outputs":[],"stateMutability":"nonpayable","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":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"safeTransferFromMultiple","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","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":"tokenBaseURI_","type":"string"}],"name":"setBaseTokenUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxPerBuyer","type":"uint256"}],"name":"setMAXPERBUYER","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newMaxSupply","type":"uint256"}],"name":"setMAXSUPPLY","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newPrice","type":"uint256"}],"name":"setPrice","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":"totalMinted","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256[]","name":"tokenIds","type":"uint256[]"}],"name":"transferTokenToOwner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"whitelistEnforced","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526000600c60006101000a81548160ff0219169083151502179055506000600c60016101000a81548160ff0219169083151502179055506001600c60026101000a81548160ff02191690831515021790555068056bc75e2d63100000600f5561022b601055601b6011553480156200007a57600080fd5b506040518060400160405280600f81526020017f4f726967616d69204c6567656e647300000000000000000000000000000000008152506040518060400160405280600781526020017f4f524947414d49000000000000000000000000000000000000000000000000008152508160009080519060200190620000ff9291906200020f565b508060019080519060200190620001189291906200020f565b5050506200013b6200012f6200014160201b60201c565b6200014960201b60201c565b62000324565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200021d90620002bf565b90600052602060002090601f0160209004810192826200024157600085556200028d565b82601f106200025c57805160ff19168380011785556200028d565b828001600101855582156200028d579182015b828111156200028c5782518255916020019190600101906200026f565b5b5090506200029c9190620002a0565b5090565b5b80821115620002bb576000816000905550600101620002a1565b5090565b60006002820490506001821680620002d857607f821691505b60208210811415620002ef57620002ee620002f5565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6156e980620003346000396000f3fe6080604052600436106102515760003560e01c80637f64978311610139578063a22cb465116100b6578063b88d4fde1161007a578063b88d4fde1461088d578063baec4426146108b6578063c721f08d146108df578063c87b56dd146108f6578063e985e9c514610933578063f2fde38b1461097057610251565b8063a22cb465146107bc578063a2309ff8146107e5578063ada7c4ed14610810578063b074043c1461084d578063b68e8c911461087657610251565b806395652cfa116100fd57806395652cfa146106e657806395d89b411461070f5780639b19251a1461073a578063a0059b2614610777578063a0712d68146107a057610251565b80637f6497831461062757806389f91ece146106505780638c0439ec1461067b5780638da5cb5b1461069257806391b7f5ed146106bd57610251565b80633ccfd60b116101d2578063548db17411610196578063548db174146105175780636352211e146105405780636817c76c1461057d57806368428a1b146105a857806370a08231146105d3578063715018a61461061057610251565b80633ccfd60b1461043257806342842e0e14610449578063438b6300146104725780634f6ccce7146104af57806353135ca0146104ec57610251565b8063095ea7b311610219578063095ea7b31461034d57806318160ddd1461037657806323b872dd146103a15780632f745c59146103ca578063346de50a1461040757610251565b806301df04ef1461025657806301ffc9a71461027f57806306fdde03146102bc5780630758d618146102e7578063081812fc14610310575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061404c565b610999565b005b34801561028b57600080fd5b506102a660048036038101906102a19190613fb5565b610a1f565b6040516102b39190614753565b60405180910390f35b3480156102c857600080fd5b506102d1610a31565b6040516102de919061476e565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613f8c565b610ac3565b005b34801561031c57600080fd5b506103376004803603810190610332919061404c565b610b5c565b60405161034491906146ca565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190613eca565b610be1565b005b34801561038257600080fd5b5061038b610cf9565b6040516103989190614af0565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613dc4565b610d06565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190613eca565b610d66565b6040516103fe9190614af0565b60405180910390f35b34801561041357600080fd5b5061041c610e0b565b6040516104299190614753565b60405180910390f35b34801561043e57600080fd5b50610447610e1e565b005b34801561045557600080fd5b50610470600480360381019061046b9190613dc4565b610fee565b005b34801561047e57600080fd5b5061049960048036038101906104949190613cf8565b61100e565b6040516104a69190614731565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061404c565b611108565b6040516104e39190614af0565b60405180910390f35b3480156104f857600080fd5b5061050161119f565b60405161050e9190614753565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613f06565b6111b2565b005b34801561054c57600080fd5b506105676004803603810190610562919061404c565b6112f0565b60405161057491906146ca565b60405180910390f35b34801561058957600080fd5b506105926113a2565b60405161059f9190614af0565b60405180910390f35b3480156105b457600080fd5b506105bd6113a8565b6040516105ca9190614753565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613cf8565b6113bb565b6040516106079190614af0565b60405180910390f35b34801561061c57600080fd5b50610625611473565b005b34801561063357600080fd5b5061064e60048036038101906106499190613f06565b6114fb565b005b34801561065c57600080fd5b50610665611642565b6040516106729190614753565b60405180910390f35b34801561068757600080fd5b50610690611655565b005b34801561069e57600080fd5b506106a76116fd565b6040516106b491906146ca565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061404c565b611727565b005b3480156106f257600080fd5b5061070d60048036038101906107089190614007565b6117ad565b005b34801561071b57600080fd5b5061072461183f565b604051610731919061476e565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613cf8565b6118d1565b60405161076e9190614753565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613f4b565b6118f1565b005b6107ba60048036038101906107b5919061404c565b611a4f565b005b3480156107c857600080fd5b506107e360048036038101906107de9190613e8e565b611f51565b005b3480156107f157600080fd5b506107fa611f67565b6040516108079190614af0565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190613cf8565b611f6d565b6040516108449190614af0565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190613d5d565b611f85565b005b34801561088257600080fd5b5061088b612105565b005b34801561089957600080fd5b506108b460048036038101906108af9190613e13565b6121ad565b005b3480156108c257600080fd5b506108dd60048036038101906108d8919061404c565b61220f565b005b3480156108eb57600080fd5b506108f4612295565b005b34801561090257600080fd5b5061091d6004803603810190610918919061404c565b61233d565b60405161092a919061476e565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613d21565b6123d0565b6040516109679190614753565b60405180910390f35b34801561097c57600080fd5b5061099760048036038101906109929190613cf8565b612464565b005b6109a161255c565b73ffffffffffffffffffffffffffffffffffffffff166109bf6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c906149f0565b60405180910390fd5b8060108190555050565b6000610a2a82612564565b9050919050565b606060008054610a4090614df4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90614df4565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b610acb61255c565b73ffffffffffffffffffffffffffffffffffffffff16610ae96116fd565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906149f0565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6000610b67826125de565b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906149d0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bec826112f0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614a10565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7c61255c565b73ffffffffffffffffffffffffffffffffffffffff161480610cab5750610caa81610ca561255c565b6123d0565b5b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190614910565b60405180910390fd5b610cf4838361264a565b505050565b6000600880549050905090565b610d17610d1161255c565b82612703565b610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90614a30565b60405180910390fd5b610d618383836127e1565b505050565b6000610d71836113bb565b8210610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906147d0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601660009054906101000a900460ff1681565b610e2661255c565b73ffffffffffffffffffffffffffffffffffffffff16610e446116fd565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906149f0565b60405180910390fd5b60004711610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed4906149b0565b60405180910390fd5b60004790506000610eec6116fd565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f0f906146b5565b60006040518083038185875af1925050503d8060008114610f4c576040519150601f19603f3d011682016040523d82523d6000602084013e610f51565b606091505b5050905080610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614ad0565b60405180910390fd5b610f9d6116fd565b73ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610fe29190614af0565b60405180910390a25050565b611009838383604051806020016040528060008152506121ad565b505050565b6060600061101b836113bb565b905060008167ffffffffffffffff81111561105f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561108d5781602001602082028036833780820191505090505b50905060005b828110156110fd576110a58582610d66565b8282815181106110de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110f590614e57565b915050611093565b508092505050919050565b6000611112610cf9565b8210611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90614a50565b60405180910390fd5b6008828154811061118d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600c60009054906101000a900460ff1681565b6111ba61255c565b73ffffffffffffffffffffffffffffffffffffffff166111d86116fd565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611225906149f0565b60405180910390fd5b60005b828290508110156112eb57600d6000848484818110611279577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061128e9190613cf8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905580806112e390614e57565b915050611231565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090614950565b60405180910390fd5b80915050919050565b600f5481565b600c60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390614930565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147b61255c565b73ffffffffffffffffffffffffffffffffffffffff166114996116fd565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906149f0565b60405180910390fd5b6114f96000612a48565b565b61150361255c565b73ffffffffffffffffffffffffffffffffffffffff166115216116fd565b73ffffffffffffffffffffffffffffffffffffffff1614611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e906149f0565b60405180910390fd5b60005b8282905081101561163d576001600d60008585858181106115c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115d99190613cf8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061163590614e57565b91505061157a565b505050565b600c60029054906101000a900460ff1681565b61165d61255c565b73ffffffffffffffffffffffffffffffffffffffff1661167b6116fd565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c8906149f0565b60405180910390fd5b600c60029054906101000a900460ff1615600c60026101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61172f61255c565b73ffffffffffffffffffffffffffffffffffffffff1661174d6116fd565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906149f0565b60405180910390fd5b80600f8190555050565b6117b561255c565b73ffffffffffffffffffffffffffffffffffffffff166117d36116fd565b73ffffffffffffffffffffffffffffffffffffffff1614611829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611820906149f0565b60405180910390fd5b81816013919061183a9291906139d4565b505050565b60606001805461184e90614df4565b80601f016020809104026020016040519081016040528092919081815260200182805461187a90614df4565b80156118c75780601f1061189c576101008083540402835291602001916118c7565b820191906000526020600020905b8154815290600101906020018083116118aa57829003601f168201915b5050505050905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b6118f961255c565b73ffffffffffffffffffffffffffffffffffffffff166119176116fd565b73ffffffffffffffffffffffffffffffffffffffff161461196d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611964906149f0565b60405180910390fd5b601660009054906101000a900460ff16156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614a70565b60405180910390fd5b60005b8151811015611a4b576000828281518110611a04577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050611a1f611a196116fd565b82612b0e565b60126000815480929190611a3290614e57565b9190505550508080611a4390614e57565b9150506119c0565b5050565b60011515600c60009054906101000a900460ff161515148015611a7e5750600c60029054906101000a900460ff165b15611b1057600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614ab0565b60405180910390fd5b5b601660009054906101000a900460ff16611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906147b0565b60405180910390fd5b60105481600e54611b709190614c29565b1115611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890614790565b60405180910390fd5b80600f54611bbf9190614cb0565b341015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf8906148b0565b60405180910390fd5b60115481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4f9190614c29565b1115611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790614a90565b60405180910390fd5b600081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdd9190614c29565b90506000808367ffffffffffffffff811115611d22577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d505781602001602082028036833780820191505090505b5090506000805b85811015611dfd576001600e54611d6e9190614c29565b9350611d79846125de565b611de05783838381518110611db7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508180611dce90614e57565b9250508080611ddc90614e57565b9150505b600e6000815480929190611df390614e57565b9190505550611d57565b5083601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460126000828254611e549190614c29565b9250508190555060005b85811015611f4957828181518110611e9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519350611eb33385612b0e565b611ee7846013611ec287612b2c565b604051602001611ed3929190614686565b604051602081830303815290604052612cd9565b833373ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff88604051611f2e9190614af0565b60405180910390a38080611f4190614e57565b915050611e5e565b505050505050565b611f63611f5c61255c565b8383612d4d565b5050565b60125481565b60146020528060005260406000206000915090505481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614870565b60405180910390fd5b60005b81518110156120ff5761205261200c61255c565b838381518110612045577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612703565b612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890614a30565b60405180910390fd5b6120ec84848484815181106120cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405180602001604052806000815250612eba565b80806120f790614e57565b915050611ff8565b50505050565b61210d61255c565b73ffffffffffffffffffffffffffffffffffffffff1661212b6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612178906149f0565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6121be6121b861255c565b83612703565b6121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490614a30565b60405180910390fd5b61220984848484612eba565b50505050565b61221761255c565b73ffffffffffffffffffffffffffffffffffffffff166122356116fd565b73ffffffffffffffffffffffffffffffffffffffff161461228b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612282906149f0565b60405180910390fd5b8060118190555050565b61229d61255c565b73ffffffffffffffffffffffffffffffffffffffff166122bb6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612308906149f0565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b606061234882612f16565b6000612352612f61565b905060008161236085612b2c565b604051602001612371929190614640565b60405160208183030381529060405290506000816040516020016123959190614664565b604051602081830303815290604052905060008351116123c457604051806020016040528060008152506123c6565b805b9350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61246c61255c565b73ffffffffffffffffffffffffffffffffffffffff1661248a6116fd565b73ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d7906149f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790614810565b60405180910390fd5b61255981612a48565b50565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125d757506125d682612ff3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126bd836112f0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061270e826125de565b61274d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612744906148f0565b60405180910390fd5b6000612758836112f0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279a575061279981856123d0565b5b806127d857508373ffffffffffffffffffffffffffffffffffffffff166127c084610b5c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612801826112f0565b73ffffffffffffffffffffffffffffffffffffffff1614612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128be90614870565b60405180910390fd5b6128d28383836130d5565b6128dd60008261264a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461292d9190614d0a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129849190614c29565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a438383836130e5565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b288282604051806020016040528060008152506130ea565b5050565b60606000821415612b74576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cd4565b600082905060005b60008214612ba6578080612b8f90614e57565b915050600a82612b9f9190614c7f565b9150612b7c565b60008167ffffffffffffffff811115612be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c1a5781602001600182028036833780820191505090505b5090505b60008514612ccd57600182612c339190614d0a565b9150600a85612c429190614ea0565b6030612c4e9190614c29565b60f81b818381518110612c8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cc69190614c7f565b9450612c1e565b8093505050505b919050565b612ce2826125de565b612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890614970565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190612d48929190613a5a565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db390614890565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ead9190614753565b60405180910390a3505050565b612ec58484846127e1565b612ed184848484613145565b612f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f07906147f0565b60405180910390fd5b50505050565b612f1f816125de565b612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f55906148d0565b60405180910390fd5b50565b606060138054612f7090614df4565b80601f0160208091040260200160405190810160405280929190818152602001828054612f9c90614df4565b8015612fe95780601f10612fbe57610100808354040283529160200191612fe9565b820191906000526020600020905b815481529060010190602001808311612fcc57829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806130ce57506130cd826132dc565b5b9050919050565b6130e0838383613346565b505050565b505050565b6130f4838361345a565b6131016000848484613145565b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906147f0565b60405180910390fd5b505050565b60006131668473ffffffffffffffffffffffffffffffffffffffff16613634565b156132cf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261318f61255c565b8786866040518563ffffffff1660e01b81526004016131b194939291906146e5565b602060405180830381600087803b1580156131cb57600080fd5b505af19250505080156131fc57506040513d601f19601f820116820180604052508101906131f99190613fde565b60015b61327f573d806000811461322c576040519150601f19603f3d011682016040523d82523d6000602084013e613231565b606091505b50600081511415613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e906147f0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132d4565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613351838383613657565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133945761338f8161365c565b6133d3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146133d2576133d183826136a5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134165761341181613812565b613455565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613454576134538282613955565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c190614990565b60405180910390fd5b6134d3816125de565b15613513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350a90614850565b60405180910390fd5b61351f600083836130d5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461356f9190614c29565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613630600083836130e5565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136b2846113bb565b6136bc9190614d0a565b90506000600760008481526020019081526020016000205490508181146137a1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138269190614d0a565b905060006009600084815260200190815260200160002054905060006008838154811061387c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106138c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613939577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613960836113bb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546139e090614df4565b90600052602060002090601f016020900481019282613a025760008555613a49565b82601f10613a1b57803560ff1916838001178555613a49565b82800160010185558215613a49579182015b82811115613a48578235825591602001919060010190613a2d565b5b509050613a569190613ae0565b5090565b828054613a6690614df4565b90600052602060002090601f016020900481019282613a885760008555613acf565b82601f10613aa157805160ff1916838001178555613acf565b82800160010185558215613acf579182015b82811115613ace578251825591602001919060010190613ab3565b5b509050613adc9190613ae0565b5090565b5b80821115613af9576000816000905550600101613ae1565b5090565b6000613b10613b0b84614b30565b614b0b565b90508083825260208201905082856020860282011115613b2f57600080fd5b60005b85811015613b5f5781613b458882613ce3565b845260208401935060208301925050600181019050613b32565b5050509392505050565b6000613b7c613b7784614b5c565b614b0b565b905082815260208101848484011115613b9457600080fd5b613b9f848285614db2565b509392505050565b600081359050613bb681615657565b92915050565b60008083601f840112613bce57600080fd5b8235905067ffffffffffffffff811115613be757600080fd5b602083019150836020820283011115613bff57600080fd5b9250929050565b600082601f830112613c1757600080fd5b8135613c27848260208601613afd565b91505092915050565b600081359050613c3f8161566e565b92915050565b600081359050613c5481615685565b92915050565b600081519050613c6981615685565b92915050565b600082601f830112613c8057600080fd5b8135613c90848260208601613b69565b91505092915050565b60008083601f840112613cab57600080fd5b8235905067ffffffffffffffff811115613cc457600080fd5b602083019150836001820283011115613cdc57600080fd5b9250929050565b600081359050613cf28161569c565b92915050565b600060208284031215613d0a57600080fd5b6000613d1884828501613ba7565b91505092915050565b60008060408385031215613d3457600080fd5b6000613d4285828601613ba7565b9250506020613d5385828601613ba7565b9150509250929050565b600080600060608486031215613d7257600080fd5b6000613d8086828701613ba7565b9350506020613d9186828701613ba7565b925050604084013567ffffffffffffffff811115613dae57600080fd5b613dba86828701613c06565b9150509250925092565b600080600060608486031215613dd957600080fd5b6000613de786828701613ba7565b9350506020613df886828701613ba7565b9250506040613e0986828701613ce3565b9150509250925092565b60008060008060808587031215613e2957600080fd5b6000613e3787828801613ba7565b9450506020613e4887828801613ba7565b9350506040613e5987828801613ce3565b925050606085013567ffffffffffffffff811115613e7657600080fd5b613e8287828801613c6f565b91505092959194509250565b60008060408385031215613ea157600080fd5b6000613eaf85828601613ba7565b9250506020613ec085828601613c30565b9150509250929050565b60008060408385031215613edd57600080fd5b6000613eeb85828601613ba7565b9250506020613efc85828601613ce3565b9150509250929050565b60008060208385031215613f1957600080fd5b600083013567ffffffffffffffff811115613f3357600080fd5b613f3f85828601613bbc565b92509250509250929050565b600060208284031215613f5d57600080fd5b600082013567ffffffffffffffff811115613f7757600080fd5b613f8384828501613c06565b91505092915050565b600060208284031215613f9e57600080fd5b6000613fac84828501613c30565b91505092915050565b600060208284031215613fc757600080fd5b6000613fd584828501613c45565b91505092915050565b600060208284031215613ff057600080fd5b6000613ffe84828501613c5a565b91505092915050565b6000806020838503121561401a57600080fd5b600083013567ffffffffffffffff81111561403457600080fd5b61404085828601613c99565b92509250509250929050565b60006020828403121561405e57600080fd5b600061406c84828501613ce3565b91505092915050565b60006140818383614622565b60208301905092915050565b61409681614d3e565b82525050565b60006140a782614bb2565b6140b18185614be0565b93506140bc83614b8d565b8060005b838110156140ed5781516140d48882614075565b97506140df83614bd3565b9250506001810190506140c0565b5085935050505092915050565b61410381614d50565b82525050565b600061411482614bbd565b61411e8185614bf1565b935061412e818560208601614dc1565b61413781614f8d565b840191505092915050565b600061414d82614bc8565b6141578185614c0d565b9350614167818560208601614dc1565b61417081614f8d565b840191505092915050565b600061418682614bc8565b6141908185614c1e565b93506141a0818560208601614dc1565b80840191505092915050565b600081546141b981614df4565b6141c38186614c1e565b945060018216600081146141de57600181146141ef57614222565b60ff19831686528186019350614222565b6141f885614b9d565b60005b8381101561421a578154818901526001820191506020810190506141fb565b838801955050505b50505092915050565b6000614238600f83614c0d565b915061424382614f9e565b602082019050919050565b600061425b601683614c0d565b915061426682614fc7565b602082019050919050565b600061427e602b83614c0d565b915061428982614ff0565b604082019050919050565b60006142a1603283614c0d565b91506142ac8261503f565b604082019050919050565b60006142c4602683614c0d565b91506142cf8261508e565b604082019050919050565b60006142e7602583614c0d565b91506142f2826150dd565b604082019050919050565b600061430a601c83614c0d565b91506143158261512c565b602082019050919050565b600061432d602483614c0d565b915061433882615155565b604082019050919050565b6000614350601983614c0d565b915061435b826151a4565b602082019050919050565b6000614373601483614c0d565b915061437e826151cd565b602082019050919050565b6000614396601783614c0d565b91506143a1826151f6565b602082019050919050565b60006143b9602c83614c0d565b91506143c48261521f565b604082019050919050565b60006143dc603883614c0d565b91506143e78261526e565b604082019050919050565b60006143ff602a83614c0d565b915061440a826152bd565b604082019050919050565b6000614422602983614c0d565b915061442d8261530c565b604082019050919050565b6000614445602e83614c0d565b91506144508261535b565b604082019050919050565b6000614468602083614c0d565b9150614473826153aa565b602082019050919050565b600061448b600c83614c0d565b9150614496826153d3565b602082019050919050565b60006144ae602c83614c0d565b91506144b9826153fc565b604082019050919050565b60006144d1600583614c1e565b91506144dc8261544b565b600582019050919050565b60006144f4602083614c0d565b91506144ff82615474565b602082019050919050565b6000614517602183614c0d565b91506145228261549d565b604082019050919050565b600061453a600083614c02565b9150614545826154ec565b600082019050919050565b600061455d603183614c0d565b9150614568826154ef565b604082019050919050565b6000614580602c83614c0d565b915061458b8261553e565b604082019050919050565b60006145a3602183614c0d565b91506145ae8261558d565b604082019050919050565b60006145c6601583614c0d565b91506145d1826155dc565b602082019050919050565b60006145e9601783614c0d565b91506145f482615605565b602082019050919050565b600061460c601183614c0d565b91506146178261562e565b602082019050919050565b61462b81614da8565b82525050565b61463a81614da8565b82525050565b600061464c828561417b565b9150614658828461417b565b91508190509392505050565b6000614670828461417b565b915061467b826144c4565b915081905092915050565b600061469282856141ac565b915061469e828461417b565b91506146a9826144c4565b91508190509392505050565b60006146c08261452d565b9150819050919050565b60006020820190506146df600083018461408d565b92915050565b60006080820190506146fa600083018761408d565b614707602083018661408d565b6147146040830185614631565b81810360608301526147268184614109565b905095945050505050565b6000602082019050818103600083015261474b818461409c565b905092915050565b600060208201905061476860008301846140fa565b92915050565b600060208201905081810360008301526147888184614142565b905092915050565b600060208201905081810360008301526147a98161422b565b9050919050565b600060208201905081810360008301526147c98161424e565b9050919050565b600060208201905081810360008301526147e981614271565b9050919050565b6000602082019050818103600083015261480981614294565b9050919050565b60006020820190508181036000830152614829816142b7565b9050919050565b60006020820190508181036000830152614849816142da565b9050919050565b60006020820190508181036000830152614869816142fd565b9050919050565b6000602082019050818103600083015261488981614320565b9050919050565b600060208201905081810360008301526148a981614343565b9050919050565b600060208201905081810360008301526148c981614366565b9050919050565b600060208201905081810360008301526148e981614389565b9050919050565b60006020820190508181036000830152614909816143ac565b9050919050565b60006020820190508181036000830152614929816143cf565b9050919050565b60006020820190508181036000830152614949816143f2565b9050919050565b6000602082019050818103600083015261496981614415565b9050919050565b6000602082019050818103600083015261498981614438565b9050919050565b600060208201905081810360008301526149a98161445b565b9050919050565b600060208201905081810360008301526149c98161447e565b9050919050565b600060208201905081810360008301526149e9816144a1565b9050919050565b60006020820190508181036000830152614a09816144e7565b9050919050565b60006020820190508181036000830152614a298161450a565b9050919050565b60006020820190508181036000830152614a4981614550565b9050919050565b60006020820190508181036000830152614a6981614573565b9050919050565b60006020820190508181036000830152614a8981614596565b9050919050565b60006020820190508181036000830152614aa9816145b9565b9050919050565b60006020820190508181036000830152614ac9816145dc565b9050919050565b60006020820190508181036000830152614ae9816145ff565b9050919050565b6000602082019050614b056000830184614631565b92915050565b6000614b15614b26565b9050614b218282614e26565b919050565b6000604051905090565b600067ffffffffffffffff821115614b4b57614b4a614f5e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b7757614b76614f5e565b5b614b8082614f8d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c3482614da8565b9150614c3f83614da8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7457614c73614ed1565b5b828201905092915050565b6000614c8a82614da8565b9150614c9583614da8565b925082614ca557614ca4614f00565b5b828204905092915050565b6000614cbb82614da8565b9150614cc683614da8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cff57614cfe614ed1565b5b828202905092915050565b6000614d1582614da8565b9150614d2083614da8565b925082821015614d3357614d32614ed1565b5b828203905092915050565b6000614d4982614d88565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ddf578082015181840152602081019050614dc4565b83811115614dee576000848401525b50505050565b60006002820490506001821680614e0c57607f821691505b60208210811415614e2057614e1f614f2f565b5b50919050565b614e2f82614f8d565b810181811067ffffffffffffffff82111715614e4e57614e4d614f5e565b5b80604052505050565b6000614e6282614da8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e9557614e94614ed1565b5b600182019050919050565b6000614eab82614da8565b9150614eb683614da8565b925082614ec657614ec5614f00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f57652061726520736f6c64206f75740000000000000000000000000000000000600082015250565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f72726563742076616c75652073656e74000000000000000000000000600082015250565b7f546f6b656e20494420646f6573206e6f74206578697374000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74696e6720697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220627579657220726561636865640000000000000000000000600082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b61566081614d3e565b811461566b57600080fd5b50565b61567781614d50565b811461568257600080fd5b50565b61568e81614d5c565b811461569957600080fd5b50565b6156a581614da8565b81146156b057600080fd5b5056fea2646970667358221220acf4cc054aeef486132e1d9ed6d6f6b4e95994161ff78640e9c3d36ed6362b6664736f6c63430008040033
Deployed Bytecode
0x6080604052600436106102515760003560e01c80637f64978311610139578063a22cb465116100b6578063b88d4fde1161007a578063b88d4fde1461088d578063baec4426146108b6578063c721f08d146108df578063c87b56dd146108f6578063e985e9c514610933578063f2fde38b1461097057610251565b8063a22cb465146107bc578063a2309ff8146107e5578063ada7c4ed14610810578063b074043c1461084d578063b68e8c911461087657610251565b806395652cfa116100fd57806395652cfa146106e657806395d89b411461070f5780639b19251a1461073a578063a0059b2614610777578063a0712d68146107a057610251565b80637f6497831461062757806389f91ece146106505780638c0439ec1461067b5780638da5cb5b1461069257806391b7f5ed146106bd57610251565b80633ccfd60b116101d2578063548db17411610196578063548db174146105175780636352211e146105405780636817c76c1461057d57806368428a1b146105a857806370a08231146105d3578063715018a61461061057610251565b80633ccfd60b1461043257806342842e0e14610449578063438b6300146104725780634f6ccce7146104af57806353135ca0146104ec57610251565b8063095ea7b311610219578063095ea7b31461034d57806318160ddd1461037657806323b872dd146103a15780632f745c59146103ca578063346de50a1461040757610251565b806301df04ef1461025657806301ffc9a71461027f57806306fdde03146102bc5780630758d618146102e7578063081812fc14610310575b600080fd5b34801561026257600080fd5b5061027d6004803603810190610278919061404c565b610999565b005b34801561028b57600080fd5b506102a660048036038101906102a19190613fb5565b610a1f565b6040516102b39190614753565b60405180910390f35b3480156102c857600080fd5b506102d1610a31565b6040516102de919061476e565b60405180910390f35b3480156102f357600080fd5b5061030e60048036038101906103099190613f8c565b610ac3565b005b34801561031c57600080fd5b506103376004803603810190610332919061404c565b610b5c565b60405161034491906146ca565b60405180910390f35b34801561035957600080fd5b50610374600480360381019061036f9190613eca565b610be1565b005b34801561038257600080fd5b5061038b610cf9565b6040516103989190614af0565b60405180910390f35b3480156103ad57600080fd5b506103c860048036038101906103c39190613dc4565b610d06565b005b3480156103d657600080fd5b506103f160048036038101906103ec9190613eca565b610d66565b6040516103fe9190614af0565b60405180910390f35b34801561041357600080fd5b5061041c610e0b565b6040516104299190614753565b60405180910390f35b34801561043e57600080fd5b50610447610e1e565b005b34801561045557600080fd5b50610470600480360381019061046b9190613dc4565b610fee565b005b34801561047e57600080fd5b5061049960048036038101906104949190613cf8565b61100e565b6040516104a69190614731565b60405180910390f35b3480156104bb57600080fd5b506104d660048036038101906104d1919061404c565b611108565b6040516104e39190614af0565b60405180910390f35b3480156104f857600080fd5b5061050161119f565b60405161050e9190614753565b60405180910390f35b34801561052357600080fd5b5061053e60048036038101906105399190613f06565b6111b2565b005b34801561054c57600080fd5b506105676004803603810190610562919061404c565b6112f0565b60405161057491906146ca565b60405180910390f35b34801561058957600080fd5b506105926113a2565b60405161059f9190614af0565b60405180910390f35b3480156105b457600080fd5b506105bd6113a8565b6040516105ca9190614753565b60405180910390f35b3480156105df57600080fd5b506105fa60048036038101906105f59190613cf8565b6113bb565b6040516106079190614af0565b60405180910390f35b34801561061c57600080fd5b50610625611473565b005b34801561063357600080fd5b5061064e60048036038101906106499190613f06565b6114fb565b005b34801561065c57600080fd5b50610665611642565b6040516106729190614753565b60405180910390f35b34801561068757600080fd5b50610690611655565b005b34801561069e57600080fd5b506106a76116fd565b6040516106b491906146ca565b60405180910390f35b3480156106c957600080fd5b506106e460048036038101906106df919061404c565b611727565b005b3480156106f257600080fd5b5061070d60048036038101906107089190614007565b6117ad565b005b34801561071b57600080fd5b5061072461183f565b604051610731919061476e565b60405180910390f35b34801561074657600080fd5b50610761600480360381019061075c9190613cf8565b6118d1565b60405161076e9190614753565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613f4b565b6118f1565b005b6107ba60048036038101906107b5919061404c565b611a4f565b005b3480156107c857600080fd5b506107e360048036038101906107de9190613e8e565b611f51565b005b3480156107f157600080fd5b506107fa611f67565b6040516108079190614af0565b60405180910390f35b34801561081c57600080fd5b5061083760048036038101906108329190613cf8565b611f6d565b6040516108449190614af0565b60405180910390f35b34801561085957600080fd5b50610874600480360381019061086f9190613d5d565b611f85565b005b34801561088257600080fd5b5061088b612105565b005b34801561089957600080fd5b506108b460048036038101906108af9190613e13565b6121ad565b005b3480156108c257600080fd5b506108dd60048036038101906108d8919061404c565b61220f565b005b3480156108eb57600080fd5b506108f4612295565b005b34801561090257600080fd5b5061091d6004803603810190610918919061404c565b61233d565b60405161092a919061476e565b60405180910390f35b34801561093f57600080fd5b5061095a60048036038101906109559190613d21565b6123d0565b6040516109679190614753565b60405180910390f35b34801561097c57600080fd5b5061099760048036038101906109929190613cf8565b612464565b005b6109a161255c565b73ffffffffffffffffffffffffffffffffffffffff166109bf6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614610a15576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a0c906149f0565b60405180910390fd5b8060108190555050565b6000610a2a82612564565b9050919050565b606060008054610a4090614df4565b80601f0160208091040260200160405190810160405280929190818152602001828054610a6c90614df4565b8015610ab95780601f10610a8e57610100808354040283529160200191610ab9565b820191906000526020600020905b815481529060010190602001808311610a9c57829003601f168201915b5050505050905090565b610acb61255c565b73ffffffffffffffffffffffffffffffffffffffff16610ae96116fd565b73ffffffffffffffffffffffffffffffffffffffff1614610b3f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b36906149f0565b60405180910390fd5b80601660006101000a81548160ff02191690831515021790555050565b6000610b67826125de565b610ba6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9d906149d0565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bec826112f0565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c5d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5490614a10565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c7c61255c565b73ffffffffffffffffffffffffffffffffffffffff161480610cab5750610caa81610ca561255c565b6123d0565b5b610cea576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce190614910565b60405180910390fd5b610cf4838361264a565b505050565b6000600880549050905090565b610d17610d1161255c565b82612703565b610d56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d4d90614a30565b60405180910390fd5b610d618383836127e1565b505050565b6000610d71836113bb565b8210610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da9906147d0565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b601660009054906101000a900460ff1681565b610e2661255c565b73ffffffffffffffffffffffffffffffffffffffff16610e446116fd565b73ffffffffffffffffffffffffffffffffffffffff1614610e9a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e91906149f0565b60405180910390fd5b60004711610edd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed4906149b0565b60405180910390fd5b60004790506000610eec6116fd565b73ffffffffffffffffffffffffffffffffffffffff1682604051610f0f906146b5565b60006040518083038185875af1925050503d8060008114610f4c576040519150601f19603f3d011682016040523d82523d6000602084013e610f51565b606091505b5050905080610f95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f8c90614ad0565b60405180910390fd5b610f9d6116fd565b73ffffffffffffffffffffffffffffffffffffffff167f7084f5476618d8e60b11ef0d7d3f06914655adb8793e28ff7f018d4c76d505d583604051610fe29190614af0565b60405180910390a25050565b611009838383604051806020016040528060008152506121ad565b505050565b6060600061101b836113bb565b905060008167ffffffffffffffff81111561105f577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b60405190808252806020026020018201604052801561108d5781602001602082028036833780820191505090505b50905060005b828110156110fd576110a58582610d66565b8282815181106110de577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101818152505080806110f590614e57565b915050611093565b508092505050919050565b6000611112610cf9565b8210611153576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114a90614a50565b60405180910390fd5b6008828154811061118d577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600c60009054906101000a900460ff1681565b6111ba61255c565b73ffffffffffffffffffffffffffffffffffffffff166111d86116fd565b73ffffffffffffffffffffffffffffffffffffffff161461122e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611225906149f0565b60405180910390fd5b60005b828290508110156112eb57600d6000848484818110611279577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b905060200201602081019061128e9190613cf8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81549060ff021916905580806112e390614e57565b915050611231565b505050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611399576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139090614950565b60405180910390fd5b80915050919050565b600f5481565b600c60019054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561142c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161142390614930565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61147b61255c565b73ffffffffffffffffffffffffffffffffffffffff166114996116fd565b73ffffffffffffffffffffffffffffffffffffffff16146114ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e6906149f0565b60405180910390fd5b6114f96000612a48565b565b61150361255c565b73ffffffffffffffffffffffffffffffffffffffff166115216116fd565b73ffffffffffffffffffffffffffffffffffffffff1614611577576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161156e906149f0565b60405180910390fd5b60005b8282905081101561163d576001600d60008585858181106115c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90506020020160208101906115d99190613cf8565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550808061163590614e57565b91505061157a565b505050565b600c60029054906101000a900460ff1681565b61165d61255c565b73ffffffffffffffffffffffffffffffffffffffff1661167b6116fd565b73ffffffffffffffffffffffffffffffffffffffff16146116d1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c8906149f0565b60405180910390fd5b600c60029054906101000a900460ff1615600c60026101000a81548160ff021916908315150217905550565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61172f61255c565b73ffffffffffffffffffffffffffffffffffffffff1661174d6116fd565b73ffffffffffffffffffffffffffffffffffffffff16146117a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179a906149f0565b60405180910390fd5b80600f8190555050565b6117b561255c565b73ffffffffffffffffffffffffffffffffffffffff166117d36116fd565b73ffffffffffffffffffffffffffffffffffffffff1614611829576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611820906149f0565b60405180910390fd5b81816013919061183a9291906139d4565b505050565b60606001805461184e90614df4565b80601f016020809104026020016040519081016040528092919081815260200182805461187a90614df4565b80156118c75780601f1061189c576101008083540402835291602001916118c7565b820191906000526020600020905b8154815290600101906020018083116118aa57829003601f168201915b5050505050905090565b600d6020528060005260406000206000915054906101000a900460ff1681565b6118f961255c565b73ffffffffffffffffffffffffffffffffffffffff166119176116fd565b73ffffffffffffffffffffffffffffffffffffffff161461196d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611964906149f0565b60405180910390fd5b601660009054906101000a900460ff16156119bd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b490614a70565b60405180910390fd5b60005b8151811015611a4b576000828281518110611a04577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519050611a1f611a196116fd565b82612b0e565b60126000815480929190611a3290614e57565b9190505550508080611a4390614e57565b9150506119c0565b5050565b60011515600c60009054906101000a900460ff161515148015611a7e5750600c60029054906101000a900460ff165b15611b1057600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16611b0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b0690614ab0565b60405180910390fd5b5b601660009054906101000a900460ff16611b5f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b56906147b0565b60405180910390fd5b60105481600e54611b709190614c29565b1115611bb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ba890614790565b60405180910390fd5b80600f54611bbf9190614cb0565b341015611c01576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf8906148b0565b60405180910390fd5b60115481601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611c4f9190614c29565b1115611c90576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8790614a90565b60405180910390fd5b600081601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054611cdd9190614c29565b90506000808367ffffffffffffffff811115611d22577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b604051908082528060200260200182016040528015611d505781602001602082028036833780820191505090505b5090506000805b85811015611dfd576001600e54611d6e9190614c29565b9350611d79846125de565b611de05783838381518110611db7577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010181815250508180611dce90614e57565b9250508080611ddc90614e57565b9150505b600e6000815480929190611df390614e57565b9190505550611d57565b5083601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508460126000828254611e549190614c29565b9250508190555060005b85811015611f4957828181518110611e9f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200260200101519350611eb33385612b0e565b611ee7846013611ec287612b2c565b604051602001611ed3929190614686565b604051602081830303815290604052612cd9565b833373ffffffffffffffffffffffffffffffffffffffff167f25b428dfde728ccfaddad7e29e4ac23c24ed7fd1a6e3e3f91894a9a073f5dfff88604051611f2e9190614af0565b60405180910390a38080611f4190614e57565b915050611e5e565b505050505050565b611f63611f5c61255c565b8383612d4d565b5050565b60125481565b60146020528060005260406000206000915090505481565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611ff5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fec90614870565b60405180910390fd5b60005b81518110156120ff5761205261200c61255c565b838381518110612045577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6020026020010151612703565b612091576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208890614a30565b60405180910390fd5b6120ec84848484815181106120cf577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b602002602001015160405180602001604052806000815250612eba565b80806120f790614e57565b915050611ff8565b50505050565b61210d61255c565b73ffffffffffffffffffffffffffffffffffffffff1661212b6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614612181576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612178906149f0565b60405180910390fd5b600c60009054906101000a900460ff1615600c60006101000a81548160ff021916908315150217905550565b6121be6121b861255c565b83612703565b6121fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f490614a30565b60405180910390fd5b61220984848484612eba565b50505050565b61221761255c565b73ffffffffffffffffffffffffffffffffffffffff166122356116fd565b73ffffffffffffffffffffffffffffffffffffffff161461228b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612282906149f0565b60405180910390fd5b8060118190555050565b61229d61255c565b73ffffffffffffffffffffffffffffffffffffffff166122bb6116fd565b73ffffffffffffffffffffffffffffffffffffffff1614612311576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612308906149f0565b60405180910390fd5b600c60019054906101000a900460ff1615600c60016101000a81548160ff021916908315150217905550565b606061234882612f16565b6000612352612f61565b905060008161236085612b2c565b604051602001612371929190614640565b60405160208183030381529060405290506000816040516020016123959190614664565b604051602081830303815290604052905060008351116123c457604051806020016040528060008152506123c6565b805b9350505050919050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61246c61255c565b73ffffffffffffffffffffffffffffffffffffffff1661248a6116fd565b73ffffffffffffffffffffffffffffffffffffffff16146124e0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124d7906149f0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415612550576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161254790614810565b60405180910390fd5b61255981612a48565b50565b600033905090565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806125d757506125d682612ff3565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166126bd836112f0565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061270e826125de565b61274d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612744906148f0565b60405180910390fd5b6000612758836112f0565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061279a575061279981856123d0565b5b806127d857508373ffffffffffffffffffffffffffffffffffffffff166127c084610b5c565b73ffffffffffffffffffffffffffffffffffffffff16145b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16612801826112f0565b73ffffffffffffffffffffffffffffffffffffffff1614612857576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161284e90614830565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128be90614870565b60405180910390fd5b6128d28383836130d5565b6128dd60008261264a565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461292d9190614d0a565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129849190614c29565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a438383836130e5565b505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612b288282604051806020016040528060008152506130ea565b5050565b60606000821415612b74576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612cd4565b600082905060005b60008214612ba6578080612b8f90614e57565b915050600a82612b9f9190614c7f565b9150612b7c565b60008167ffffffffffffffff811115612be8577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f191660200182016040528015612c1a5781602001600182028036833780820191505090505b5090505b60008514612ccd57600182612c339190614d0a565b9150600a85612c429190614ea0565b6030612c4e9190614c29565b60f81b818381518110612c8a577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612cc69190614c7f565b9450612c1e565b8093505050505b919050565b612ce2826125de565b612d21576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d1890614970565b60405180910390fd5b80600b60008481526020019081526020016000209080519060200190612d48929190613a5a565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612db390614890565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ead9190614753565b60405180910390a3505050565b612ec58484846127e1565b612ed184848484613145565b612f10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f07906147f0565b60405180910390fd5b50505050565b612f1f816125de565b612f5e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f55906148d0565b60405180910390fd5b50565b606060138054612f7090614df4565b80601f0160208091040260200160405190810160405280929190818152602001828054612f9c90614df4565b8015612fe95780601f10612fbe57610100808354040283529160200191612fe9565b820191906000526020600020905b815481529060010190602001808311612fcc57829003601f168201915b5050505050905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806130be57507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806130ce57506130cd826132dc565b5b9050919050565b6130e0838383613346565b505050565b505050565b6130f4838361345a565b6131016000848484613145565b613140576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613137906147f0565b60405180910390fd5b505050565b60006131668473ffffffffffffffffffffffffffffffffffffffff16613634565b156132cf578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261318f61255c565b8786866040518563ffffffff1660e01b81526004016131b194939291906146e5565b602060405180830381600087803b1580156131cb57600080fd5b505af19250505080156131fc57506040513d601f19601f820116820180604052508101906131f99190613fde565b60015b61327f573d806000811461322c576040519150601f19603f3d011682016040523d82523d6000602084013e613231565b606091505b50600081511415613277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161326e906147f0565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506132d4565b600190505b949350505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b613351838383613657565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156133945761338f8161365c565b6133d3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146133d2576133d183826136a5565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134165761341181613812565b613455565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614613454576134538282613955565b5b5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134c190614990565b60405180910390fd5b6134d3816125de565b15613513576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161350a90614850565b60405180910390fd5b61351f600083836130d5565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461356f9190614c29565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4613630600083836130e5565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016136b2846113bb565b6136bc9190614d0a565b90506000600760008481526020019081526020016000205490508181146137a1576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016008805490506138269190614d0a565b905060006009600084815260200190815260200160002054905060006008838154811061387c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600883815481106138c4577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480613939577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000613960836113bb565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b8280546139e090614df4565b90600052602060002090601f016020900481019282613a025760008555613a49565b82601f10613a1b57803560ff1916838001178555613a49565b82800160010185558215613a49579182015b82811115613a48578235825591602001919060010190613a2d565b5b509050613a569190613ae0565b5090565b828054613a6690614df4565b90600052602060002090601f016020900481019282613a885760008555613acf565b82601f10613aa157805160ff1916838001178555613acf565b82800160010185558215613acf579182015b82811115613ace578251825591602001919060010190613ab3565b5b509050613adc9190613ae0565b5090565b5b80821115613af9576000816000905550600101613ae1565b5090565b6000613b10613b0b84614b30565b614b0b565b90508083825260208201905082856020860282011115613b2f57600080fd5b60005b85811015613b5f5781613b458882613ce3565b845260208401935060208301925050600181019050613b32565b5050509392505050565b6000613b7c613b7784614b5c565b614b0b565b905082815260208101848484011115613b9457600080fd5b613b9f848285614db2565b509392505050565b600081359050613bb681615657565b92915050565b60008083601f840112613bce57600080fd5b8235905067ffffffffffffffff811115613be757600080fd5b602083019150836020820283011115613bff57600080fd5b9250929050565b600082601f830112613c1757600080fd5b8135613c27848260208601613afd565b91505092915050565b600081359050613c3f8161566e565b92915050565b600081359050613c5481615685565b92915050565b600081519050613c6981615685565b92915050565b600082601f830112613c8057600080fd5b8135613c90848260208601613b69565b91505092915050565b60008083601f840112613cab57600080fd5b8235905067ffffffffffffffff811115613cc457600080fd5b602083019150836001820283011115613cdc57600080fd5b9250929050565b600081359050613cf28161569c565b92915050565b600060208284031215613d0a57600080fd5b6000613d1884828501613ba7565b91505092915050565b60008060408385031215613d3457600080fd5b6000613d4285828601613ba7565b9250506020613d5385828601613ba7565b9150509250929050565b600080600060608486031215613d7257600080fd5b6000613d8086828701613ba7565b9350506020613d9186828701613ba7565b925050604084013567ffffffffffffffff811115613dae57600080fd5b613dba86828701613c06565b9150509250925092565b600080600060608486031215613dd957600080fd5b6000613de786828701613ba7565b9350506020613df886828701613ba7565b9250506040613e0986828701613ce3565b9150509250925092565b60008060008060808587031215613e2957600080fd5b6000613e3787828801613ba7565b9450506020613e4887828801613ba7565b9350506040613e5987828801613ce3565b925050606085013567ffffffffffffffff811115613e7657600080fd5b613e8287828801613c6f565b91505092959194509250565b60008060408385031215613ea157600080fd5b6000613eaf85828601613ba7565b9250506020613ec085828601613c30565b9150509250929050565b60008060408385031215613edd57600080fd5b6000613eeb85828601613ba7565b9250506020613efc85828601613ce3565b9150509250929050565b60008060208385031215613f1957600080fd5b600083013567ffffffffffffffff811115613f3357600080fd5b613f3f85828601613bbc565b92509250509250929050565b600060208284031215613f5d57600080fd5b600082013567ffffffffffffffff811115613f7757600080fd5b613f8384828501613c06565b91505092915050565b600060208284031215613f9e57600080fd5b6000613fac84828501613c30565b91505092915050565b600060208284031215613fc757600080fd5b6000613fd584828501613c45565b91505092915050565b600060208284031215613ff057600080fd5b6000613ffe84828501613c5a565b91505092915050565b6000806020838503121561401a57600080fd5b600083013567ffffffffffffffff81111561403457600080fd5b61404085828601613c99565b92509250509250929050565b60006020828403121561405e57600080fd5b600061406c84828501613ce3565b91505092915050565b60006140818383614622565b60208301905092915050565b61409681614d3e565b82525050565b60006140a782614bb2565b6140b18185614be0565b93506140bc83614b8d565b8060005b838110156140ed5781516140d48882614075565b97506140df83614bd3565b9250506001810190506140c0565b5085935050505092915050565b61410381614d50565b82525050565b600061411482614bbd565b61411e8185614bf1565b935061412e818560208601614dc1565b61413781614f8d565b840191505092915050565b600061414d82614bc8565b6141578185614c0d565b9350614167818560208601614dc1565b61417081614f8d565b840191505092915050565b600061418682614bc8565b6141908185614c1e565b93506141a0818560208601614dc1565b80840191505092915050565b600081546141b981614df4565b6141c38186614c1e565b945060018216600081146141de57600181146141ef57614222565b60ff19831686528186019350614222565b6141f885614b9d565b60005b8381101561421a578154818901526001820191506020810190506141fb565b838801955050505b50505092915050565b6000614238600f83614c0d565b915061424382614f9e565b602082019050919050565b600061425b601683614c0d565b915061426682614fc7565b602082019050919050565b600061427e602b83614c0d565b915061428982614ff0565b604082019050919050565b60006142a1603283614c0d565b91506142ac8261503f565b604082019050919050565b60006142c4602683614c0d565b91506142cf8261508e565b604082019050919050565b60006142e7602583614c0d565b91506142f2826150dd565b604082019050919050565b600061430a601c83614c0d565b91506143158261512c565b602082019050919050565b600061432d602483614c0d565b915061433882615155565b604082019050919050565b6000614350601983614c0d565b915061435b826151a4565b602082019050919050565b6000614373601483614c0d565b915061437e826151cd565b602082019050919050565b6000614396601783614c0d565b91506143a1826151f6565b602082019050919050565b60006143b9602c83614c0d565b91506143c48261521f565b604082019050919050565b60006143dc603883614c0d565b91506143e78261526e565b604082019050919050565b60006143ff602a83614c0d565b915061440a826152bd565b604082019050919050565b6000614422602983614c0d565b915061442d8261530c565b604082019050919050565b6000614445602e83614c0d565b91506144508261535b565b604082019050919050565b6000614468602083614c0d565b9150614473826153aa565b602082019050919050565b600061448b600c83614c0d565b9150614496826153d3565b602082019050919050565b60006144ae602c83614c0d565b91506144b9826153fc565b604082019050919050565b60006144d1600583614c1e565b91506144dc8261544b565b600582019050919050565b60006144f4602083614c0d565b91506144ff82615474565b602082019050919050565b6000614517602183614c0d565b91506145228261549d565b604082019050919050565b600061453a600083614c02565b9150614545826154ec565b600082019050919050565b600061455d603183614c0d565b9150614568826154ef565b604082019050919050565b6000614580602c83614c0d565b915061458b8261553e565b604082019050919050565b60006145a3602183614c0d565b91506145ae8261558d565b604082019050919050565b60006145c6601583614c0d565b91506145d1826155dc565b602082019050919050565b60006145e9601783614c0d565b91506145f482615605565b602082019050919050565b600061460c601183614c0d565b91506146178261562e565b602082019050919050565b61462b81614da8565b82525050565b61463a81614da8565b82525050565b600061464c828561417b565b9150614658828461417b565b91508190509392505050565b6000614670828461417b565b915061467b826144c4565b915081905092915050565b600061469282856141ac565b915061469e828461417b565b91506146a9826144c4565b91508190509392505050565b60006146c08261452d565b9150819050919050565b60006020820190506146df600083018461408d565b92915050565b60006080820190506146fa600083018761408d565b614707602083018661408d565b6147146040830185614631565b81810360608301526147268184614109565b905095945050505050565b6000602082019050818103600083015261474b818461409c565b905092915050565b600060208201905061476860008301846140fa565b92915050565b600060208201905081810360008301526147888184614142565b905092915050565b600060208201905081810360008301526147a98161422b565b9050919050565b600060208201905081810360008301526147c98161424e565b9050919050565b600060208201905081810360008301526147e981614271565b9050919050565b6000602082019050818103600083015261480981614294565b9050919050565b60006020820190508181036000830152614829816142b7565b9050919050565b60006020820190508181036000830152614849816142da565b9050919050565b60006020820190508181036000830152614869816142fd565b9050919050565b6000602082019050818103600083015261488981614320565b9050919050565b600060208201905081810360008301526148a981614343565b9050919050565b600060208201905081810360008301526148c981614366565b9050919050565b600060208201905081810360008301526148e981614389565b9050919050565b60006020820190508181036000830152614909816143ac565b9050919050565b60006020820190508181036000830152614929816143cf565b9050919050565b60006020820190508181036000830152614949816143f2565b9050919050565b6000602082019050818103600083015261496981614415565b9050919050565b6000602082019050818103600083015261498981614438565b9050919050565b600060208201905081810360008301526149a98161445b565b9050919050565b600060208201905081810360008301526149c98161447e565b9050919050565b600060208201905081810360008301526149e9816144a1565b9050919050565b60006020820190508181036000830152614a09816144e7565b9050919050565b60006020820190508181036000830152614a298161450a565b9050919050565b60006020820190508181036000830152614a4981614550565b9050919050565b60006020820190508181036000830152614a6981614573565b9050919050565b60006020820190508181036000830152614a8981614596565b9050919050565b60006020820190508181036000830152614aa9816145b9565b9050919050565b60006020820190508181036000830152614ac9816145dc565b9050919050565b60006020820190508181036000830152614ae9816145ff565b9050919050565b6000602082019050614b056000830184614631565b92915050565b6000614b15614b26565b9050614b218282614e26565b919050565b6000604051905090565b600067ffffffffffffffff821115614b4b57614b4a614f5e565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614b7757614b76614f5e565b5b614b8082614f8d565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000614c3482614da8565b9150614c3f83614da8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115614c7457614c73614ed1565b5b828201905092915050565b6000614c8a82614da8565b9150614c9583614da8565b925082614ca557614ca4614f00565b5b828204905092915050565b6000614cbb82614da8565b9150614cc683614da8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614cff57614cfe614ed1565b5b828202905092915050565b6000614d1582614da8565b9150614d2083614da8565b925082821015614d3357614d32614ed1565b5b828203905092915050565b6000614d4982614d88565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614ddf578082015181840152602081019050614dc4565b83811115614dee576000848401525b50505050565b60006002820490506001821680614e0c57607f821691505b60208210811415614e2057614e1f614f2f565b5b50919050565b614e2f82614f8d565b810181811067ffffffffffffffff82111715614e4e57614e4d614f5e565b5b80604052505050565b6000614e6282614da8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614e9557614e94614ed1565b5b600182019050919050565b6000614eab82614da8565b9150614eb683614da8565b925082614ec657614ec5614f00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f57652061726520736f6c64206f75740000000000000000000000000000000000600082015250565b7f4d696e74696e67206973206e6f7420656e61626c656400000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f496e636f72726563742076616c75652073656e74000000000000000000000000600082015250565b7f546f6b656e20494420646f6573206e6f74206578697374000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45524337323155524953746f726167653a2055524920736574206f66206e6f6e60008201527f6578697374656e7420746f6b656e000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f5075626c6963206d696e74696e6720697320616c726561647920656e61626c6560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61782070657220627579657220726561636865640000000000000000000000600082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b7f5769746864726177616c206661696c6564000000000000000000000000000000600082015250565b61566081614d3e565b811461566b57600080fd5b50565b61567781614d50565b811461568257600080fd5b50565b61568e81614d5c565b811461569957600080fd5b50565b6156a581614da8565b81146156b057600080fd5b5056fea2646970667358221220acf4cc054aeef486132e1d9ed6d6f6b4e95994161ff78640e9c3d36ed6362b6664736f6c63430008040033
Deployed Bytecode Sourcemap
236:6673:13:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;1284:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6290:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2501:100:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1065:111:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4061:221:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3584:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1658:113:5;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4811:339:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1326:256:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;819:25:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4804:345;;;;;;;;;;;;;:::i;:::-;;5221:185:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6510:396:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1848:233:5;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;325:33:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2180:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2195:239:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;533:36:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;365:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1925:208:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1714:103:14;;;;;;;;;;;;;:::i;:::-;;1965:207:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;402:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1843:114;;;;;;;;;;;;;:::i;:::-;;1063:87:14;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1184:92:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1519:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2670:104:3;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;445:41:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2467:337;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3304:1492;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;4354:155:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;640:26:13;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;709:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2836:460;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1650:93;;;;;;;;;;;;;:::i;:::-;;5477:326:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1397:114:13;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1751:84;;;;;;;;;;;;;:::i;:::-;;5412:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;4580:164:3;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;1972:201:14;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;1284:105:13;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1369:12:13::1;1356:10;:25;;;;1284:105:::0;:::o;6290:212::-;6429:4;6458:36;6482:11;6458:23;:36::i;:::-;6451:43;;6290:212;;;:::o;2501:100:3:-;2555:13;2588:5;2581:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2501:100;:::o;1065:111:13:-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1154:14:13::1;1138:13;;:30;;;;;;;;;;;;;;;;;;1065:111:::0;:::o;4061:221:3:-;4137:7;4165:16;4173:7;4165;:16::i;:::-;4157:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;4250:15;:24;4266:7;4250:24;;;;;;;;;;;;;;;;;;;;;4243:31;;4061:221;;;:::o;3584:411::-;3665:13;3681:23;3696:7;3681:14;:23::i;:::-;3665:39;;3729:5;3723:11;;:2;:11;;;;3715:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3823:5;3807:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;3832:37;3849:5;3856:12;:10;:12::i;:::-;3832:16;:37::i;:::-;3807:62;3785:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;3966:21;3975:2;3979:7;3966:8;:21::i;:::-;3584:411;;;:::o;1658:113:5:-;1719:7;1746:10;:17;;;;1739:24;;1658:113;:::o;4811:339:3:-;5006:41;5025:12;:10;:12::i;:::-;5039:7;5006:18;:41::i;:::-;4998:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5114:28;5124:4;5130:2;5134:7;5114:9;:28::i;:::-;4811:339;;;:::o;1326:256:5:-;1423:7;1459:23;1476:5;1459:16;:23::i;:::-;1451:5;:31;1443:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;1548:12;:19;1561:5;1548:19;;;;;;;;;;;;;;;:26;1568:5;1548:26;;;;;;;;;;;;1541:33;;1326:256;;;;:::o;819:25:13:-;;;;;;;;;;;;;:::o;4804:345::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;4884:1:13::1;4860:21;:25;4852:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;4913:24;4940:21;4913:48;;4973:12;4999:7;:5;:7::i;:::-;4991:21;;5020:16;4991:50;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4972:69;;;5060:7;5052:37;;;;;;;;;;;;:::i;:::-;;;;;;;;;5115:7;:5;:7::i;:::-;5105:36;;;5124:16;5105:36;;;;;;:::i;:::-;;;;;;;;1354:1:14;;4804:345:13:o:0;5221:185:3:-;5359:39;5376:4;5382:2;5386:7;5359:39;;;;;;;;;;;;:16;:39::i;:::-;5221:185;;;:::o;6510:396:13:-;6597:16;6631:23;6657:17;6667:6;6657:9;:17::i;:::-;6631:43;;6691:25;6733:15;6719:30;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6691:58;;6765:9;6760:113;6780:15;6776:1;:19;6760:113;;;6831:30;6851:6;6859:1;6831:19;:30::i;:::-;6817:8;6826:1;6817:11;;;;;;;;;;;;;;;;;;;;;:44;;;;;6797:3;;;;;:::i;:::-;;;;6760:113;;;;6890:8;6883:15;;;;6510:396;;;:::o;1848:233:5:-;1923:7;1959:30;:28;:30::i;:::-;1951:5;:38;1943:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;2056:10;2067:5;2056:17;;;;;;;;;;;;;;;;;;;;;;;;2049:24;;1848:233;;;:::o;325:33:13:-;;;;;;;;;;;;;:::o;2180:221::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2282:6:13::1;2277:117;2298:17;;:24;;2294:1;:28;2277:117;;;2351:9;:31;2361:17;;2379:1;2361:20;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2351:31;;;;;;;;;;;;;;;;2344:38;;;;;;;;;;;2324:3;;;;;:::i;:::-;;;;2277:117;;;;2180:221:::0;;:::o;2195:239:3:-;2267:7;2287:13;2303:7;:16;2311:7;2303:16;;;;;;;;;;;;;;;;;;;;;2287:32;;2355:1;2338:19;;:5;:19;;;;2330:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2421:5;2414:12;;;2195:239;;;:::o;533:36:13:-;;;;:::o;365:30::-;;;;;;;;;;;;;:::o;1925:208:3:-;1997:7;2042:1;2025:19;;:5;:19;;;;2017:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;2109:9;:16;2119:5;2109:16;;;;;;;;;;;;;;;;2102:23;;1925:208;;;:::o;1714:103:14:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1779:30:::1;1806:1;1779:18;:30::i;:::-;1714:103::o:0;1965:207:13:-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2059:6:13::1;2054:111;2075:14;;:21;;2071:1;:25;2054:111;;;2149:4;2118:9;:28;2128:14;;2143:1;2128:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;2118:28;;;;;;;;;;;;;;;;:35;;;;;;;;;;;;;;;;;;2098:3;;;;;:::i;:::-;;;;2054:111;;;;1965:207:::0;;:::o;402:36::-;;;;;;;;;;;;;:::o;1843:114::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1932:17:13::1;;;;;;;;;;;1931:18;1911:17;;:38;;;;;;;;;;;;;;;;;;1843:114::o:0;1063:87:14:-;1109:7;1136:6;;;;;;;;;;;1129:13;;1063:87;:::o;1184:92:13:-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1260:8:13::1;1248:9;:20;;;;1184:92:::0;:::o;1519:123::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1621:13:13::1;;1606:12;:28;;;;;;;:::i;:::-;;1519:123:::0;;:::o;2670:104:3:-;2726:13;2759:7;2752:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2670:104;:::o;445:41:13:-;;;;;;;;;;;;;;;;;;;;;;:::o;2467:337::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2561:13:13::1;;;;;;;;;;;2560:14;2552:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;2630:9;2625:172;2649:8;:15;2645:1;:19;2625:172;;;2686:15;2704:8;2713:1;2704:11;;;;;;;;;;;;;;;;;;;;;;2686:29;;2730:27;2740:7;:5;:7::i;:::-;2749;2730:9;:27::i;:::-;2772:11;;:13;;;;;;;;;:::i;:::-;;;;;;2625:172;2666:3;;;;;:::i;:::-;;;;2625:172;;;;2467:337:::0;:::o;3304:1492::-;3427:4;3410:21;;:13;;;;;;;;;;;:21;;;:42;;;;;3435:17;;;;;;;;;;;3410:42;3406:132;;;3477:9;:21;3487:10;3477:21;;;;;;;;;;;;;;;;;;;;;;;;;3469:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;3406:132;3556:13;;;;;;;;;;;3548:48;;;;;;;;;;;;:::i;:::-;;;;;;;;;3646:10;;3633:9;3615:15;;:27;;;;:::i;:::-;:41;;3607:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;3720:9;3708;;:21;;;;:::i;:::-;3695:9;:34;;3687:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;3814:13;;3801:9;3773:13;:25;3787:10;3773:25;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;:54;;3765:88;;;;;;;;;;;;:::i;:::-;;;;;;;;;3866:25;3922:9;3894:13;:25;3908:10;3894:25;;;;;;;;;;;;;;;;:37;;;;:::i;:::-;3866:65;;3942:15;3970:33;4020:9;4006:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3970:60;;4041:21;4084:9;4079:294;4103:9;4099:1;:13;4079:294;;;4159:1;4141:15;;:19;;;;:::i;:::-;4131:29;;4180:16;4188:7;4180;:16::i;:::-;4175:155;;4251:7;4217:16;4234:13;4217:31;;;;;;;;;;;;;;;;;;;;;:41;;;;;4277:15;;;;;:::i;:::-;;;;4311:3;;;;;:::i;:::-;;;;4175:155;4344:15;;:17;;;;;;;;;:::i;:::-;;;;;;4079:294;;;;4413:17;4385:13;:25;4399:10;4385:25;;;;;;;;;;;;;;;:45;;;;4456:9;4441:11;;:24;;;;;;;:::i;:::-;;;;;;;;4483:9;4478:311;4502:9;4498:1;:13;4478:311;;;4543:16;4560:1;4543:19;;;;;;;;;;;;;;;;;;;;;;4533:29;;4577:30;4587:10;4599:7;4577:9;:30::i;:::-;4622:97;4635:7;4668:12;4682:25;4699:7;4682:16;:25::i;:::-;4651:66;;;;;;;;;:::i;:::-;;;;;;;;;;;;;4622:12;:97::i;:::-;4758:7;4746:10;4739:38;;;4767:9;4739:38;;;;;;:::i;:::-;;;;;;;;4513:3;;;;;:::i;:::-;;;;4478:311;;;;3304:1492;;;;;:::o;4354:155:3:-;4449:52;4468:12;:10;:12::i;:::-;4482:8;4492;4449:18;:52::i;:::-;4354:155;;:::o;640:26:13:-;;;;:::o;709:49::-;;;;;;;;;;;;;;;;;:::o;2836:460::-;2959:1;2945:16;;:2;:16;;;;2937:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;3014:9;3009:280;3033:8;:15;3029:1;:19;3009:280;;;3127:45;3146:12;:10;:12::i;:::-;3160:8;3169:1;3160:11;;;;;;;;;;;;;;;;;;;;;;3127:18;:45::i;:::-;3119:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;3237:40;3251:4;3257:2;3261:8;3270:1;3261:11;;;;;;;;;;;;;;;;;;;;;;3237:40;;;;;;;;;;;;:13;:40::i;:::-;3050:3;;;;;:::i;:::-;;;;3009:280;;;;2836:460;;;:::o;1650:93::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1722:13:13::1;;;;;;;;;;;1721:14;1705:13;;:30;;;;;;;;;;;;;;;;;;1650:93::o:0;5477:326:3:-;5651:41;5670:12;:10;:12::i;:::-;5684:7;5651:18;:41::i;:::-;5643:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;5757:38;5771:4;5777:2;5781:7;5790:4;5757:13;:38::i;:::-;5477:326;;;;:::o;1397:114:13:-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1489:14:13::1;1473:13;:30;;;;1397:114:::0;:::o;1751:84::-;1294:12:14;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;1817:10:13::1;;;;;;;;;;;1816:11;1803:10;;:24;;;;;;;;;;;;;;;;;;1751:84::o:0;5412:411::-;5503:13;5529:23;5544:7;5529:14;:23::i;:::-;5565:21;5589:10;:8;:10::i;:::-;5565:34;;5610:17;5654:7;5663:25;5680:7;5663:16;:25::i;:::-;5637:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;5610:80;;5701:18;5746:3;5729:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;5701:59;;5802:1;5784:7;5778:21;:25;:37;;;;;;;;;;;;;;;;;5806:4;5778:37;5771:44;;;;;5412:411;;;:::o;4580:164:3:-;4677:4;4701:18;:25;4720:5;4701:25;;;;;;;;;;;;;;;:35;4727:8;4701:35;;;;;;;;;;;;;;;;;;;;;;;;;4694:42;;4580:164;;;;:::o;1972:201:14:-;1294:12;:10;:12::i;:::-;1283:23;;:7;:5;:7::i;:::-;:23;;;1275:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2081:1:::1;2061:22;;:8;:22;;;;2053:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;2137:28;2156:8;2137:18;:28::i;:::-;1972:201:::0;:::o;656:98:1:-;709:7;736:10;729:17;;656:98;:::o;1018:224:5:-;1120:4;1159:35;1144:50;;;:11;:50;;;;:90;;;;1198:36;1222:11;1198:23;:36::i;:::-;1144:90;1137:97;;1018:224;;;:::o;7310:127:3:-;7375:4;7427:1;7399:30;;:7;:16;7407:7;7399:16;;;;;;;;;;;;;;;;;;;;;:30;;;;7392:37;;7310:127;;;:::o;11455:174::-;11557:2;11530:15;:24;11546:7;11530:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;11613:7;11609:2;11575:46;;11584:23;11599:7;11584:14;:23::i;:::-;11575:46;;;;;;;;;;;;11455:174;;:::o;7604:348::-;7697:4;7722:16;7730:7;7722;:16::i;:::-;7714:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;7798:13;7814:23;7829:7;7814:14;:23::i;:::-;7798:39;;7867:5;7856:16;;:7;:16;;;:52;;;;7876:32;7893:5;7900:7;7876:16;:32::i;:::-;7856:52;:87;;;;7936:7;7912:31;;:20;7924:7;7912:11;:20::i;:::-;:31;;;7856:87;7848:96;;;7604:348;;;;:::o;10711:625::-;10870:4;10843:31;;:23;10858:7;10843:14;:23::i;:::-;:31;;;10835:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;10949:1;10935:16;;:2;:16;;;;10927:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;11005:39;11026:4;11032:2;11036:7;11005:20;:39::i;:::-;11109:29;11126:1;11130:7;11109:8;:29::i;:::-;11170:1;11151:9;:15;11161:4;11151:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;11199:1;11182:9;:13;11192:2;11182:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;11230:2;11211:7;:16;11219:7;11211:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;11269:7;11265:2;11250:27;;11259:4;11250:27;;;;;;;;;;;;11290:38;11310:4;11316:2;11320:7;11290:19;:38::i;:::-;10711:625;;;:::o;2333:191:14:-;2407:16;2426:6;;;;;;;;;;;2407:25;;2452:8;2443:6;;:17;;;;;;;;;;;;;;;;;;2507:8;2476:40;;2497:8;2476:40;;;;;;;;;;;;2333:191;;:::o;8294:110:3:-;8370:26;8380:2;8384:7;8370:26;;;;;;;;;;;;:9;:26::i;:::-;8294:110;;:::o;342:723:15:-;398:13;628:1;619:5;:10;615:53;;;646:10;;;;;;;;;;;;;;;;;;;;;615:53;678:12;693:5;678:20;;709:14;734:78;749:1;741:4;:9;734:78;;767:8;;;;;:::i;:::-;;;;798:2;790:10;;;;;:::i;:::-;;;734:78;;;822:19;854:6;844:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;822:39;;872:154;888:1;879:5;:10;872:154;;916:1;906:11;;;;;:::i;:::-;;;983:2;975:5;:10;;;;:::i;:::-;962:2;:24;;;;:::i;:::-;949:39;;932:6;939;932:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;1012:2;1003:11;;;;;:::i;:::-;;;872:154;;;1050:6;1036:21;;;;;342:723;;;;:::o;1321:217:6:-;1421:16;1429:7;1421;:16::i;:::-;1413:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;1521:9;1499:10;:19;1510:7;1499:19;;;;;;;;;;;:31;;;;;;;;;;;;:::i;:::-;;1321:217;;:::o;11772:315:3:-;11927:8;11918:17;;:5;:17;;;;11910:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;12014:8;11976:18;:25;11995:5;11976:25;;;;;;;;;;;;;;;:35;12002:8;11976:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;12060:8;12038:41;;12053:5;12038:41;;;12070:8;12038:41;;;;;;:::i;:::-;;;;;;;;11772:315;;;:::o;6684:313::-;6840:28;6850:4;6856:2;6860:7;6840:9;:28::i;:::-;6887:47;6910:4;6916:2;6920:7;6929:4;6887:22;:47::i;:::-;6879:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;6684:313;;;;:::o;5278:126:13:-;5352:16;5360:7;5352;:16::i;:::-;5344:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;5278:126;:::o;5157:113::-;5217:13;5250:12;5243:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;5157:113;:::o;1556:305:3:-;1658:4;1710:25;1695:40;;;:11;:40;;;;:105;;;;1767:33;1752:48;;;:11;:48;;;;1695:105;:158;;;;1817:36;1841:11;1817:23;:36::i;:::-;1695:158;1675:178;;1556:305;;;:::o;6100:182:13:-;6229:45;6256:4;6262:2;6266:7;6229:26;:45::i;:::-;6100:182;;;:::o;14531:125:3:-;;;;:::o;8631:319::-;8760:18;8766:2;8770:7;8760:5;:18::i;:::-;8811:53;8842:1;8846:2;8850:7;8859:4;8811:22;:53::i;:::-;8789:153;;;;;;;;;;;;:::i;:::-;;;;;;;;;8631:319;;;:::o;12651:797::-;12805:4;12826:15;:2;:13;;;:15::i;:::-;12822:619;;;12878:2;12862:36;;;12899:12;:10;:12::i;:::-;12913:4;12919:7;12928:4;12862:71;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;12858:528;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;13120:1;13103:6;:13;:18;13099:272;;;13146:60;;;;;;;;;;:::i;:::-;;;;;;;;13099:272;13321:6;13315:13;13306:6;13302:2;13298:15;13291:38;12858:528;12994:41;;;12984:51;;;:6;:51;;;;12977:58;;;;;12822:619;13425:4;13418:11;;12651:797;;;;;;;:::o;854:157:2:-;939:4;978:25;963:40;;;:11;:40;;;;956:47;;854:157;;;:::o;2694:589:5:-;2838:45;2865:4;2871:2;2875:7;2838:26;:45::i;:::-;2916:1;2900:18;;:4;:18;;;2896:187;;;2935:40;2967:7;2935:31;:40::i;:::-;2896:187;;;3005:2;2997:10;;:4;:10;;;2993:90;;3024:47;3057:4;3063:7;3024:32;:47::i;:::-;2993:90;2896:187;3111:1;3097:16;;:2;:16;;;3093:183;;;3130:45;3167:7;3130:36;:45::i;:::-;3093:183;;;3203:4;3197:10;;:2;:10;;;3193:83;;3224:40;3252:2;3256:7;3224:27;:40::i;:::-;3193:83;3093:183;2694:589;;;:::o;9286:439:3:-;9380:1;9366:16;;:2;:16;;;;9358:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;9439:16;9447:7;9439;:16::i;:::-;9438:17;9430:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;9501:45;9530:1;9534:2;9538:7;9501:20;:45::i;:::-;9576:1;9559:9;:13;9569:2;9559:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;9607:2;9588:7;:16;9596:7;9588:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;9652:7;9648:2;9627:33;;9644:1;9627:33;;;;;;;;;;;;9673:44;9701:1;9705:2;9709:7;9673:19;:44::i;:::-;9286:439;;:::o;1210:326:0:-;1270:4;1527:1;1505:7;:19;;;:23;1498:30;;1210:326;;;:::o;14020:126:3:-;;;;:::o;4006:164:5:-;4110:10;:17;;;;4083:15;:24;4099:7;4083:24;;;;;;;;;;;:44;;;;4138:10;4154:7;4138:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4006:164;:::o;4797:988::-;5063:22;5113:1;5088:22;5105:4;5088:16;:22::i;:::-;:26;;;;:::i;:::-;5063:51;;5125:18;5146:17;:26;5164:7;5146:26;;;;;;;;;;;;5125:47;;5293:14;5279:10;:28;5275:328;;5324:19;5346:12;:18;5359:4;5346:18;;;;;;;;;;;;;;;:34;5365:14;5346:34;;;;;;;;;;;;5324:56;;5430:11;5397:12;:18;5410:4;5397:18;;;;;;;;;;;;;;;:30;5416:10;5397:30;;;;;;;;;;;:44;;;;5547:10;5514:17;:30;5532:11;5514:30;;;;;;;;;;;:43;;;;5275:328;;5699:17;:26;5717:7;5699:26;;;;;;;;;;;5692:33;;;5743:12;:18;5756:4;5743:18;;;;;;;;;;;;;;;:34;5762:14;5743:34;;;;;;;;;;;5736:41;;;4797:988;;;;:::o;6080:1079::-;6333:22;6378:1;6358:10;:17;;;;:21;;;;:::i;:::-;6333:46;;6390:18;6411:15;:24;6427:7;6411:24;;;;;;;;;;;;6390:45;;6762:19;6784:10;6795:14;6784:26;;;;;;;;;;;;;;;;;;;;;;;;6762:48;;6848:11;6823:10;6834;6823:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;6959:10;6928:15;:28;6944:11;6928:28;;;;;;;;;;;:41;;;;7100:15;:24;7116:7;7100:24;;;;;;;;;;;7093:31;;;7135:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;6080:1079;;;;:::o;3584:221::-;3669:14;3686:20;3703:2;3686:16;:20::i;:::-;3669:37;;3744:7;3717:12;:16;3730:2;3717:16;;;;;;;;;;;;;;;:24;3734:6;3717:24;;;;;;;;;;;:34;;;;3791:6;3762:17;:26;3780:7;3762:26;;;;;;;;;;;:35;;;;3584:221;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:655:16:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:2;;;414:1;411;404:12;350:2;450:1;435:238;460:6;457:1;454:13;435:238;;;528:3;557:37;590:3;578:10;557:37;:::i;:::-;552:3;545:50;624:4;619:3;615:14;608:21;;658:4;653:3;649:14;642:21;;495:178;482:1;479;475:9;470:14;;435:238;;;439:14;126:553;;;;;;;:::o;685:343::-;762:5;787:65;803:48;844:6;803:48;:::i;:::-;787:65;:::i;:::-;778:74;;875:6;868:5;861:21;913:4;906:5;902:16;951:3;942:6;937:3;933:16;930:25;927:2;;;968:1;965;958:12;927:2;981:41;1015:6;1010:3;1005;981:41;:::i;:::-;768:260;;;;;;:::o;1034:139::-;1080:5;1118:6;1105:20;1096:29;;1134:33;1161:5;1134:33;:::i;:::-;1086:87;;;;:::o;1196:367::-;1269:8;1279:6;1329:3;1322:4;1314:6;1310:17;1306:27;1296:2;;1347:1;1344;1337:12;1296:2;1383:6;1370:20;1360:30;;1413:18;1405:6;1402:30;1399:2;;;1445:1;1442;1435:12;1399:2;1482:4;1474:6;1470:17;1458:29;;1536:3;1528:4;1520:6;1516:17;1506:8;1502:32;1499:41;1496:2;;;1553:1;1550;1543:12;1496:2;1286:277;;;;;:::o;1586:303::-;1657:5;1706:3;1699:4;1691:6;1687:17;1683:27;1673:2;;1724:1;1721;1714:12;1673:2;1764:6;1751:20;1789:94;1879:3;1871:6;1864:4;1856:6;1852:17;1789:94;:::i;:::-;1780:103;;1663:226;;;;;:::o;1895:133::-;1938:5;1976:6;1963:20;1954:29;;1992:30;2016:5;1992:30;:::i;:::-;1944:84;;;;:::o;2034:137::-;2079:5;2117:6;2104:20;2095:29;;2133:32;2159:5;2133:32;:::i;:::-;2085:86;;;;:::o;2177:141::-;2233:5;2264:6;2258:13;2249:22;;2280:32;2306:5;2280:32;:::i;:::-;2239:79;;;;:::o;2337:271::-;2392:5;2441:3;2434:4;2426:6;2422:17;2418:27;2408:2;;2459:1;2456;2449:12;2408:2;2499:6;2486:20;2524:78;2598:3;2590:6;2583:4;2575:6;2571:17;2524:78;:::i;:::-;2515:87;;2398:210;;;;;:::o;2628:352::-;2686:8;2696:6;2746:3;2739:4;2731:6;2727:17;2723:27;2713:2;;2764:1;2761;2754:12;2713:2;2800:6;2787:20;2777:30;;2830:18;2822:6;2819:30;2816:2;;;2862:1;2859;2852:12;2816:2;2899:4;2891:6;2887:17;2875:29;;2953:3;2945:4;2937:6;2933:17;2923:8;2919:32;2916:41;2913:2;;;2970:1;2967;2960:12;2913:2;2703:277;;;;;:::o;2986:139::-;3032:5;3070:6;3057:20;3048:29;;3086:33;3113:5;3086:33;:::i;:::-;3038:87;;;;:::o;3131:262::-;3190:6;3239:2;3227:9;3218:7;3214:23;3210:32;3207:2;;;3255:1;3252;3245:12;3207:2;3298:1;3323:53;3368:7;3359:6;3348:9;3344:22;3323:53;:::i;:::-;3313:63;;3269:117;3197:196;;;;:::o;3399:407::-;3467:6;3475;3524:2;3512:9;3503:7;3499:23;3495:32;3492:2;;;3540:1;3537;3530:12;3492:2;3583:1;3608:53;3653:7;3644:6;3633:9;3629:22;3608:53;:::i;:::-;3598:63;;3554:117;3710:2;3736:53;3781:7;3772:6;3761:9;3757:22;3736:53;:::i;:::-;3726:63;;3681:118;3482:324;;;;;:::o;3812:695::-;3914:6;3922;3930;3979:2;3967:9;3958:7;3954:23;3950:32;3947:2;;;3995:1;3992;3985:12;3947:2;4038:1;4063:53;4108:7;4099:6;4088:9;4084:22;4063:53;:::i;:::-;4053:63;;4009:117;4165:2;4191:53;4236:7;4227:6;4216:9;4212:22;4191:53;:::i;:::-;4181:63;;4136:118;4321:2;4310:9;4306:18;4293:32;4352:18;4344:6;4341:30;4338:2;;;4384:1;4381;4374:12;4338:2;4412:78;4482:7;4473:6;4462:9;4458:22;4412:78;:::i;:::-;4402:88;;4264:236;3937:570;;;;;:::o;4513:552::-;4590:6;4598;4606;4655:2;4643:9;4634:7;4630:23;4626:32;4623:2;;;4671:1;4668;4661:12;4623:2;4714:1;4739:53;4784:7;4775:6;4764:9;4760:22;4739:53;:::i;:::-;4729:63;;4685:117;4841:2;4867:53;4912:7;4903:6;4892:9;4888:22;4867:53;:::i;:::-;4857:63;;4812:118;4969:2;4995:53;5040:7;5031:6;5020:9;5016:22;4995:53;:::i;:::-;4985:63;;4940:118;4613:452;;;;;:::o;5071:809::-;5166:6;5174;5182;5190;5239:3;5227:9;5218:7;5214:23;5210:33;5207:2;;;5256:1;5253;5246:12;5207:2;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5554:2;5580:53;5625:7;5616:6;5605:9;5601:22;5580:53;:::i;:::-;5570:63;;5525:118;5710:2;5699:9;5695:18;5682:32;5741:18;5733:6;5730:30;5727:2;;;5773:1;5770;5763:12;5727:2;5801:62;5855:7;5846:6;5835:9;5831:22;5801:62;:::i;:::-;5791:72;;5653:220;5197:683;;;;;;;:::o;5886:401::-;5951:6;5959;6008:2;5996:9;5987:7;5983:23;5979:32;5976:2;;;6024:1;6021;6014:12;5976:2;6067:1;6092:53;6137:7;6128:6;6117:9;6113:22;6092:53;:::i;:::-;6082:63;;6038:117;6194:2;6220:50;6262:7;6253:6;6242:9;6238:22;6220:50;:::i;:::-;6210:60;;6165:115;5966:321;;;;;:::o;6293:407::-;6361:6;6369;6418:2;6406:9;6397:7;6393:23;6389:32;6386:2;;;6434:1;6431;6424:12;6386:2;6477:1;6502:53;6547:7;6538:6;6527:9;6523:22;6502:53;:::i;:::-;6492:63;;6448:117;6604:2;6630:53;6675:7;6666:6;6655:9;6651:22;6630:53;:::i;:::-;6620:63;;6575:118;6376:324;;;;;:::o;6706:425::-;6792:6;6800;6849:2;6837:9;6828:7;6824:23;6820:32;6817:2;;;6865:1;6862;6855:12;6817:2;6936:1;6925:9;6921:17;6908:31;6966:18;6958:6;6955:30;6952:2;;;6998:1;6995;6988:12;6952:2;7034:80;7106:7;7097:6;7086:9;7082:22;7034:80;:::i;:::-;7016:98;;;;6879:245;6807:324;;;;;:::o;7137:405::-;7221:6;7270:2;7258:9;7249:7;7245:23;7241:32;7238:2;;;7286:1;7283;7276:12;7238:2;7357:1;7346:9;7342:17;7329:31;7387:18;7379:6;7376:30;7373:2;;;7419:1;7416;7409:12;7373:2;7447:78;7517:7;7508:6;7497:9;7493:22;7447:78;:::i;:::-;7437:88;;7300:235;7228:314;;;;:::o;7548:256::-;7604:6;7653:2;7641:9;7632:7;7628:23;7624:32;7621:2;;;7669:1;7666;7659:12;7621:2;7712:1;7737:50;7779:7;7770:6;7759:9;7755:22;7737:50;:::i;:::-;7727:60;;7683:114;7611:193;;;;:::o;7810:260::-;7868:6;7917:2;7905:9;7896:7;7892:23;7888:32;7885:2;;;7933:1;7930;7923:12;7885:2;7976:1;8001:52;8045:7;8036:6;8025:9;8021:22;8001:52;:::i;:::-;7991:62;;7947:116;7875:195;;;;:::o;8076:282::-;8145:6;8194:2;8182:9;8173:7;8169:23;8165:32;8162:2;;;8210:1;8207;8200:12;8162:2;8253:1;8278:63;8333:7;8324:6;8313:9;8309:22;8278:63;:::i;:::-;8268:73;;8224:127;8152:206;;;;:::o;8364:395::-;8435:6;8443;8492:2;8480:9;8471:7;8467:23;8463:32;8460:2;;;8508:1;8505;8498:12;8460:2;8579:1;8568:9;8564:17;8551:31;8609:18;8601:6;8598:30;8595:2;;;8641:1;8638;8631:12;8595:2;8677:65;8734:7;8725:6;8714:9;8710:22;8677:65;:::i;:::-;8659:83;;;;8522:230;8450:309;;;;;:::o;8765:262::-;8824:6;8873:2;8861:9;8852:7;8848:23;8844:32;8841:2;;;8889:1;8886;8879:12;8841:2;8932:1;8957:53;9002:7;8993:6;8982:9;8978:22;8957:53;:::i;:::-;8947:63;;8903:117;8831:196;;;;:::o;9033:179::-;9102:10;9123:46;9165:3;9157:6;9123:46;:::i;:::-;9201:4;9196:3;9192:14;9178:28;;9113:99;;;;:::o;9218:118::-;9305:24;9323:5;9305:24;:::i;:::-;9300:3;9293:37;9283:53;;:::o;9372:732::-;9491:3;9520:54;9568:5;9520:54;:::i;:::-;9590:86;9669:6;9664:3;9590:86;:::i;:::-;9583:93;;9700:56;9750:5;9700:56;:::i;:::-;9779:7;9810:1;9795:284;9820:6;9817:1;9814:13;9795:284;;;9896:6;9890:13;9923:63;9982:3;9967:13;9923:63;:::i;:::-;9916:70;;10009:60;10062:6;10009:60;:::i;:::-;9999:70;;9855:224;9842:1;9839;9835:9;9830:14;;9795:284;;;9799:14;10095:3;10088:10;;9496:608;;;;;;;:::o;10110:109::-;10191:21;10206:5;10191:21;:::i;:::-;10186:3;10179:34;10169:50;;:::o;10225:360::-;10311:3;10339:38;10371:5;10339:38;:::i;:::-;10393:70;10456:6;10451:3;10393:70;:::i;:::-;10386:77;;10472:52;10517:6;10512:3;10505:4;10498:5;10494:16;10472:52;:::i;:::-;10549:29;10571:6;10549:29;:::i;:::-;10544:3;10540:39;10533:46;;10315:270;;;;;:::o;10591:364::-;10679:3;10707:39;10740:5;10707:39;:::i;:::-;10762:71;10826:6;10821:3;10762:71;:::i;:::-;10755:78;;10842:52;10887:6;10882:3;10875:4;10868:5;10864:16;10842:52;:::i;:::-;10919:29;10941:6;10919:29;:::i;:::-;10914:3;10910:39;10903:46;;10683:272;;;;;:::o;10961:377::-;11067:3;11095:39;11128:5;11095:39;:::i;:::-;11150:89;11232:6;11227:3;11150:89;:::i;:::-;11143:96;;11248:52;11293:6;11288:3;11281:4;11274:5;11270:16;11248:52;:::i;:::-;11325:6;11320:3;11316:16;11309:23;;11071:267;;;;;:::o;11368:845::-;11471:3;11508:5;11502:12;11537:36;11563:9;11537:36;:::i;:::-;11589:89;11671:6;11666:3;11589:89;:::i;:::-;11582:96;;11709:1;11698:9;11694:17;11725:1;11720:137;;;;11871:1;11866:341;;;;11687:520;;11720:137;11804:4;11800:9;11789;11785:25;11780:3;11773:38;11840:6;11835:3;11831:16;11824:23;;11720:137;;11866:341;11933:38;11965:5;11933:38;:::i;:::-;11993:1;12007:154;12021:6;12018:1;12015:13;12007:154;;;12095:7;12089:14;12085:1;12080:3;12076:11;12069:35;12145:1;12136:7;12132:15;12121:26;;12043:4;12040:1;12036:12;12031:17;;12007:154;;;12190:6;12185:3;12181:16;12174:23;;11873:334;;11687:520;;11475:738;;;;;;:::o;12219:366::-;12361:3;12382:67;12446:2;12441:3;12382:67;:::i;:::-;12375:74;;12458:93;12547:3;12458:93;:::i;:::-;12576:2;12571:3;12567:12;12560:19;;12365:220;;;:::o;12591:366::-;12733:3;12754:67;12818:2;12813:3;12754:67;:::i;:::-;12747:74;;12830:93;12919:3;12830:93;:::i;:::-;12948:2;12943:3;12939:12;12932:19;;12737:220;;;:::o;12963:366::-;13105:3;13126:67;13190:2;13185:3;13126:67;:::i;:::-;13119:74;;13202:93;13291:3;13202:93;:::i;:::-;13320:2;13315:3;13311:12;13304:19;;13109:220;;;:::o;13335:366::-;13477:3;13498:67;13562:2;13557:3;13498:67;:::i;:::-;13491:74;;13574:93;13663:3;13574:93;:::i;:::-;13692:2;13687:3;13683:12;13676:19;;13481:220;;;:::o;13707:366::-;13849:3;13870:67;13934:2;13929:3;13870:67;:::i;:::-;13863:74;;13946:93;14035:3;13946:93;:::i;:::-;14064:2;14059:3;14055:12;14048:19;;13853:220;;;:::o;14079:366::-;14221:3;14242:67;14306:2;14301:3;14242:67;:::i;:::-;14235:74;;14318:93;14407:3;14318:93;:::i;:::-;14436:2;14431:3;14427:12;14420:19;;14225:220;;;:::o;14451:366::-;14593:3;14614:67;14678:2;14673:3;14614:67;:::i;:::-;14607:74;;14690:93;14779:3;14690:93;:::i;:::-;14808:2;14803:3;14799:12;14792:19;;14597:220;;;:::o;14823:366::-;14965:3;14986:67;15050:2;15045:3;14986:67;:::i;:::-;14979:74;;15062:93;15151:3;15062:93;:::i;:::-;15180:2;15175:3;15171:12;15164:19;;14969:220;;;:::o;15195:366::-;15337:3;15358:67;15422:2;15417:3;15358:67;:::i;:::-;15351:74;;15434:93;15523:3;15434:93;:::i;:::-;15552:2;15547:3;15543:12;15536:19;;15341:220;;;:::o;15567:366::-;15709:3;15730:67;15794:2;15789:3;15730:67;:::i;:::-;15723:74;;15806:93;15895:3;15806:93;:::i;:::-;15924:2;15919:3;15915:12;15908:19;;15713:220;;;:::o;15939:366::-;16081:3;16102:67;16166:2;16161:3;16102:67;:::i;:::-;16095:74;;16178:93;16267:3;16178:93;:::i;:::-;16296:2;16291:3;16287:12;16280:19;;16085:220;;;:::o;16311:366::-;16453:3;16474:67;16538:2;16533:3;16474:67;:::i;:::-;16467:74;;16550:93;16639:3;16550:93;:::i;:::-;16668:2;16663:3;16659:12;16652:19;;16457:220;;;:::o;16683:366::-;16825:3;16846:67;16910:2;16905:3;16846:67;:::i;:::-;16839:74;;16922:93;17011:3;16922:93;:::i;:::-;17040:2;17035:3;17031:12;17024:19;;16829:220;;;:::o;17055:366::-;17197:3;17218:67;17282:2;17277:3;17218:67;:::i;:::-;17211:74;;17294:93;17383:3;17294:93;:::i;:::-;17412:2;17407:3;17403:12;17396:19;;17201:220;;;:::o;17427:366::-;17569:3;17590:67;17654:2;17649:3;17590:67;:::i;:::-;17583:74;;17666:93;17755:3;17666:93;:::i;:::-;17784:2;17779:3;17775:12;17768:19;;17573:220;;;:::o;17799:366::-;17941:3;17962:67;18026:2;18021:3;17962:67;:::i;:::-;17955:74;;18038:93;18127:3;18038:93;:::i;:::-;18156:2;18151:3;18147:12;18140:19;;17945:220;;;:::o;18171:366::-;18313:3;18334:67;18398:2;18393:3;18334:67;:::i;:::-;18327:74;;18410:93;18499:3;18410:93;:::i;:::-;18528:2;18523:3;18519:12;18512:19;;18317:220;;;:::o;18543:366::-;18685:3;18706:67;18770:2;18765:3;18706:67;:::i;:::-;18699:74;;18782:93;18871:3;18782:93;:::i;:::-;18900:2;18895:3;18891:12;18884:19;;18689:220;;;:::o;18915:366::-;19057:3;19078:67;19142:2;19137:3;19078:67;:::i;:::-;19071:74;;19154:93;19243:3;19154:93;:::i;:::-;19272:2;19267:3;19263:12;19256:19;;19061:220;;;:::o;19287:400::-;19447:3;19468:84;19550:1;19545:3;19468:84;:::i;:::-;19461:91;;19561:93;19650:3;19561:93;:::i;:::-;19679:1;19674:3;19670:11;19663:18;;19451:236;;;:::o;19693:366::-;19835:3;19856:67;19920:2;19915:3;19856:67;:::i;:::-;19849:74;;19932:93;20021:3;19932:93;:::i;:::-;20050:2;20045:3;20041:12;20034:19;;19839:220;;;:::o;20065:366::-;20207:3;20228:67;20292:2;20287:3;20228:67;:::i;:::-;20221:74;;20304:93;20393:3;20304:93;:::i;:::-;20422:2;20417:3;20413:12;20406:19;;20211:220;;;:::o;20437:398::-;20596:3;20617:83;20698:1;20693:3;20617:83;:::i;:::-;20610:90;;20709:93;20798:3;20709:93;:::i;:::-;20827:1;20822:3;20818:11;20811:18;;20600:235;;;:::o;20841:366::-;20983:3;21004:67;21068:2;21063:3;21004:67;:::i;:::-;20997:74;;21080:93;21169:3;21080:93;:::i;:::-;21198:2;21193:3;21189:12;21182:19;;20987:220;;;:::o;21213:366::-;21355:3;21376:67;21440:2;21435:3;21376:67;:::i;:::-;21369:74;;21452:93;21541:3;21452:93;:::i;:::-;21570:2;21565:3;21561:12;21554:19;;21359:220;;;:::o;21585:366::-;21727:3;21748:67;21812:2;21807:3;21748:67;:::i;:::-;21741:74;;21824:93;21913:3;21824:93;:::i;:::-;21942:2;21937:3;21933:12;21926:19;;21731:220;;;:::o;21957:366::-;22099:3;22120:67;22184:2;22179:3;22120:67;:::i;:::-;22113:74;;22196:93;22285:3;22196:93;:::i;:::-;22314:2;22309:3;22305:12;22298:19;;22103:220;;;:::o;22329:366::-;22471:3;22492:67;22556:2;22551:3;22492:67;:::i;:::-;22485:74;;22568:93;22657:3;22568:93;:::i;:::-;22686:2;22681:3;22677:12;22670:19;;22475:220;;;:::o;22701:366::-;22843:3;22864:67;22928:2;22923:3;22864:67;:::i;:::-;22857:74;;22940:93;23029:3;22940:93;:::i;:::-;23058:2;23053:3;23049:12;23042:19;;22847:220;;;:::o;23073:108::-;23150:24;23168:5;23150:24;:::i;:::-;23145:3;23138:37;23128:53;;:::o;23187:118::-;23274:24;23292:5;23274:24;:::i;:::-;23269:3;23262:37;23252:53;;:::o;23311:435::-;23491:3;23513:95;23604:3;23595:6;23513:95;:::i;:::-;23506:102;;23625:95;23716:3;23707:6;23625:95;:::i;:::-;23618:102;;23737:3;23730:10;;23495:251;;;;;:::o;23752:541::-;23985:3;24007:95;24098:3;24089:6;24007:95;:::i;:::-;24000:102;;24119:148;24263:3;24119:148;:::i;:::-;24112:155;;24284:3;24277:10;;23989:304;;;;:::o;24299:695::-;24577:3;24599:92;24687:3;24678:6;24599:92;:::i;:::-;24592:99;;24708:95;24799:3;24790:6;24708:95;:::i;:::-;24701:102;;24820:148;24964:3;24820:148;:::i;:::-;24813:155;;24985:3;24978:10;;24581:413;;;;;:::o;25000:379::-;25184:3;25206:147;25349:3;25206:147;:::i;:::-;25199:154;;25370:3;25363:10;;25188:191;;;:::o;25385:222::-;25478:4;25516:2;25505:9;25501:18;25493:26;;25529:71;25597:1;25586:9;25582:17;25573:6;25529:71;:::i;:::-;25483:124;;;;:::o;25613:640::-;25808:4;25846:3;25835:9;25831:19;25823:27;;25860:71;25928:1;25917:9;25913:17;25904:6;25860:71;:::i;:::-;25941:72;26009:2;25998:9;25994:18;25985:6;25941:72;:::i;:::-;26023;26091:2;26080:9;26076:18;26067:6;26023:72;:::i;:::-;26142:9;26136:4;26132:20;26127:2;26116:9;26112:18;26105:48;26170:76;26241:4;26232:6;26170:76;:::i;:::-;26162:84;;25813:440;;;;;;;:::o;26259:373::-;26402:4;26440:2;26429:9;26425:18;26417:26;;26489:9;26483:4;26479:20;26475:1;26464:9;26460:17;26453:47;26517:108;26620:4;26611:6;26517:108;:::i;:::-;26509:116;;26407:225;;;;:::o;26638:210::-;26725:4;26763:2;26752:9;26748:18;26740:26;;26776:65;26838:1;26827:9;26823:17;26814:6;26776:65;:::i;:::-;26730:118;;;;:::o;26854:313::-;26967:4;27005:2;26994:9;26990:18;26982:26;;27054:9;27048:4;27044:20;27040:1;27029:9;27025:17;27018:47;27082:78;27155:4;27146:6;27082:78;:::i;:::-;27074:86;;26972:195;;;;:::o;27173:419::-;27339:4;27377:2;27366:9;27362:18;27354:26;;27426:9;27420:4;27416:20;27412:1;27401:9;27397:17;27390:47;27454:131;27580:4;27454:131;:::i;:::-;27446:139;;27344:248;;;:::o;27598:419::-;27764:4;27802:2;27791:9;27787:18;27779:26;;27851:9;27845:4;27841:20;27837:1;27826:9;27822:17;27815:47;27879:131;28005:4;27879:131;:::i;:::-;27871:139;;27769:248;;;:::o;28023:419::-;28189:4;28227:2;28216:9;28212:18;28204:26;;28276:9;28270:4;28266:20;28262:1;28251:9;28247:17;28240:47;28304:131;28430:4;28304:131;:::i;:::-;28296:139;;28194:248;;;:::o;28448:419::-;28614:4;28652:2;28641:9;28637:18;28629:26;;28701:9;28695:4;28691:20;28687:1;28676:9;28672:17;28665:47;28729:131;28855:4;28729:131;:::i;:::-;28721:139;;28619:248;;;:::o;28873:419::-;29039:4;29077:2;29066:9;29062:18;29054:26;;29126:9;29120:4;29116:20;29112:1;29101:9;29097:17;29090:47;29154:131;29280:4;29154:131;:::i;:::-;29146:139;;29044:248;;;:::o;29298:419::-;29464:4;29502:2;29491:9;29487:18;29479:26;;29551:9;29545:4;29541:20;29537:1;29526:9;29522:17;29515:47;29579:131;29705:4;29579:131;:::i;:::-;29571:139;;29469:248;;;:::o;29723:419::-;29889:4;29927:2;29916:9;29912:18;29904:26;;29976:9;29970:4;29966:20;29962:1;29951:9;29947:17;29940:47;30004:131;30130:4;30004:131;:::i;:::-;29996:139;;29894:248;;;:::o;30148:419::-;30314:4;30352:2;30341:9;30337:18;30329:26;;30401:9;30395:4;30391:20;30387:1;30376:9;30372:17;30365:47;30429:131;30555:4;30429:131;:::i;:::-;30421:139;;30319:248;;;:::o;30573:419::-;30739:4;30777:2;30766:9;30762:18;30754:26;;30826:9;30820:4;30816:20;30812:1;30801:9;30797:17;30790:47;30854:131;30980:4;30854:131;:::i;:::-;30846:139;;30744:248;;;:::o;30998:419::-;31164:4;31202:2;31191:9;31187:18;31179:26;;31251:9;31245:4;31241:20;31237:1;31226:9;31222:17;31215:47;31279:131;31405:4;31279:131;:::i;:::-;31271:139;;31169:248;;;:::o;31423:419::-;31589:4;31627:2;31616:9;31612:18;31604:26;;31676:9;31670:4;31666:20;31662:1;31651:9;31647:17;31640:47;31704:131;31830:4;31704:131;:::i;:::-;31696:139;;31594:248;;;:::o;31848:419::-;32014:4;32052:2;32041:9;32037:18;32029:26;;32101:9;32095:4;32091:20;32087:1;32076:9;32072:17;32065:47;32129:131;32255:4;32129:131;:::i;:::-;32121:139;;32019:248;;;:::o;32273:419::-;32439:4;32477:2;32466:9;32462:18;32454:26;;32526:9;32520:4;32516:20;32512:1;32501:9;32497:17;32490:47;32554:131;32680:4;32554:131;:::i;:::-;32546:139;;32444:248;;;:::o;32698:419::-;32864:4;32902:2;32891:9;32887:18;32879:26;;32951:9;32945:4;32941:20;32937:1;32926:9;32922:17;32915:47;32979:131;33105:4;32979:131;:::i;:::-;32971:139;;32869:248;;;:::o;33123:419::-;33289:4;33327:2;33316:9;33312:18;33304:26;;33376:9;33370:4;33366:20;33362:1;33351:9;33347:17;33340:47;33404:131;33530:4;33404:131;:::i;:::-;33396:139;;33294:248;;;:::o;33548:419::-;33714:4;33752:2;33741:9;33737:18;33729:26;;33801:9;33795:4;33791:20;33787:1;33776:9;33772:17;33765:47;33829:131;33955:4;33829:131;:::i;:::-;33821:139;;33719:248;;;:::o;33973:419::-;34139:4;34177:2;34166:9;34162:18;34154:26;;34226:9;34220:4;34216:20;34212:1;34201:9;34197:17;34190:47;34254:131;34380:4;34254:131;:::i;:::-;34246:139;;34144:248;;;:::o;34398:419::-;34564:4;34602:2;34591:9;34587:18;34579:26;;34651:9;34645:4;34641:20;34637:1;34626:9;34622:17;34615:47;34679:131;34805:4;34679:131;:::i;:::-;34671:139;;34569:248;;;:::o;34823:419::-;34989:4;35027:2;35016:9;35012:18;35004:26;;35076:9;35070:4;35066:20;35062:1;35051:9;35047:17;35040:47;35104:131;35230:4;35104:131;:::i;:::-;35096:139;;34994:248;;;:::o;35248:419::-;35414:4;35452:2;35441:9;35437:18;35429:26;;35501:9;35495:4;35491:20;35487:1;35476:9;35472:17;35465:47;35529:131;35655:4;35529:131;:::i;:::-;35521:139;;35419:248;;;:::o;35673:419::-;35839:4;35877:2;35866:9;35862:18;35854:26;;35926:9;35920:4;35916:20;35912:1;35901:9;35897:17;35890:47;35954:131;36080:4;35954:131;:::i;:::-;35946:139;;35844:248;;;:::o;36098:419::-;36264:4;36302:2;36291:9;36287:18;36279:26;;36351:9;36345:4;36341:20;36337:1;36326:9;36322:17;36315:47;36379:131;36505:4;36379:131;:::i;:::-;36371:139;;36269:248;;;:::o;36523:419::-;36689:4;36727:2;36716:9;36712:18;36704:26;;36776:9;36770:4;36766:20;36762:1;36751:9;36747:17;36740:47;36804:131;36930:4;36804:131;:::i;:::-;36796:139;;36694:248;;;:::o;36948:419::-;37114:4;37152:2;37141:9;37137:18;37129:26;;37201:9;37195:4;37191:20;37187:1;37176:9;37172:17;37165:47;37229:131;37355:4;37229:131;:::i;:::-;37221:139;;37119:248;;;:::o;37373:419::-;37539:4;37577:2;37566:9;37562:18;37554:26;;37626:9;37620:4;37616:20;37612:1;37601:9;37597:17;37590:47;37654:131;37780:4;37654:131;:::i;:::-;37646:139;;37544:248;;;:::o;37798:419::-;37964:4;38002:2;37991:9;37987:18;37979:26;;38051:9;38045:4;38041:20;38037:1;38026:9;38022:17;38015:47;38079:131;38205:4;38079:131;:::i;:::-;38071:139;;37969:248;;;:::o;38223:419::-;38389:4;38427:2;38416:9;38412:18;38404:26;;38476:9;38470:4;38466:20;38462:1;38451:9;38447:17;38440:47;38504:131;38630:4;38504:131;:::i;:::-;38496:139;;38394:248;;;:::o;38648:222::-;38741:4;38779:2;38768:9;38764:18;38756:26;;38792:71;38860:1;38849:9;38845:17;38836:6;38792:71;:::i;:::-;38746:124;;;;:::o;38876:129::-;38910:6;38937:20;;:::i;:::-;38927:30;;38966:33;38994:4;38986:6;38966:33;:::i;:::-;38917:88;;;:::o;39011:75::-;39044:6;39077:2;39071:9;39061:19;;39051:35;:::o;39092:311::-;39169:4;39259:18;39251:6;39248:30;39245:2;;;39281:18;;:::i;:::-;39245:2;39331:4;39323:6;39319:17;39311:25;;39391:4;39385;39381:15;39373:23;;39174:229;;;:::o;39409:307::-;39470:4;39560:18;39552:6;39549:30;39546:2;;;39582:18;;:::i;:::-;39546:2;39620:29;39642:6;39620:29;:::i;:::-;39612:37;;39704:4;39698;39694:15;39686:23;;39475:241;;;:::o;39722:132::-;39789:4;39812:3;39804:11;;39842:4;39837:3;39833:14;39825:22;;39794:60;;;:::o;39860:141::-;39909:4;39932:3;39924:11;;39955:3;39952:1;39945:14;39989:4;39986:1;39976:18;39968:26;;39914:87;;;:::o;40007:114::-;40074:6;40108:5;40102:12;40092:22;;40081:40;;;:::o;40127:98::-;40178:6;40212:5;40206:12;40196:22;;40185:40;;;:::o;40231:99::-;40283:6;40317:5;40311:12;40301:22;;40290:40;;;:::o;40336:113::-;40406:4;40438;40433:3;40429:14;40421:22;;40411:38;;;:::o;40455:184::-;40554:11;40588:6;40583:3;40576:19;40628:4;40623:3;40619:14;40604:29;;40566:73;;;;:::o;40645:168::-;40728:11;40762:6;40757:3;40750:19;40802:4;40797:3;40793:14;40778:29;;40740:73;;;;:::o;40819:147::-;40920:11;40957:3;40942:18;;40932:34;;;;:::o;40972:169::-;41056:11;41090:6;41085:3;41078:19;41130:4;41125:3;41121:14;41106:29;;41068:73;;;;:::o;41147:148::-;41249:11;41286:3;41271:18;;41261:34;;;;:::o;41301:305::-;41341:3;41360:20;41378:1;41360:20;:::i;:::-;41355:25;;41394:20;41412:1;41394:20;:::i;:::-;41389:25;;41548:1;41480:66;41476:74;41473:1;41470:81;41467:2;;;41554:18;;:::i;:::-;41467:2;41598:1;41595;41591:9;41584:16;;41345:261;;;;:::o;41612:185::-;41652:1;41669:20;41687:1;41669:20;:::i;:::-;41664:25;;41703:20;41721:1;41703:20;:::i;:::-;41698:25;;41742:1;41732:2;;41747:18;;:::i;:::-;41732:2;41789:1;41786;41782:9;41777:14;;41654:143;;;;:::o;41803:348::-;41843:7;41866:20;41884:1;41866:20;:::i;:::-;41861:25;;41900:20;41918:1;41900:20;:::i;:::-;41895:25;;42088:1;42020:66;42016:74;42013:1;42010:81;42005:1;41998:9;41991:17;41987:105;41984:2;;;42095:18;;:::i;:::-;41984:2;42143:1;42140;42136:9;42125:20;;41851:300;;;;:::o;42157:191::-;42197:4;42217:20;42235:1;42217:20;:::i;:::-;42212:25;;42251:20;42269:1;42251:20;:::i;:::-;42246:25;;42290:1;42287;42284:8;42281:2;;;42295:18;;:::i;:::-;42281:2;42340:1;42337;42333:9;42325:17;;42202:146;;;;:::o;42354:96::-;42391:7;42420:24;42438:5;42420:24;:::i;:::-;42409:35;;42399:51;;;:::o;42456:90::-;42490:7;42533:5;42526:13;42519:21;42508:32;;42498:48;;;:::o;42552:149::-;42588:7;42628:66;42621:5;42617:78;42606:89;;42596:105;;;:::o;42707:126::-;42744:7;42784:42;42777:5;42773:54;42762:65;;42752:81;;;:::o;42839:77::-;42876:7;42905:5;42894:16;;42884:32;;;:::o;42922:154::-;43006:6;43001:3;42996;42983:30;43068:1;43059:6;43054:3;43050:16;43043:27;42973:103;;;:::o;43082:307::-;43150:1;43160:113;43174:6;43171:1;43168:13;43160:113;;;43259:1;43254:3;43250:11;43244:18;43240:1;43235:3;43231:11;43224:39;43196:2;43193:1;43189:10;43184:15;;43160:113;;;43291:6;43288:1;43285:13;43282:2;;;43371:1;43362:6;43357:3;43353:16;43346:27;43282:2;43131:258;;;;:::o;43395:320::-;43439:6;43476:1;43470:4;43466:12;43456:22;;43523:1;43517:4;43513:12;43544:18;43534:2;;43600:4;43592:6;43588:17;43578:27;;43534:2;43662;43654:6;43651:14;43631:18;43628:38;43625:2;;;43681:18;;:::i;:::-;43625:2;43446:269;;;;:::o;43721:281::-;43804:27;43826:4;43804:27;:::i;:::-;43796:6;43792:40;43934:6;43922:10;43919:22;43898:18;43886:10;43883:34;43880:62;43877:2;;;43945:18;;:::i;:::-;43877:2;43985:10;43981:2;43974:22;43764:238;;;:::o;44008:233::-;44047:3;44070:24;44088:5;44070:24;:::i;:::-;44061:33;;44116:66;44109:5;44106:77;44103:2;;;44186:18;;:::i;:::-;44103:2;44233:1;44226:5;44222:13;44215:20;;44051:190;;;:::o;44247:176::-;44279:1;44296:20;44314:1;44296:20;:::i;:::-;44291:25;;44330:20;44348:1;44330:20;:::i;:::-;44325:25;;44369:1;44359:2;;44374:18;;:::i;:::-;44359:2;44415:1;44412;44408:9;44403:14;;44281:142;;;;:::o;44429:180::-;44477:77;44474:1;44467:88;44574:4;44571:1;44564:15;44598:4;44595:1;44588:15;44615:180;44663:77;44660:1;44653:88;44760:4;44757:1;44750:15;44784:4;44781:1;44774:15;44801:180;44849:77;44846:1;44839:88;44946:4;44943:1;44936:15;44970:4;44967:1;44960:15;44987:180;45035:77;45032:1;45025:88;45132:4;45129:1;45122:15;45156:4;45153:1;45146:15;45173:102;45214:6;45265:2;45261:7;45256:2;45249:5;45245:14;45241:28;45231:38;;45221:54;;;:::o;45281:165::-;45421:17;45417:1;45409:6;45405:14;45398:41;45387:59;:::o;45452:172::-;45592:24;45588:1;45580:6;45576:14;45569:48;45558:66;:::o;45630:230::-;45770:34;45766:1;45758:6;45754:14;45747:58;45839:13;45834:2;45826:6;45822:15;45815:38;45736:124;:::o;45866:237::-;46006:34;46002:1;45994:6;45990:14;45983:58;46075:20;46070:2;46062:6;46058:15;46051:45;45972:131;:::o;46109:225::-;46249:34;46245:1;46237:6;46233:14;46226:58;46318:8;46313:2;46305:6;46301:15;46294:33;46215:119;:::o;46340:224::-;46480:34;46476:1;46468:6;46464:14;46457:58;46549:7;46544:2;46536:6;46532:15;46525:32;46446:118;:::o;46570:178::-;46710:30;46706:1;46698:6;46694:14;46687:54;46676:72;:::o;46754:223::-;46894:34;46890:1;46882:6;46878:14;46871:58;46963:6;46958:2;46950:6;46946:15;46939:31;46860:117;:::o;46983:175::-;47123:27;47119:1;47111:6;47107:14;47100:51;47089:69;:::o;47164:170::-;47304:22;47300:1;47292:6;47288:14;47281:46;47270:64;:::o;47340:173::-;47480:25;47476:1;47468:6;47464:14;47457:49;47446:67;:::o;47519:231::-;47659:34;47655:1;47647:6;47643:14;47636:58;47728:14;47723:2;47715:6;47711:15;47704:39;47625:125;:::o;47756:243::-;47896:34;47892:1;47884:6;47880:14;47873:58;47965:26;47960:2;47952:6;47948:15;47941:51;47862:137;:::o;48005:229::-;48145:34;48141:1;48133:6;48129:14;48122:58;48214:12;48209:2;48201:6;48197:15;48190:37;48111:123;:::o;48240:228::-;48380:34;48376:1;48368:6;48364:14;48357:58;48449:11;48444:2;48436:6;48432:15;48425:36;48346:122;:::o;48474:233::-;48614:34;48610:1;48602:6;48598:14;48591:58;48683:16;48678:2;48670:6;48666:15;48659:41;48580:127;:::o;48713:182::-;48853:34;48849:1;48841:6;48837:14;48830:58;48819:76;:::o;48901:162::-;49041:14;49037:1;49029:6;49025:14;49018:38;49007:56;:::o;49069:231::-;49209:34;49205:1;49197:6;49193:14;49186:58;49278:14;49273:2;49265:6;49261:15;49254:39;49175:125;:::o;49306:155::-;49446:7;49442:1;49434:6;49430:14;49423:31;49412:49;:::o;49467:182::-;49607:34;49603:1;49595:6;49591:14;49584:58;49573:76;:::o;49655:220::-;49795:34;49791:1;49783:6;49779:14;49772:58;49864:3;49859:2;49851:6;49847:15;49840:28;49761:114;:::o;49881:::-;49987:8;:::o;50001:236::-;50141:34;50137:1;50129:6;50125:14;50118:58;50210:19;50205:2;50197:6;50193:15;50186:44;50107:130;:::o;50243:231::-;50383:34;50379:1;50371:6;50367:14;50360:58;50452:14;50447:2;50439:6;50435:15;50428:39;50349:125;:::o;50480:220::-;50620:34;50616:1;50608:6;50604:14;50597:58;50689:3;50684:2;50676:6;50672:15;50665:28;50586:114;:::o;50706:171::-;50846:23;50842:1;50834:6;50830:14;50823:47;50812:65;:::o;50883:173::-;51023:25;51019:1;51011:6;51007:14;51000:49;50989:67;:::o;51062:167::-;51202:19;51198:1;51190:6;51186:14;51179:43;51168:61;:::o;51235:122::-;51308:24;51326:5;51308:24;:::i;:::-;51301:5;51298:35;51288:2;;51347:1;51344;51337:12;51288:2;51278:79;:::o;51363:116::-;51433:21;51448:5;51433:21;:::i;:::-;51426:5;51423:32;51413:2;;51469:1;51466;51459:12;51413:2;51403:76;:::o;51485:120::-;51557:23;51574:5;51557:23;:::i;:::-;51550:5;51547:34;51537:2;;51595:1;51592;51585:12;51537:2;51527:78;:::o;51611:122::-;51684:24;51702:5;51684:24;:::i;:::-;51677:5;51674:35;51664:2;;51723:1;51720;51713:12;51664:2;51654:79;:::o
Swarm Source
ipfs://acf4cc054aeef486132e1d9ed6d6f6b4e95994161ff78640e9c3d36ed6362b66
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.