Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
2,000 CD
Holders
1,545
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 CDLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ChibiDinos
Compiler Version
v0.8.17+commit.8df45f5f
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-09-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts (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); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * 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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: ERC721A.sol // Creator: Chiru Labs pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata and Enumerable extension. Built to optimize for lower gas during batch mints. * * Assumes serials are sequentially minted starting at 0 (e.g. 0, 1, 2, 3..). * * Does not support burning tokens to address(0). * * Assumes that an owner cannot have more than the 2**128 - 1 (max value of uint128) of supply */ contract ERC721A is Context, ERC165, IERC721, IERC721Metadata, IERC721Enumerable { using Address for address; using Strings for uint256; struct TokenOwnership { address addr; uint64 startTimestamp; } struct AddressData { uint128 balance; uint128 numberMinted; } uint256 internal currentIndex; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to ownership details // An empty struct value does not necessarily mean the token is unowned. See ownershipOf implementation for details. mapping(uint256 => TokenOwnership) internal _ownerships; // Mapping owner address to address data mapping(address => AddressData) private _addressData; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view override returns (uint256) { return currentIndex; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view override returns (uint256) { require(index < totalSupply(), 'ERC721A: global index out of bounds'); return index; } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. * This read function is O(totalSupply). If calling from a separate contract, be sure to test gas first. * It may also degrade with extremely large collection sizes (e.g >> 10000), test for your use case. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view override returns (uint256) { require(index < balanceOf(owner), 'ERC721A: owner index out of bounds'); uint256 numMintedSoFar = totalSupply(); uint256 tokenIdsIdx; address currOwnershipAddr; // Counter overflow is impossible as the loop breaks when uint256 i is equal to another uint256 numMintedSoFar. unchecked { for (uint256 i; i < numMintedSoFar; i++) { TokenOwnership memory ownership = _ownerships[i]; if (ownership.addr != address(0)) { currOwnershipAddr = ownership.addr; } if (currOwnershipAddr == owner) { if (tokenIdsIdx == index) { return i; } tokenIdsIdx++; } } } revert('ERC721A: unable to get token of owner by index'); } /** * @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 || interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view override returns (uint256) { require(owner != address(0), 'ERC721A: balance query for the zero address'); return uint256(_addressData[owner].balance); } function _numberMinted(address owner) internal view returns (uint256) { require(owner != address(0), 'ERC721A: number minted query for the zero address'); return uint256(_addressData[owner].numberMinted); } /** * Gas spent here starts off proportional to the maximum mint batch size. * It gradually moves to O(1) as tokens get transferred around in the collection over time. */ function ownershipOf(uint256 tokenId) internal view returns (TokenOwnership memory) { require(_exists(tokenId), 'ERC721A: owner query for nonexistent token'); unchecked { for (uint256 curr = tokenId; curr >= 0; curr--) { TokenOwnership memory ownership = _ownerships[curr]; if (ownership.addr != address(0)) { return ownership; } } } revert('ERC721A: unable to determine the owner of token'); } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view override returns (address) { return ownershipOf(tokenId).addr; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), 'ERC721Metadata: URI query for nonexistent token'); string memory baseURI = _baseURI(); return bytes(baseURI).length != 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ''; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ''; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public override { address owner = ERC721A.ownerOf(tokenId); require(to != owner, 'ERC721A: approval to current owner'); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), 'ERC721A: approve caller is not owner nor approved for all' ); _approve(to, tokenId, owner); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view override returns (address) { require(_exists(tokenId), 'ERC721A: approved query for nonexistent token'); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public override { require(operator != _msgSender(), 'ERC721A: approve to caller'); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public override { _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), 'ERC721A: 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`), */ function _exists(uint256 tokenId) internal view returns (bool) { return tokenId < currentIndex; } function _safeMint(address to, uint256 quantity) internal { _safeMint(to, quantity, ''); } /** * @dev Safely mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called for each safe transfer. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _safeMint( address to, uint256 quantity, bytes memory _data ) internal { _mint(to, quantity, _data, true); } /** * @dev Mints `quantity` tokens and transfers them to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `quantity` must be greater than 0. * * Emits a {Transfer} event. */ function _mint( address to, uint256 quantity, bytes memory _data, bool safe ) internal { uint256 startTokenId = currentIndex; require(to != address(0), 'ERC721A: mint to the zero address'); require(quantity != 0, 'ERC721A: quantity must be greater than 0'); _beforeTokenTransfers(address(0), to, startTokenId, quantity); // Overflows are incredibly unrealistic. // balance or numberMinted overflow if current value of either + quantity > 3.4e38 (2**128) - 1 // updatedIndex overflows if currentIndex + quantity > 1.56e77 (2**256) - 1 unchecked { _addressData[to].balance += uint128(quantity); _addressData[to].numberMinted += uint128(quantity); _ownerships[startTokenId].addr = to; _ownerships[startTokenId].startTimestamp = uint64(block.timestamp); uint256 updatedIndex = startTokenId; for (uint256 i; i < quantity; i++) { emit Transfer(address(0), to, updatedIndex); if (safe) { require( _checkOnERC721Received(address(0), to, updatedIndex, _data), 'ERC721A: transfer to non ERC721Receiver implementer' ); } updatedIndex++; } currentIndex = updatedIndex; } _afterTokenTransfers(address(0), to, startTokenId, quantity); } /** * @dev Transfers `tokenId` from `from` to `to`. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) private { TokenOwnership memory prevOwnership = ownershipOf(tokenId); bool isApprovedOrOwner = (_msgSender() == prevOwnership.addr || getApproved(tokenId) == _msgSender() || isApprovedForAll(prevOwnership.addr, _msgSender())); require(isApprovedOrOwner, 'ERC721A: transfer caller is not owner nor approved'); require(prevOwnership.addr == from, 'ERC721A: transfer from incorrect owner'); require(to != address(0), 'ERC721A: transfer to the zero address'); _beforeTokenTransfers(from, to, tokenId, 1); // Clear approvals from the previous owner _approve(address(0), tokenId, prevOwnership.addr); // Underflow of the sender's balance is impossible because we check for // ownership above and the recipient's balance can't realistically overflow. // Counter overflow is incredibly unrealistic as tokenId would have to be 2**256. unchecked { _addressData[from].balance -= 1; _addressData[to].balance += 1; _ownerships[tokenId].addr = to; _ownerships[tokenId].startTimestamp = uint64(block.timestamp); // If the ownership slot of tokenId+1 is not explicitly set, that means the transfer initiator owns it. // Set the slot of tokenId+1 explicitly in storage to maintain correctness for ownerOf(tokenId+1) calls. uint256 nextTokenId = tokenId + 1; if (_ownerships[nextTokenId].addr == address(0)) { if (_exists(nextTokenId)) { _ownerships[nextTokenId].addr = prevOwnership.addr; _ownerships[nextTokenId].startTimestamp = prevOwnership.startTimestamp; } } } emit Transfer(from, to, tokenId); _afterTokenTransfers(from, to, tokenId, 1); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve( address to, uint256 tokenId, address owner ) private { _tokenApprovals[tokenId] = to; emit Approval(owner, to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target 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(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert('ERC721A: transfer to non ERC721Receiver implementer'); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before a set of serially-ordered token ids are about to be transferred. This includes minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. */ function _beforeTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} /** * @dev Hook that is called after a set of serially-ordered token ids have been transferred. This includes * minting. * * startTokenId - the first token id to be transferred * quantity - the amount to be transferred * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. */ function _afterTokenTransfers( address from, address to, uint256 startTokenId, uint256 quantity ) internal virtual {} } // File: goblintownai-contract.sol pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { require(!paused(), "Pausable: paused"); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { require(paused(), "Pausable: not paused"); _; } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _setOwner(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require( newOwner != address(0), "Ownable: new owner is the zero address" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and make it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } //newerc.sol pragma solidity ^0.8.0; contract ChibiDinos is ERC721A, Ownable, Pausable, ReentrancyGuard { using Strings for uint256; string public baseURI; uint256 public cost = 0.001 ether; uint256 public maxSupply = 2000; uint256 public maxFree = 2000; uint256 public maxperAddressFreeLimit = 1; uint256 public maxperAddressPublicMint = 20; bool public saleIsActive = false; mapping(address => uint256) public addressFreeMintedBalance; constructor() ERC721A("ChibiDinos", "CD") { setBaseURI("ipfs://QmVUiLumZvKCwF6un5TF3g2Bm268xxaurbTn3pHnW7SZqc/"); } function _baseURI() internal view virtual override returns (string memory) { return baseURI; } function freeMint(uint256 _mintAmount) public payable nonReentrant{ uint256 s = totalSupply(); uint256 addressFreeMintedCount = addressFreeMintedBalance[msg.sender]; require(saleIsActive, "Sale not active"); require(addressFreeMintedCount + _mintAmount <= maxperAddressFreeLimit, "max free NFT per wallet exceeded"); require(_mintAmount > 0, "Cant mint 0" ); require(s + _mintAmount <= maxFree, "Cant go over supply" ); for (uint256 i = 0; i < _mintAmount; ++i) { addressFreeMintedBalance[msg.sender]++; } _safeMint(msg.sender, _mintAmount); delete s; delete addressFreeMintedCount; } function mint(uint256 _mintAmount) public payable nonReentrant { uint256 s = totalSupply(); require(saleIsActive, "Sale not active"); require(_mintAmount > 0, "Cant mint 0"); require(_mintAmount <= maxperAddressPublicMint, "Cant mint more then max allocation" ); require(s + _mintAmount <= maxSupply, "Cant go over supply"); require(msg.value >= cost * _mintAmount); _safeMint(msg.sender, _mintAmount); delete s; } function devMint(uint256 _mintAmount) public payable nonReentrant onlyOwner { uint256 s = totalSupply(); require(_mintAmount > 0, "Cant mint 0"); require(s + _mintAmount <= maxSupply, "Cant go over supply"); _safeMint(msg.sender, _mintAmount); delete s; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: Nonexistent token"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, tokenId.toString())) : ""; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function setCost(uint256 _newCost) public onlyOwner { cost = _newCost; } function setmaxSupply(uint256 _newMaxSupply) public onlyOwner { require(_newMaxSupply <= maxSupply, "Cannot increase max supply"); maxSupply = _newMaxSupply; } function setmaxFreeSupply(uint256 _newMaxFreeSupply) public onlyOwner { maxFree = _newMaxFreeSupply; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setMaxperAddressPublicMint(uint256 _amount) public onlyOwner { maxperAddressPublicMint = _amount; } function setMaxperAddressFreeMint(uint256 _amount) public onlyOwner{ maxperAddressFreeLimit = _amount; } function withdraw() public payable onlyOwner { (bool success, ) = payable(msg.sender).call{ value: address(this).balance }(""); require(success); } }
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":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressFreeMintedBalance","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"devMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"freeMint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxFree","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressFreeLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxperAddressPublicMint","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"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":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","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":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressFreeMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setMaxperAddressPublicMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxFreeSupply","type":"uint256"}],"name":"setmaxFreeSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newMaxSupply","type":"uint256"}],"name":"setmaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
608060405266038d7ea4c68000600a556107d0600b556107d0600c556001600d556014600e556000600f60006101000a81548160ff0219169083151502179055503480156200004d57600080fd5b506040518060400160405280600a81526020017f436869626944696e6f73000000000000000000000000000000000000000000008152506040518060400160405280600281526020017f43440000000000000000000000000000000000000000000000000000000000008152508160019081620000cb919062000569565b508060029081620000dd919062000569565b50505062000100620000f46200015360201b60201c565b6200015b60201b60201c565b6000600760146101000a81548160ff02191690831515021790555060016008819055506200014d604051806060016040528060368152602001620052b4603691396200022160201b60201c565b620006d3565b600033905090565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002316200015360201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1662000257620002c560201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002a790620006b1565b60405180910390fd5b8060099081620002c1919062000569565b5050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200037157607f821691505b60208210810362000387576200038662000329565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620003f17fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82620003b2565b620003fd8683620003b2565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b60006200044a620004446200043e8462000415565b6200041f565b62000415565b9050919050565b6000819050919050565b620004668362000429565b6200047e620004758262000451565b848454620003bf565b825550505050565b600090565b6200049562000486565b620004a28184846200045b565b505050565b5b81811015620004ca57620004be6000826200048b565b600181019050620004a8565b5050565b601f8211156200051957620004e3816200038d565b620004ee84620003a2565b81016020851015620004fe578190505b620005166200050d85620003a2565b830182620004a7565b50505b505050565b600082821c905092915050565b60006200053e600019846008026200051e565b1980831691505092915050565b60006200055983836200052b565b9150826002028217905092915050565b6200057482620002ef565b67ffffffffffffffff81111562000590576200058f620002fa565b5b6200059c825462000358565b620005a9828285620004ce565b600060209050601f831160018114620005e15760008415620005cc578287015190505b620005d885826200054b565b86555062000648565b601f198416620005f1866200038d565b60005b828110156200061b57848901518255600182019150602085019450602081019050620005f4565b868310156200063b578489015162000637601f8916826200052b565b8355505b6001600288020188555050505b505050505050565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006200069960208362000650565b9150620006a68262000661565b602082019050919050565b60006020820190508181036000830152620006cc816200068a565b9050919050565b614bd180620006e36000396000f3fe6080604052600436106102305760003560e01c806356569a1d1161012e578063a0712d68116100ab578063d5abeb011161006f578063d5abeb01146107f1578063dc4e66b51461081c578063e985e9c514610845578063eb8d244414610882578063f2fde38b146108ad57610230565b8063a0712d681461071d578063a22cb46514610739578063b88d4fde14610762578063bde12d731461078b578063c87b56dd146107b457610230565b8063715018a6116100f2578063715018a6146106575780637c6b172d1461066e5780637c928fe9146106ab5780638da5cb5b146106c757806395d89b41146106f257610230565b806356569a1d1461055c5780635c975abb146105875780636352211e146105b25780636c0360eb146105ef57806370a082311461061a57610230565b80632f745c59116101bc57806342842e0e1161018057806342842e0e1461047957806344a0d68a146104a2578063485a68a3146104cb5780634f6ccce7146104f657806355f804b31461053357610230565b80632f745c59146103d457806334918dfd1461041157806334c8fd7514610428578063375a069a146104535780633ccfd60b1461046f57610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd14610357578063228025e81461038257806323b872dd146103ab57610230565b806301ffc9a714610235578063022d67dd1461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613177565b6108d6565b60405161026991906131bf565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613210565b610a20565b005b3480156102a757600080fd5b506102b0610aa6565b6040516102bd91906132cd565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613210565b610b38565b6040516102fa9190613330565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613377565b610bbd565b005b34801561033857600080fd5b50610341610cd5565b60405161034e91906133c6565b60405180910390f35b34801561036357600080fd5b5061036c610cdb565b60405161037991906133c6565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613210565b610ce4565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906133e1565b610daf565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613377565b610dbf565b60405161040891906133c6565b60405180910390f35b34801561041d57600080fd5b50610426610faf565b005b34801561043457600080fd5b5061043d611057565b60405161044a91906133c6565b60405180910390f35b61046d60048036038101906104689190613210565b61105d565b005b6104776111df565b005b34801561048557600080fd5b506104a0600480360381019061049b91906133e1565b6112d4565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190613210565b6112f4565b005b3480156104d757600080fd5b506104e061137a565b6040516104ed91906133c6565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613210565b611380565b60405161052a91906133c6565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190613569565b6113d3565b005b34801561056857600080fd5b50610571611462565b60405161057e91906133c6565b60405180910390f35b34801561059357600080fd5b5061059c611468565b6040516105a991906131bf565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613210565b61147f565b6040516105e69190613330565b60405180910390f35b3480156105fb57600080fd5b50610604611495565b60405161061191906132cd565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c91906135b2565b611523565b60405161064e91906133c6565b60405180910390f35b34801561066357600080fd5b5061066c61160b565b005b34801561067a57600080fd5b50610695600480360381019061069091906135b2565b611693565b6040516106a291906133c6565b60405180910390f35b6106c560048036038101906106c09190613210565b6116ab565b005b3480156106d357600080fd5b506106dc61190b565b6040516106e99190613330565b60405180910390f35b3480156106fe57600080fd5b50610707611935565b60405161071491906132cd565b60405180910390f35b61073760048036038101906107329190613210565b6119c7565b005b34801561074557600080fd5b50610760600480360381019061075b919061360b565b611b7b565b005b34801561076e57600080fd5b50610789600480360381019061078491906136ec565b611cfb565b005b34801561079757600080fd5b506107b260048036038101906107ad9190613210565b611d57565b005b3480156107c057600080fd5b506107db60048036038101906107d69190613210565b611ddd565b6040516107e891906132cd565b60405180910390f35b3480156107fd57600080fd5b50610806611e84565b60405161081391906133c6565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613210565b611e8a565b005b34801561085157600080fd5b5061086c6004803603810190610867919061376f565b611f10565b60405161087991906131bf565b60405180910390f35b34801561088e57600080fd5b50610897611fa4565b6040516108a491906131bf565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906135b2565b611fb7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a195750610a18826120ae565b5b9050919050565b610a28612118565b73ffffffffffffffffffffffffffffffffffffffff16610a4661190b565b73ffffffffffffffffffffffffffffffffffffffff1614610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a93906137fb565b60405180910390fd5b80600e8190555050565b606060018054610ab59061384a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae19061384a565b8015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050905090565b6000610b4382612120565b610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906138ed565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc88261147f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f9061397f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c57612118565b73ffffffffffffffffffffffffffffffffffffffff161480610c865750610c8581610c80612118565b611f10565b5b610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90613a11565b60405180910390fd5b610cd083838361212d565b505050565b600a5481565b60008054905090565b610cec612118565b73ffffffffffffffffffffffffffffffffffffffff16610d0a61190b565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906137fb565b60405180910390fd5b600b54811115610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613a7d565b60405180910390fd5b80600b8190555050565b610dba8383836121df565b505050565b6000610dca83611523565b8210610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0290613b0f565b60405180910390fd5b6000610e15610cdb565b905060008060005b83811015610f6d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0f57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5f57868403610f56578195505050505050610fa9565b83806001019450505b508080600101915050610e1d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613ba1565b60405180910390fd5b92915050565b610fb7612118565b73ffffffffffffffffffffffffffffffffffffffff16610fd561190b565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906137fb565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600e5481565b6002600854036110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613c0d565b60405180910390fd5b60026008819055506110b2612118565b73ffffffffffffffffffffffffffffffffffffffff166110d061190b565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906137fb565b60405180910390fd5b6000611130610cdb565b905060008211611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90613c79565b60405180910390fd5b600b5482826111849190613cc8565b11156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90613d48565b60405180910390fd5b6111cf338361271d565b6000905050600160088190555050565b6111e7612118565b73ffffffffffffffffffffffffffffffffffffffff1661120561190b565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906137fb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161128190613d99565b60006040518083038185875af1925050503d80600081146112be576040519150601f19603f3d011682016040523d82523d6000602084013e6112c3565b606091505b50509050806112d157600080fd5b50565b6112ef83838360405180602001604052806000815250611cfb565b505050565b6112fc612118565b73ffffffffffffffffffffffffffffffffffffffff1661131a61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611367906137fb565b60405180910390fd5b80600a8190555050565b600c5481565b600061138a610cdb565b82106113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290613e20565b60405180910390fd5b819050919050565b6113db612118565b73ffffffffffffffffffffffffffffffffffffffff166113f961190b565b73ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446906137fb565b60405180910390fd5b806009908161145e9190613fec565b5050565b600d5481565b6000600760149054906101000a900460ff16905090565b600061148a8261273b565b600001519050919050565b600980546114a29061384a565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce9061384a565b801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90614130565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611613612118565b73ffffffffffffffffffffffffffffffffffffffff1661163161190b565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e906137fb565b60405180910390fd5b61169160006128d5565b565b60106020528060005260406000206000915090505481565b6002600854036116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613c0d565b60405180910390fd5b60026008819055506000611702610cdb565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e9061419c565b60405180910390fd5b600d5483826117a69190613cc8565b11156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614208565b60405180910390fd5b6000831161182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613c79565b60405180910390fd5b600c5483836118399190613cc8565b111561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613d48565b60405180910390fd5b60005b838110156118eb57601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118d590614228565b9190505550806118e490614228565b905061187d565b506118f6338461271d565b60009150600090505050600160088190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546119449061384a565b80601f01602080910402602001604051908101604052809291908181526020018280546119709061384a565b80156119bd5780601f10611992576101008083540402835291602001916119bd565b820191906000526020600020905b8154815290600101906020018083116119a057829003601f168201915b5050505050905090565b600260085403611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390613c0d565b60405180910390fd5b60026008819055506000611a1e610cdb565b9050600f60009054906101000a900460ff16611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a669061419c565b60405180910390fd5b60008211611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990613c79565b60405180910390fd5b600e54821115611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906142e2565b60405180910390fd5b600b548282611b069190613cc8565b1115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90613d48565b60405180910390fd5b81600a54611b559190614302565b341015611b6157600080fd5b611b6b338361271d565b6000905050600160088190555050565b611b83612118565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614390565b60405180910390fd5b8060066000611bfd612118565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611caa612118565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cef91906131bf565b60405180910390a35050565b611d068484846121df565b611d128484848461299b565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614422565b60405180910390fd5b50505050565b611d5f612118565b73ffffffffffffffffffffffffffffffffffffffff16611d7d61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca906137fb565b60405180910390fd5b80600c8190555050565b6060611de882612120565b611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906144b4565b60405180910390fd5b6000611e31612b22565b90506000815111611e515760405180602001604052806000815250611e7c565b80611e5b84612bb4565b604051602001611e6c929190614510565b6040516020818303038152906040525b915050919050565b600b5481565b611e92612118565b73ffffffffffffffffffffffffffffffffffffffff16611eb061190b565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd906137fb565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b611fbf612118565b73ffffffffffffffffffffffffffffffffffffffff16611fdd61190b565b73ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a906137fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906145a6565b60405180910390fd5b6120ab816128d5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121ea8261273b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612211612118565b73ffffffffffffffffffffffffffffffffffffffff16148061226d5750612236612118565b73ffffffffffffffffffffffffffffffffffffffff1661225584610b38565b73ffffffffffffffffffffffffffffffffffffffff16145b8061228957506122888260000151612283612118565b611f10565b5b9050806122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614638565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906146ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a39061475c565b60405180910390fd5b6123b98585856001612d14565b6123c9600084846000015161212d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126ad5761260c81612120565b156126ac5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127168585856001612d1a565b5050505050565b612737828260405180602001604052806000815250612d20565b5050565b6127436130d1565b61274c82612120565b61278b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612782906147ee565b60405180910390fd5b60008290505b60008110612894576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128855780925050506128d0565b50808060019003915050612791565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c790614880565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129bc8473ffffffffffffffffffffffffffffffffffffffff16612d32565b15612b15578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e5612118565b8786866040518563ffffffff1660e01b8152600401612a0794939291906148f5565b6020604051808303816000875af1925050508015612a4357506040513d601f19601f82011682018060405250810190612a409190614956565b60015b612ac5573d8060008114612a73576040519150601f19603f3d011682016040523d82523d6000602084013e612a78565b606091505b506000815103612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614422565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b1a565b600190505b949350505050565b606060098054612b319061384a565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5d9061384a565b8015612baa5780601f10612b7f57610100808354040283529160200191612baa565b820191906000526020600020905b815481529060010190602001808311612b8d57829003601f168201915b5050505050905090565b606060008203612bfb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d0f565b600082905060005b60008214612c2d578080612c1690614228565b915050600a82612c2691906149b2565b9150612c03565b60008167ffffffffffffffff811115612c4957612c4861343e565b5b6040519080825280601f01601f191660200182016040528015612c7b5781602001600182028036833780820191505090505b5090505b60008514612d0857600182612c9491906149e3565b9150600a85612ca39190614a17565b6030612caf9190613cc8565b60f81b818381518110612cc557612cc4614a48565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d0191906149b2565b9450612c7f565b8093505050505b919050565b50505050565b50505050565b612d2d8383836001612d55565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614ae9565b60405180910390fd5b60008403612e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0490614b7b565b60405180910390fd5b612e1a6000868387612d14565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156130b457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561309f5761305f600088848861299b565b61309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614422565b60405180910390fd5b5b81806001019250508080600101915050612fe8565b5080600081905550506130ca6000868387612d1a565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131548161311f565b811461315f57600080fd5b50565b6000813590506131718161314b565b92915050565b60006020828403121561318d5761318c613115565b5b600061319b84828501613162565b91505092915050565b60008115159050919050565b6131b9816131a4565b82525050565b60006020820190506131d460008301846131b0565b92915050565b6000819050919050565b6131ed816131da565b81146131f857600080fd5b50565b60008135905061320a816131e4565b92915050565b60006020828403121561322657613225613115565b5b6000613234848285016131fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561327757808201518184015260208101905061325c565b60008484015250505050565b6000601f19601f8301169050919050565b600061329f8261323d565b6132a98185613248565b93506132b9818560208601613259565b6132c281613283565b840191505092915050565b600060208201905081810360008301526132e78184613294565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331a826132ef565b9050919050565b61332a8161330f565b82525050565b60006020820190506133456000830184613321565b92915050565b6133548161330f565b811461335f57600080fd5b50565b6000813590506133718161334b565b92915050565b6000806040838503121561338e5761338d613115565b5b600061339c85828601613362565b92505060206133ad858286016131fb565b9150509250929050565b6133c0816131da565b82525050565b60006020820190506133db60008301846133b7565b92915050565b6000806000606084860312156133fa576133f9613115565b5b600061340886828701613362565b935050602061341986828701613362565b925050604061342a868287016131fb565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347682613283565b810181811067ffffffffffffffff821117156134955761349461343e565b5b80604052505050565b60006134a861310b565b90506134b4828261346d565b919050565b600067ffffffffffffffff8211156134d4576134d361343e565b5b6134dd82613283565b9050602081019050919050565b82818337600083830152505050565b600061350c613507846134b9565b61349e565b90508281526020810184848401111561352857613527613439565b5b6135338482856134ea565b509392505050565b600082601f8301126135505761354f613434565b5b81356135608482602086016134f9565b91505092915050565b60006020828403121561357f5761357e613115565b5b600082013567ffffffffffffffff81111561359d5761359c61311a565b5b6135a98482850161353b565b91505092915050565b6000602082840312156135c8576135c7613115565b5b60006135d684828501613362565b91505092915050565b6135e8816131a4565b81146135f357600080fd5b50565b600081359050613605816135df565b92915050565b6000806040838503121561362257613621613115565b5b600061363085828601613362565b9250506020613641858286016135f6565b9150509250929050565b600067ffffffffffffffff8211156136665761366561343e565b5b61366f82613283565b9050602081019050919050565b600061368f61368a8461364b565b61349e565b9050828152602081018484840111156136ab576136aa613439565b5b6136b68482856134ea565b509392505050565b600082601f8301126136d3576136d2613434565b5b81356136e384826020860161367c565b91505092915050565b6000806000806080858703121561370657613705613115565b5b600061371487828801613362565b945050602061372587828801613362565b9350506040613736878288016131fb565b925050606085013567ffffffffffffffff8111156137575761375661311a565b5b613763878288016136be565b91505092959194509250565b6000806040838503121561378657613785613115565b5b600061379485828601613362565b92505060206137a585828601613362565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137e5602083613248565b91506137f0826137af565b602082019050919050565b60006020820190508181036000830152613814816137d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061386257607f821691505b6020821081036138755761387461381b565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006138d7602d83613248565b91506138e28261387b565b604082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613969602283613248565b91506139748261390d565b604082019050919050565b600060208201905081810360008301526139988161395c565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006139fb603983613248565b9150613a068261399f565b604082019050919050565b60006020820190508181036000830152613a2a816139ee565b9050919050565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b6000613a67601a83613248565b9150613a7282613a31565b602082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613af9602283613248565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613b8b602e83613248565b9150613b9682613b2f565b604082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613bf7601f83613248565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b6000613c63600b83613248565b9150613c6e82613c2d565b602082019050919050565b60006020820190508181036000830152613c9281613c56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cd3826131da565b9150613cde836131da565b9250828201905080821115613cf657613cf5613c99565b5b92915050565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b6000613d32601383613248565b9150613d3d82613cfc565b602082019050919050565b60006020820190508181036000830152613d6181613d25565b9050919050565b600081905092915050565b50565b6000613d83600083613d68565b9150613d8e82613d73565b600082019050919050565b6000613da482613d76565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0a602383613248565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ea27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e65565b613eac8683613e65565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ee9613ee4613edf846131da565b613ec4565b6131da565b9050919050565b6000819050919050565b613f0383613ece565b613f17613f0f82613ef0565b848454613e72565b825550505050565b600090565b613f2c613f1f565b613f37818484613efa565b505050565b5b81811015613f5b57613f50600082613f24565b600181019050613f3d565b5050565b601f821115613fa057613f7181613e40565b613f7a84613e55565b81016020851015613f89578190505b613f9d613f9585613e55565b830182613f3c565b50505b505050565b600082821c905092915050565b6000613fc360001984600802613fa5565b1980831691505092915050565b6000613fdc8383613fb2565b9150826002028217905092915050565b613ff58261323d565b67ffffffffffffffff81111561400e5761400d61343e565b5b614018825461384a565b614023828285613f5f565b600060209050601f8311600181146140565760008415614044578287015190505b61404e8582613fd0565b8655506140b6565b601f19841661406486613e40565b60005b8281101561408c57848901518255600182019150602085019450602081019050614067565b868310156140a957848901516140a5601f891682613fb2565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061411a602b83613248565b9150614125826140be565b604082019050919050565b600060208201905081810360008301526141498161410d565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000614186600f83613248565b915061419182614150565b602082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f6d61782066726565204e4654207065722077616c6c6574206578636565646564600082015250565b60006141f2602083613248565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b6000614233826131da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426557614264613c99565b5b600182019050919050565b7f43616e74206d696e74206d6f7265207468656e206d617820616c6c6f6361746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602283613248565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b600061430d826131da565b9150614318836131da565b9250828202614326816131da565b9150828204841483151761433d5761433c613c99565b5b5092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061437a601a83613248565b915061438582614344565b602082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061440c603383613248565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061449e602183613248565b91506144a982614442565b604082019050919050565b600060208201905081810360008301526144cd81614491565b9050919050565b600081905092915050565b60006144ea8261323d565b6144f481856144d4565b9350614504818560208601613259565b80840191505092915050565b600061451c82856144df565b915061452882846144df565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614590602683613248565b915061459b82614534565b604082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614622603283613248565b915061462d826145c6565b604082019050919050565b6000602082019050818103600083015261465181614615565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006146b4602683613248565b91506146bf82614658565b604082019050919050565b600060208201905081810360008301526146e3816146a7565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614746602583613248565b9150614751826146ea565b604082019050919050565b6000602082019050818103600083015261477581614739565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006147d8602a83613248565b91506147e38261477c565b604082019050919050565b60006020820190508181036000830152614807816147cb565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061486a602f83613248565b91506148758261480e565b604082019050919050565b600060208201905081810360008301526148998161485d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148c7826148a0565b6148d181856148ab565b93506148e1818560208601613259565b6148ea81613283565b840191505092915050565b600060808201905061490a6000830187613321565b6149176020830186613321565b61492460408301856133b7565b818103606083015261493681846148bc565b905095945050505050565b6000815190506149508161314b565b92915050565b60006020828403121561496c5761496b613115565b5b600061497a84828501614941565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149bd826131da565b91506149c8836131da565b9250826149d8576149d7614983565b5b828204905092915050565b60006149ee826131da565b91506149f9836131da565b9250828203905081811115614a1157614a10613c99565b5b92915050565b6000614a22826131da565b9150614a2d836131da565b925082614a3d57614a3c614983565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ad3602183613248565b9150614ade82614a77565b604082019050919050565b60006020820190508181036000830152614b0281614ac6565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614b65602883613248565b9150614b7082614b09565b604082019050919050565b60006020820190508181036000830152614b9481614b58565b905091905056fea264697066735822122077746090bc7d9b7626e896ce8c67db0a3b318ba073aaf663f10d780ab66fcf8a64736f6c63430008110033697066733a2f2f516d5655694c756d5a764b43774636756e355446336732426d323638787861757262546e3370486e5737535a71632f
Deployed Bytecode
0x6080604052600436106102305760003560e01c806356569a1d1161012e578063a0712d68116100ab578063d5abeb011161006f578063d5abeb01146107f1578063dc4e66b51461081c578063e985e9c514610845578063eb8d244414610882578063f2fde38b146108ad57610230565b8063a0712d681461071d578063a22cb46514610739578063b88d4fde14610762578063bde12d731461078b578063c87b56dd146107b457610230565b8063715018a6116100f2578063715018a6146106575780637c6b172d1461066e5780637c928fe9146106ab5780638da5cb5b146106c757806395d89b41146106f257610230565b806356569a1d1461055c5780635c975abb146105875780636352211e146105b25780636c0360eb146105ef57806370a082311461061a57610230565b80632f745c59116101bc57806342842e0e1161018057806342842e0e1461047957806344a0d68a146104a2578063485a68a3146104cb5780634f6ccce7146104f657806355f804b31461053357610230565b80632f745c59146103d457806334918dfd1461041157806334c8fd7514610428578063375a069a146104535780633ccfd60b1461046f57610230565b8063095ea7b311610203578063095ea7b31461030357806313faede61461032c57806318160ddd14610357578063228025e81461038257806323b872dd146103ab57610230565b806301ffc9a714610235578063022d67dd1461027257806306fdde031461029b578063081812fc146102c6575b600080fd5b34801561024157600080fd5b5061025c60048036038101906102579190613177565b6108d6565b60405161026991906131bf565b60405180910390f35b34801561027e57600080fd5b5061029960048036038101906102949190613210565b610a20565b005b3480156102a757600080fd5b506102b0610aa6565b6040516102bd91906132cd565b60405180910390f35b3480156102d257600080fd5b506102ed60048036038101906102e89190613210565b610b38565b6040516102fa9190613330565b60405180910390f35b34801561030f57600080fd5b5061032a60048036038101906103259190613377565b610bbd565b005b34801561033857600080fd5b50610341610cd5565b60405161034e91906133c6565b60405180910390f35b34801561036357600080fd5b5061036c610cdb565b60405161037991906133c6565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190613210565b610ce4565b005b3480156103b757600080fd5b506103d260048036038101906103cd91906133e1565b610daf565b005b3480156103e057600080fd5b506103fb60048036038101906103f69190613377565b610dbf565b60405161040891906133c6565b60405180910390f35b34801561041d57600080fd5b50610426610faf565b005b34801561043457600080fd5b5061043d611057565b60405161044a91906133c6565b60405180910390f35b61046d60048036038101906104689190613210565b61105d565b005b6104776111df565b005b34801561048557600080fd5b506104a0600480360381019061049b91906133e1565b6112d4565b005b3480156104ae57600080fd5b506104c960048036038101906104c49190613210565b6112f4565b005b3480156104d757600080fd5b506104e061137a565b6040516104ed91906133c6565b60405180910390f35b34801561050257600080fd5b5061051d60048036038101906105189190613210565b611380565b60405161052a91906133c6565b60405180910390f35b34801561053f57600080fd5b5061055a60048036038101906105559190613569565b6113d3565b005b34801561056857600080fd5b50610571611462565b60405161057e91906133c6565b60405180910390f35b34801561059357600080fd5b5061059c611468565b6040516105a991906131bf565b60405180910390f35b3480156105be57600080fd5b506105d960048036038101906105d49190613210565b61147f565b6040516105e69190613330565b60405180910390f35b3480156105fb57600080fd5b50610604611495565b60405161061191906132cd565b60405180910390f35b34801561062657600080fd5b50610641600480360381019061063c91906135b2565b611523565b60405161064e91906133c6565b60405180910390f35b34801561066357600080fd5b5061066c61160b565b005b34801561067a57600080fd5b50610695600480360381019061069091906135b2565b611693565b6040516106a291906133c6565b60405180910390f35b6106c560048036038101906106c09190613210565b6116ab565b005b3480156106d357600080fd5b506106dc61190b565b6040516106e99190613330565b60405180910390f35b3480156106fe57600080fd5b50610707611935565b60405161071491906132cd565b60405180910390f35b61073760048036038101906107329190613210565b6119c7565b005b34801561074557600080fd5b50610760600480360381019061075b919061360b565b611b7b565b005b34801561076e57600080fd5b50610789600480360381019061078491906136ec565b611cfb565b005b34801561079757600080fd5b506107b260048036038101906107ad9190613210565b611d57565b005b3480156107c057600080fd5b506107db60048036038101906107d69190613210565b611ddd565b6040516107e891906132cd565b60405180910390f35b3480156107fd57600080fd5b50610806611e84565b60405161081391906133c6565b60405180910390f35b34801561082857600080fd5b50610843600480360381019061083e9190613210565b611e8a565b005b34801561085157600080fd5b5061086c6004803603810190610867919061376f565b611f10565b60405161087991906131bf565b60405180910390f35b34801561088e57600080fd5b50610897611fa4565b6040516108a491906131bf565b60405180910390f35b3480156108b957600080fd5b506108d460048036038101906108cf91906135b2565b611fb7565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109a157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a0957507f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610a195750610a18826120ae565b5b9050919050565b610a28612118565b73ffffffffffffffffffffffffffffffffffffffff16610a4661190b565b73ffffffffffffffffffffffffffffffffffffffff1614610a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a93906137fb565b60405180910390fd5b80600e8190555050565b606060018054610ab59061384a565b80601f0160208091040260200160405190810160405280929190818152602001828054610ae19061384a565b8015610b2e5780601f10610b0357610100808354040283529160200191610b2e565b820191906000526020600020905b815481529060010190602001808311610b1157829003601f168201915b5050505050905090565b6000610b4382612120565b610b82576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b79906138ed565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610bc88261147f565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610c38576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2f9061397f565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c57612118565b73ffffffffffffffffffffffffffffffffffffffff161480610c865750610c8581610c80612118565b611f10565b5b610cc5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cbc90613a11565b60405180910390fd5b610cd083838361212d565b505050565b600a5481565b60008054905090565b610cec612118565b73ffffffffffffffffffffffffffffffffffffffff16610d0a61190b565b73ffffffffffffffffffffffffffffffffffffffff1614610d60576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d57906137fb565b60405180910390fd5b600b54811115610da5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d9c90613a7d565b60405180910390fd5b80600b8190555050565b610dba8383836121df565b505050565b6000610dca83611523565b8210610e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e0290613b0f565b60405180910390fd5b6000610e15610cdb565b905060008060005b83811015610f6d576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff1614610f0f57806000015192505b8773ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610f5f57868403610f56578195505050505050610fa9565b83806001019450505b508080600101915050610e1d565b506040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa090613ba1565b60405180910390fd5b92915050565b610fb7612118565b73ffffffffffffffffffffffffffffffffffffffff16610fd561190b565b73ffffffffffffffffffffffffffffffffffffffff161461102b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611022906137fb565b60405180910390fd5b600f60009054906101000a900460ff1615600f60006101000a81548160ff021916908315150217905550565b600e5481565b6002600854036110a2576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161109990613c0d565b60405180910390fd5b60026008819055506110b2612118565b73ffffffffffffffffffffffffffffffffffffffff166110d061190b565b73ffffffffffffffffffffffffffffffffffffffff1614611126576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161111d906137fb565b60405180910390fd5b6000611130610cdb565b905060008211611175576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161116c90613c79565b60405180910390fd5b600b5482826111849190613cc8565b11156111c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111bc90613d48565b60405180910390fd5b6111cf338361271d565b6000905050600160088190555050565b6111e7612118565b73ffffffffffffffffffffffffffffffffffffffff1661120561190b565b73ffffffffffffffffffffffffffffffffffffffff161461125b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611252906137fb565b60405180910390fd5b60003373ffffffffffffffffffffffffffffffffffffffff164760405161128190613d99565b60006040518083038185875af1925050503d80600081146112be576040519150601f19603f3d011682016040523d82523d6000602084013e6112c3565b606091505b50509050806112d157600080fd5b50565b6112ef83838360405180602001604052806000815250611cfb565b505050565b6112fc612118565b73ffffffffffffffffffffffffffffffffffffffff1661131a61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611370576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611367906137fb565b60405180910390fd5b80600a8190555050565b600c5481565b600061138a610cdb565b82106113cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113c290613e20565b60405180910390fd5b819050919050565b6113db612118565b73ffffffffffffffffffffffffffffffffffffffff166113f961190b565b73ffffffffffffffffffffffffffffffffffffffff161461144f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611446906137fb565b60405180910390fd5b806009908161145e9190613fec565b5050565b600d5481565b6000600760149054906101000a900460ff16905090565b600061148a8261273b565b600001519050919050565b600980546114a29061384a565b80601f01602080910402602001604051908101604052809291908181526020018280546114ce9061384a565b801561151b5780601f106114f05761010080835404028352916020019161151b565b820191906000526020600020905b8154815290600101906020018083116114fe57829003601f168201915b505050505081565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611593576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158a90614130565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a90046fffffffffffffffffffffffffffffffff166fffffffffffffffffffffffffffffffff169050919050565b611613612118565b73ffffffffffffffffffffffffffffffffffffffff1661163161190b565b73ffffffffffffffffffffffffffffffffffffffff1614611687576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161167e906137fb565b60405180910390fd5b61169160006128d5565b565b60106020528060005260406000206000915090505481565b6002600854036116f0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e790613c0d565b60405180910390fd5b60026008819055506000611702610cdb565b90506000601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050600f60009054906101000a900460ff16611797576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178e9061419c565b60405180910390fd5b600d5483826117a69190613cc8565b11156117e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117de90614208565b60405180910390fd5b6000831161182a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182190613c79565b60405180910390fd5b600c5483836118399190613cc8565b111561187a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161187190613d48565b60405180910390fd5b60005b838110156118eb57601060003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906118d590614228565b9190505550806118e490614228565b905061187d565b506118f6338461271d565b60009150600090505050600160088190555050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600280546119449061384a565b80601f01602080910402602001604051908101604052809291908181526020018280546119709061384a565b80156119bd5780601f10611992576101008083540402835291602001916119bd565b820191906000526020600020905b8154815290600101906020018083116119a057829003601f168201915b5050505050905090565b600260085403611a0c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a0390613c0d565b60405180910390fd5b60026008819055506000611a1e610cdb565b9050600f60009054906101000a900460ff16611a6f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a669061419c565b60405180910390fd5b60008211611ab2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa990613c79565b60405180910390fd5b600e54821115611af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aee906142e2565b60405180910390fd5b600b548282611b069190613cc8565b1115611b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b3e90613d48565b60405180910390fd5b81600a54611b559190614302565b341015611b6157600080fd5b611b6b338361271d565b6000905050600160088190555050565b611b83612118565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1603611bf0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611be790614390565b60405180910390fd5b8060066000611bfd612118565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff16611caa612118565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cef91906131bf565b60405180910390a35050565b611d068484846121df565b611d128484848461299b565b611d51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4890614422565b60405180910390fd5b50505050565b611d5f612118565b73ffffffffffffffffffffffffffffffffffffffff16611d7d61190b565b73ffffffffffffffffffffffffffffffffffffffff1614611dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dca906137fb565b60405180910390fd5b80600c8190555050565b6060611de882612120565b611e27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1e906144b4565b60405180910390fd5b6000611e31612b22565b90506000815111611e515760405180602001604052806000815250611e7c565b80611e5b84612bb4565b604051602001611e6c929190614510565b6040516020818303038152906040525b915050919050565b600b5481565b611e92612118565b73ffffffffffffffffffffffffffffffffffffffff16611eb061190b565b73ffffffffffffffffffffffffffffffffffffffff1614611f06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611efd906137fb565b60405180910390fd5b80600d8190555050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b600f60009054906101000a900460ff1681565b611fbf612118565b73ffffffffffffffffffffffffffffffffffffffff16611fdd61190b565b73ffffffffffffffffffffffffffffffffffffffff1614612033576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202a906137fb565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16036120a2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612099906145a6565b60405180910390fd5b6120ab816128d5565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600033905090565b6000805482109050919050565b826005600084815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550818373ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a4505050565b60006121ea8261273b565b90506000816000015173ffffffffffffffffffffffffffffffffffffffff16612211612118565b73ffffffffffffffffffffffffffffffffffffffff16148061226d5750612236612118565b73ffffffffffffffffffffffffffffffffffffffff1661225584610b38565b73ffffffffffffffffffffffffffffffffffffffff16145b8061228957506122888260000151612283612118565b611f10565b5b9050806122cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122c290614638565b60405180910390fd5b8473ffffffffffffffffffffffffffffffffffffffff16826000015173ffffffffffffffffffffffffffffffffffffffff161461233d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612334906146ca565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16036123ac576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123a39061475c565b60405180910390fd5b6123b98585856001612d14565b6123c9600084846000015161212d565b6001600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160392506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff1602179055506001600460008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550836003600085815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600085815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055506000600184019050600073ffffffffffffffffffffffffffffffffffffffff166003600083815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16036126ad5761260c81612120565b156126ac5782600001516003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555082602001516003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff1602179055505b5b50828473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a46127168585856001612d1a565b5050505050565b612737828260405180602001604052806000815250612d20565b5050565b6127436130d1565b61274c82612120565b61278b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612782906147ee565b60405180910390fd5b60008290505b60008110612894576000600360008381526020019081526020016000206040518060400160405290816000820160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020016000820160149054906101000a900467ffffffffffffffff1667ffffffffffffffff1667ffffffffffffffff16815250509050600073ffffffffffffffffffffffffffffffffffffffff16816000015173ffffffffffffffffffffffffffffffffffffffff16146128855780925050506128d0565b50808060019003915050612791565b506040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128c790614880565b60405180910390fd5b919050565b6000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60006129bc8473ffffffffffffffffffffffffffffffffffffffff16612d32565b15612b15578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026129e5612118565b8786866040518563ffffffff1660e01b8152600401612a0794939291906148f5565b6020604051808303816000875af1925050508015612a4357506040513d601f19601f82011682018060405250810190612a409190614956565b60015b612ac5573d8060008114612a73576040519150601f19603f3d011682016040523d82523d6000602084013e612a78565b606091505b506000815103612abd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ab490614422565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612b1a565b600190505b949350505050565b606060098054612b319061384a565b80601f0160208091040260200160405190810160405280929190818152602001828054612b5d9061384a565b8015612baa5780601f10612b7f57610100808354040283529160200191612baa565b820191906000526020600020905b815481529060010190602001808311612b8d57829003601f168201915b5050505050905090565b606060008203612bfb576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d0f565b600082905060005b60008214612c2d578080612c1690614228565b915050600a82612c2691906149b2565b9150612c03565b60008167ffffffffffffffff811115612c4957612c4861343e565b5b6040519080825280601f01601f191660200182016040528015612c7b5781602001600182028036833780820191505090505b5090505b60008514612d0857600182612c9491906149e3565b9150600a85612ca39190614a17565b6030612caf9190613cc8565b60f81b818381518110612cc557612cc4614a48565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d0191906149b2565b9450612c7f565b8093505050505b919050565b50505050565b50505050565b612d2d8383836001612d55565b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600080549050600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603612dca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dc190614ae9565b60405180910390fd5b60008403612e0d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e0490614b7b565b60405180910390fd5b612e1a6000868387612d14565b83600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160008282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff16021790555083600460008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160108282829054906101000a90046fffffffffffffffffffffffffffffffff160192506101000a8154816fffffffffffffffffffffffffffffffff02191690836fffffffffffffffffffffffffffffffff160217905550846003600083815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550426003600083815260200190815260200160002060000160146101000a81548167ffffffffffffffff021916908367ffffffffffffffff160217905550600081905060005b858110156130b457818773ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4831561309f5761305f600088848861299b565b61309e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161309590614422565b60405180910390fd5b5b81806001019250508080600101915050612fe8565b5080600081905550506130ca6000868387612d1a565b5050505050565b6040518060400160405280600073ffffffffffffffffffffffffffffffffffffffff168152602001600067ffffffffffffffff1681525090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b6131548161311f565b811461315f57600080fd5b50565b6000813590506131718161314b565b92915050565b60006020828403121561318d5761318c613115565b5b600061319b84828501613162565b91505092915050565b60008115159050919050565b6131b9816131a4565b82525050565b60006020820190506131d460008301846131b0565b92915050565b6000819050919050565b6131ed816131da565b81146131f857600080fd5b50565b60008135905061320a816131e4565b92915050565b60006020828403121561322657613225613115565b5b6000613234848285016131fb565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561327757808201518184015260208101905061325c565b60008484015250505050565b6000601f19601f8301169050919050565b600061329f8261323d565b6132a98185613248565b93506132b9818560208601613259565b6132c281613283565b840191505092915050565b600060208201905081810360008301526132e78184613294565b905092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061331a826132ef565b9050919050565b61332a8161330f565b82525050565b60006020820190506133456000830184613321565b92915050565b6133548161330f565b811461335f57600080fd5b50565b6000813590506133718161334b565b92915050565b6000806040838503121561338e5761338d613115565b5b600061339c85828601613362565b92505060206133ad858286016131fb565b9150509250929050565b6133c0816131da565b82525050565b60006020820190506133db60008301846133b7565b92915050565b6000806000606084860312156133fa576133f9613115565b5b600061340886828701613362565b935050602061341986828701613362565b925050604061342a868287016131fb565b9150509250925092565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61347682613283565b810181811067ffffffffffffffff821117156134955761349461343e565b5b80604052505050565b60006134a861310b565b90506134b4828261346d565b919050565b600067ffffffffffffffff8211156134d4576134d361343e565b5b6134dd82613283565b9050602081019050919050565b82818337600083830152505050565b600061350c613507846134b9565b61349e565b90508281526020810184848401111561352857613527613439565b5b6135338482856134ea565b509392505050565b600082601f8301126135505761354f613434565b5b81356135608482602086016134f9565b91505092915050565b60006020828403121561357f5761357e613115565b5b600082013567ffffffffffffffff81111561359d5761359c61311a565b5b6135a98482850161353b565b91505092915050565b6000602082840312156135c8576135c7613115565b5b60006135d684828501613362565b91505092915050565b6135e8816131a4565b81146135f357600080fd5b50565b600081359050613605816135df565b92915050565b6000806040838503121561362257613621613115565b5b600061363085828601613362565b9250506020613641858286016135f6565b9150509250929050565b600067ffffffffffffffff8211156136665761366561343e565b5b61366f82613283565b9050602081019050919050565b600061368f61368a8461364b565b61349e565b9050828152602081018484840111156136ab576136aa613439565b5b6136b68482856134ea565b509392505050565b600082601f8301126136d3576136d2613434565b5b81356136e384826020860161367c565b91505092915050565b6000806000806080858703121561370657613705613115565b5b600061371487828801613362565b945050602061372587828801613362565b9350506040613736878288016131fb565b925050606085013567ffffffffffffffff8111156137575761375661311a565b5b613763878288016136be565b91505092959194509250565b6000806040838503121561378657613785613115565b5b600061379485828601613362565b92505060206137a585828601613362565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006137e5602083613248565b91506137f0826137af565b602082019050919050565b60006020820190508181036000830152613814816137d8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061386257607f821691505b6020821081036138755761387461381b565b5b50919050565b7f455243373231413a20617070726f76656420717565727920666f72206e6f6e6560008201527f78697374656e7420746f6b656e00000000000000000000000000000000000000602082015250565b60006138d7602d83613248565b91506138e28261387b565b604082019050919050565b60006020820190508181036000830152613906816138ca565b9050919050565b7f455243373231413a20617070726f76616c20746f2063757272656e74206f776e60008201527f6572000000000000000000000000000000000000000000000000000000000000602082015250565b6000613969602283613248565b91506139748261390d565b604082019050919050565b600060208201905081810360008301526139988161395c565b9050919050565b7f455243373231413a20617070726f76652063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f76656420666f7220616c6c00000000000000602082015250565b60006139fb603983613248565b9150613a068261399f565b604082019050919050565b60006020820190508181036000830152613a2a816139ee565b9050919050565b7f43616e6e6f7420696e637265617365206d617820737570706c79000000000000600082015250565b6000613a67601a83613248565b9150613a7282613a31565b602082019050919050565b60006020820190508181036000830152613a9681613a5a565b9050919050565b7f455243373231413a206f776e657220696e646578206f7574206f6620626f756e60008201527f6473000000000000000000000000000000000000000000000000000000000000602082015250565b6000613af9602283613248565b9150613b0482613a9d565b604082019050919050565b60006020820190508181036000830152613b2881613aec565b9050919050565b7f455243373231413a20756e61626c6520746f2067657420746f6b656e206f662060008201527f6f776e657220627920696e646578000000000000000000000000000000000000602082015250565b6000613b8b602e83613248565b9150613b9682613b2f565b604082019050919050565b60006020820190508181036000830152613bba81613b7e565b9050919050565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b6000613bf7601f83613248565b9150613c0282613bc1565b602082019050919050565b60006020820190508181036000830152613c2681613bea565b9050919050565b7f43616e74206d696e742030000000000000000000000000000000000000000000600082015250565b6000613c63600b83613248565b9150613c6e82613c2d565b602082019050919050565b60006020820190508181036000830152613c9281613c56565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613cd3826131da565b9150613cde836131da565b9250828201905080821115613cf657613cf5613c99565b5b92915050565b7f43616e7420676f206f76657220737570706c7900000000000000000000000000600082015250565b6000613d32601383613248565b9150613d3d82613cfc565b602082019050919050565b60006020820190508181036000830152613d6181613d25565b9050919050565b600081905092915050565b50565b6000613d83600083613d68565b9150613d8e82613d73565b600082019050919050565b6000613da482613d76565b9150819050919050565b7f455243373231413a20676c6f62616c20696e646578206f7574206f6620626f7560008201527f6e64730000000000000000000000000000000000000000000000000000000000602082015250565b6000613e0a602383613248565b9150613e1582613dae565b604082019050919050565b60006020820190508181036000830152613e3981613dfd565b9050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302613ea27fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82613e65565b613eac8683613e65565b95508019841693508086168417925050509392505050565b6000819050919050565b6000613ee9613ee4613edf846131da565b613ec4565b6131da565b9050919050565b6000819050919050565b613f0383613ece565b613f17613f0f82613ef0565b848454613e72565b825550505050565b600090565b613f2c613f1f565b613f37818484613efa565b505050565b5b81811015613f5b57613f50600082613f24565b600181019050613f3d565b5050565b601f821115613fa057613f7181613e40565b613f7a84613e55565b81016020851015613f89578190505b613f9d613f9585613e55565b830182613f3c565b50505b505050565b600082821c905092915050565b6000613fc360001984600802613fa5565b1980831691505092915050565b6000613fdc8383613fb2565b9150826002028217905092915050565b613ff58261323d565b67ffffffffffffffff81111561400e5761400d61343e565b5b614018825461384a565b614023828285613f5f565b600060209050601f8311600181146140565760008415614044578287015190505b61404e8582613fd0565b8655506140b6565b601f19841661406486613e40565b60005b8281101561408c57848901518255600182019150602085019450602081019050614067565b868310156140a957848901516140a5601f891682613fb2565b8355505b6001600288020188555050505b505050505050565b7f455243373231413a2062616c616e636520717565727920666f7220746865207a60008201527f65726f2061646472657373000000000000000000000000000000000000000000602082015250565b600061411a602b83613248565b9150614125826140be565b604082019050919050565b600060208201905081810360008301526141498161410d565b9050919050565b7f53616c65206e6f74206163746976650000000000000000000000000000000000600082015250565b6000614186600f83613248565b915061419182614150565b602082019050919050565b600060208201905081810360008301526141b581614179565b9050919050565b7f6d61782066726565204e4654207065722077616c6c6574206578636565646564600082015250565b60006141f2602083613248565b91506141fd826141bc565b602082019050919050565b60006020820190508181036000830152614221816141e5565b9050919050565b6000614233826131da565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff820361426557614264613c99565b5b600182019050919050565b7f43616e74206d696e74206d6f7265207468656e206d617820616c6c6f6361746960008201527f6f6e000000000000000000000000000000000000000000000000000000000000602082015250565b60006142cc602283613248565b91506142d782614270565b604082019050919050565b600060208201905081810360008301526142fb816142bf565b9050919050565b600061430d826131da565b9150614318836131da565b9250828202614326816131da565b9150828204841483151761433d5761433c613c99565b5b5092915050565b7f455243373231413a20617070726f766520746f2063616c6c6572000000000000600082015250565b600061437a601a83613248565b915061438582614344565b602082019050919050565b600060208201905081810360008301526143a98161436d565b9050919050565b7f455243373231413a207472616e7366657220746f206e6f6e204552433732315260008201527f6563656976657220696d706c656d656e74657200000000000000000000000000602082015250565b600061440c603383613248565b9150614417826143b0565b604082019050919050565b6000602082019050818103600083015261443b816143ff565b9050919050565b7f4552433732314d657461646174613a204e6f6e6578697374656e7420746f6b6560008201527f6e00000000000000000000000000000000000000000000000000000000000000602082015250565b600061449e602183613248565b91506144a982614442565b604082019050919050565b600060208201905081810360008301526144cd81614491565b9050919050565b600081905092915050565b60006144ea8261323d565b6144f481856144d4565b9350614504818560208601613259565b80840191505092915050565b600061451c82856144df565b915061452882846144df565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000614590602683613248565b915061459b82614534565b604082019050919050565b600060208201905081810360008301526145bf81614583565b9050919050565b7f455243373231413a207472616e736665722063616c6c6572206973206e6f742060008201527f6f776e6572206e6f7220617070726f7665640000000000000000000000000000602082015250565b6000614622603283613248565b915061462d826145c6565b604082019050919050565b6000602082019050818103600083015261465181614615565b9050919050565b7f455243373231413a207472616e736665722066726f6d20696e636f727265637460008201527f206f776e65720000000000000000000000000000000000000000000000000000602082015250565b60006146b4602683613248565b91506146bf82614658565b604082019050919050565b600060208201905081810360008301526146e3816146a7565b9050919050565b7f455243373231413a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b6000614746602583613248565b9150614751826146ea565b604082019050919050565b6000602082019050818103600083015261477581614739565b9050919050565b7f455243373231413a206f776e657220717565727920666f72206e6f6e6578697360008201527f74656e7420746f6b656e00000000000000000000000000000000000000000000602082015250565b60006147d8602a83613248565b91506147e38261477c565b604082019050919050565b60006020820190508181036000830152614807816147cb565b9050919050565b7f455243373231413a20756e61626c6520746f2064657465726d696e652074686560008201527f206f776e6572206f6620746f6b656e0000000000000000000000000000000000602082015250565b600061486a602f83613248565b91506148758261480e565b604082019050919050565b600060208201905081810360008301526148998161485d565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006148c7826148a0565b6148d181856148ab565b93506148e1818560208601613259565b6148ea81613283565b840191505092915050565b600060808201905061490a6000830187613321565b6149176020830186613321565b61492460408301856133b7565b818103606083015261493681846148bc565b905095945050505050565b6000815190506149508161314b565b92915050565b60006020828403121561496c5761496b613115565b5b600061497a84828501614941565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b60006149bd826131da565b91506149c8836131da565b9250826149d8576149d7614983565b5b828204905092915050565b60006149ee826131da565b91506149f9836131da565b9250828203905081811115614a1157614a10613c99565b5b92915050565b6000614a22826131da565b9150614a2d836131da565b925082614a3d57614a3c614983565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f455243373231413a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000614ad3602183613248565b9150614ade82614a77565b604082019050919050565b60006020820190508181036000830152614b0281614ac6565b9050919050565b7f455243373231413a207175616e74697479206d7573742062652067726561746560008201527f72207468616e2030000000000000000000000000000000000000000000000000602082015250565b6000614b65602883613248565b9150614b7082614b09565b604082019050919050565b60006020820190508181036000830152614b9481614b58565b905091905056fea264697066735822122077746090bc7d9b7626e896ce8c67db0a3b318ba073aaf663f10d780ab66fcf8a64736f6c63430008110033
Deployed Bytecode Sourcemap
45192:3712:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24869:372;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48455:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26755:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28317:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27838:413;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45326:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23126:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48023:182;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29193:162;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23790:1007;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47832:89;;;;;;;;;;;;;:::i;:::-;;45488:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47075:305;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48709:192;;;:::i;:::-;;29426:177;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47929:86;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45404:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23303:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48343:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45440:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;39043:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26564:124;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45298:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25305:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41860:94;;;;;;;;;;;;;:::i;:::-;;45579:59;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45902:664;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41209:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26924:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46576:491;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28603:288;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29674:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48212:123;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47388:436;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45366:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48585:118;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28962:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45538:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42109:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24869:372;24971:4;25023:25;25008:40;;;:11;:40;;;;:105;;;;25080:33;25065:48;;;:11;:48;;;;25008:105;:172;;;;25145:35;25130:50;;;:11;:50;;;;25008:172;:225;;;;25197:36;25221:11;25197:23;:36::i;:::-;25008:225;24988:245;;24869:372;;;:::o;48455:122::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48562:7:::1;48536:23;:33;;;;48455:122:::0;:::o;26755:100::-;26809:13;26842:5;26835:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26755:100;:::o;28317:214::-;28385:7;28413:16;28421:7;28413;:16::i;:::-;28405:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28499:15;:24;28515:7;28499:24;;;;;;;;;;;;;;;;;;;;;28492:31;;28317:214;;;:::o;27838:413::-;27911:13;27927:24;27943:7;27927:15;:24::i;:::-;27911:40;;27976:5;27970:11;;:2;:11;;;27962:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;28071:5;28055:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;28080:37;28097:5;28104:12;:10;:12::i;:::-;28080:16;:37::i;:::-;28055:62;28033:169;;;;;;;;;;;;:::i;:::-;;;;;;;;;28215:28;28224:2;28228:7;28237:5;28215:8;:28::i;:::-;27900:351;27838:413;;:::o;45326:33::-;;;;:::o;23126:100::-;23179:7;23206:12;;23199:19;;23126:100;:::o;48023:182::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48121:9:::1;;48104:13;:26;;48096:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;48184:13;48172:9;:25;;;;48023:182:::0;:::o;29193:162::-;29319:28;29329:4;29335:2;29339:7;29319:9;:28::i;:::-;29193:162;;;:::o;23790:1007::-;23879:7;23915:16;23925:5;23915:9;:16::i;:::-;23907:5;:24;23899:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;23981:22;24006:13;:11;:13::i;:::-;23981:38;;24030:19;24060:25;24249:9;24244:466;24264:14;24260:1;:18;24244:466;;;24304:31;24338:11;:14;24350:1;24338:14;;;;;;;;;;;24304:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24401:1;24375:28;;:9;:14;;;:28;;;24371:111;;24448:9;:14;;;24428:34;;24371:111;24525:5;24504:26;;:17;:26;;;24500:195;;24574:5;24559:11;:20;24555:85;;24615:1;24608:8;;;;;;;;;24555:85;24662:13;;;;;;;24500:195;24285:425;24280:3;;;;;;;24244:466;;;;24733:56;;;;;;;;;;:::i;:::-;;;;;;;;23790:1007;;;;;:::o;47832:89::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47901:12:::1;;;;;;;;;;;47900:13;47885:12;;:28;;;;;;;;;;;;;;;;;;47832:89::o:0;45488:43::-;;;;:::o;47075:305::-;44204:1;44800:7;;:19;44792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:1;44933:7;:18;;;;41440:12:::1;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47162:9:::2;47174:13;:11;:13::i;:::-;47162:25;;47220:1;47206:11;:15;47198:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;47275:9;;47260:11;47256:1;:15;;;;:::i;:::-;:28;;47248:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;47319:34;47329:10;47341:11;47319:9;:34::i;:::-;47364:8;;;47151:229;44160:1:::0;45112:7;:22;;;;47075:305;:::o;48709:192::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48766:12:::1;48792:10;48784:24;;48830:21;48784:82;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48765:101;;;48885:7;48877:16;;;::::0;::::1;;48754:147;48709:192::o:0;29426:177::-;29556:39;29573:4;29579:2;29583:7;29556:39;;;;;;;;;;;;:16;:39::i;:::-;29426:177;;;:::o;47929:86::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47999:8:::1;47992:4;:15;;;;47929:86:::0;:::o;45404:29::-;;;;:::o;23303:187::-;23370:7;23406:13;:11;:13::i;:::-;23398:5;:21;23390:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;23477:5;23470:12;;23303:187;;;:::o;48343:104::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48428:11:::1;48418:7;:21;;;;;;:::i;:::-;;48343:104:::0;:::o;45440:41::-;;;;:::o;39043:86::-;39090:4;39114:7;;;;;;;;;;;39107:14;;39043:86;:::o;26564:124::-;26628:7;26655:20;26667:7;26655:11;:20::i;:::-;:25;;;26648:32;;26564:124;;;:::o;45298:21::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25305:221::-;25369:7;25414:1;25397:19;;:5;:19;;;25389:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;25490:12;:19;25503:5;25490:19;;;;;;;;;;;;;;;:27;;;;;;;;;;;;25482:36;;25475:43;;25305:221;;;:::o;41860:94::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41925:21:::1;41943:1;41925:9;:21::i;:::-;41860:94::o:0;45579:59::-;;;;;;;;;;;;;;;;;:::o;45902:664::-;44204:1;44800:7;;:19;44792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:1;44933:7;:18;;;;45973:9:::1;45985:13;:11;:13::i;:::-;45973:25;;46009:30;46042:24;:36;46067:10;46042:36;;;;;;;;;;;;;;;;46009:69;;46097:12;;;;;;;;;;;46089:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46188:22;;46173:11;46148:22;:36;;;;:::i;:::-;:62;;46140:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;46274:1;46260:11;:15;46252:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46324:7;;46309:11;46305:1;:15;;;;:::i;:::-;:26;;46297:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;46366:9;46361:103;46385:11;46381:1;:15;46361:103;;;46418:24;:36;46443:10;46418:36;;;;;;;;;;;;;;;;:38;;;;;;;;;:::i;:::-;;;;;;46398:3;;;;:::i;:::-;;;46361:103;;;;46474:34;46484:10;46496:11;46474:9;:34::i;:::-;46513:8;;;46532:29;;;45968:598;;44160:1:::0;45112:7;:22;;;;45902:664;:::o;41209:87::-;41255:7;41282:6;;;;;;;;;;;41275:13;;41209:87;:::o;26924:104::-;26980:13;27013:7;27006:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26924:104;:::o;46576:491::-;44204:1;44800:7;;:19;44792:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44204:1;44933:7;:18;;;;46650:9:::1;46662:13;:11;:13::i;:::-;46650:25;;46694:12;;;;;;;;;;;46686:40;;;;;;;;;;;;:::i;:::-;;;;;;;;;46759:1;46745:11;:15;46737:39;;;;;;;;;;;;:::i;:::-;;;;;;;;;46810:23;;46795:11;:38;;46787:86;;;;;;;;;;;;:::i;:::-;;;;;;;;;46911:9;;46896:11;46892:1;:15;;;;:::i;:::-;:28;;46884:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;46983:11;46976:4;;:18;;;;:::i;:::-;46963:9;:31;;46955:40;;;::::0;::::1;;47006:34;47016:10;47028:11;47006:9;:34::i;:::-;47051:8;;;46639:428;44160:1:::0;45112:7;:22;;;;46576:491;:::o;28603:288::-;28710:12;:10;:12::i;:::-;28698:24;;:8;:24;;;28690:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;28811:8;28766:18;:32;28785:12;:10;:12::i;:::-;28766:32;;;;;;;;;;;;;;;:42;28799:8;28766:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28864:8;28835:48;;28850:12;:10;:12::i;:::-;28835:48;;;28874:8;28835:48;;;;;;:::i;:::-;;;;;;;;28603:288;;:::o;29674:355::-;29833:28;29843:4;29849:2;29853:7;29833:9;:28::i;:::-;29894:48;29917:4;29923:2;29927:7;29936:5;29894:22;:48::i;:::-;29872:149;;;;;;;;;;;;:::i;:::-;;;;;;;;;29674:355;;;;:::o;48212:123::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48310:17:::1;48300:7;:27;;;;48212:123:::0;:::o;47388:436::-;47506:13;47545:16;47553:7;47545;:16::i;:::-;47537:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;47610:28;47641:10;:8;:10::i;:::-;47610:41;;47713:1;47688:14;47682:28;:32;:134;;;;;;;;;;;;;;;;;47758:14;47774:18;:7;:16;:18::i;:::-;47741:52;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47682:134;47662:154;;;47388:436;;;:::o;45366:31::-;;;;:::o;48585:118::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48688:7:::1;48663:22;:32;;;;48585:118:::0;:::o;28962:164::-;29059:4;29083:18;:25;29102:5;29083:25;;;;;;;;;;;;;;;:35;29109:8;29083:35;;;;;;;;;;;;;;;;;;;;;;;;;29076:42;;28962:164;;;;:::o;45538:32::-;;;;;;;;;;;;;:::o;42109:229::-;41440:12;:10;:12::i;:::-;41429:23;;:7;:5;:7::i;:::-;:23;;;41421:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42232:1:::1;42212:22;;:8;:22;;::::0;42190:110:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;42311:19;42321:8;42311:9;:19::i;:::-;42109:229:::0;:::o;14389:157::-;14474:4;14513:25;14498:40;;;:11;:40;;;;14491:47;;14389:157;;;:::o;2836:98::-;2889:7;2916:10;2909:17;;2836:98;:::o;30284:111::-;30341:4;30375:12;;30365:7;:22;30358:29;;30284:111;;;:::o;35204:196::-;35346:2;35319:15;:24;35335:7;35319:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35384:7;35380:2;35364:28;;35373:5;35364:28;;;;;;;;;;;;35204:196;;;:::o;33084:2002::-;33199:35;33237:20;33249:7;33237:11;:20::i;:::-;33199:58;;33270:22;33312:13;:18;;;33296:34;;:12;:10;:12::i;:::-;:34;;;:87;;;;33371:12;:10;:12::i;:::-;33347:36;;:20;33359:7;33347:11;:20::i;:::-;:36;;;33296:87;:154;;;;33400:50;33417:13;:18;;;33437:12;:10;:12::i;:::-;33400:16;:50::i;:::-;33296:154;33270:181;;33472:17;33464:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;33587:4;33565:26;;:13;:18;;;:26;;;33557:77;;;;;;;;;;;;:::i;:::-;;;;;;;;;33667:1;33653:16;;:2;:16;;;33645:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;33724:43;33746:4;33752:2;33756:7;33765:1;33724:21;:43::i;:::-;33832:49;33849:1;33853:7;33862:13;:18;;;33832:8;:49::i;:::-;34207:1;34177:12;:18;34190:4;34177:18;;;;;;;;;;;;;;;:26;;;:31;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34251:1;34223:12;:16;34236:2;34223:16;;;;;;;;;;;;;;;:24;;;:29;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34297:2;34269:11;:20;34281:7;34269:20;;;;;;;;;;;:25;;;:30;;;;;;;;;;;;;;;;;;34359:15;34314:11;:20;34326:7;34314:20;;;;;;;;;;;:35;;;:61;;;;;;;;;;;;;;;;;;34627:19;34659:1;34649:7;:11;34627:33;;34720:1;34679:43;;:11;:24;34691:11;34679:24;;;;;;;;;;;:29;;;;;;;;;;;;:43;;;34675:295;;34747:20;34755:11;34747:7;:20::i;:::-;34743:212;;;34824:13;:18;;;34792:11;:24;34804:11;34792:24;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;34907:13;:28;;;34865:11;:24;34877:11;34865:24;;;;;;;;;;;:39;;;:70;;;;;;;;;;;;;;;;;;34743:212;34675:295;34152:829;35017:7;35013:2;34998:27;;35007:4;34998:27;;;;;;;;;;;;35036:42;35057:4;35063:2;35067:7;35076:1;35036:20;:42::i;:::-;33188:1898;;33084:2002;;;:::o;30403:104::-;30472:27;30482:2;30486:8;30472:27;;;;;;;;;;;;:9;:27::i;:::-;30403:104;;:::o;25965:537::-;26026:21;;:::i;:::-;26068:16;26076:7;26068;:16::i;:::-;26060:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;26174:12;26189:7;26174:22;;26169:245;26206:1;26198:4;:9;26169:245;;26236:31;26270:11;:17;26282:4;26270:17;;;;;;;;;;;26236:51;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26336:1;26310:28;;:9;:14;;;:28;;;26306:93;;26370:9;26363:16;;;;;;26306:93;26217:197;26209:6;;;;;;;;26169:245;;;;26437:57;;;;;;;;;;:::i;:::-;;;;;;;;25965:537;;;;:::o;42346:173::-;42402:16;42421:6;;;;;;;;;;;42402:25;;42447:8;42438:6;;:17;;;;;;;;;;;;;;;;;;42502:8;42471:40;;42492:8;42471:40;;;;;;;;;;;;42391:128;42346:173;:::o;35965:804::-;36120:4;36141:15;:2;:13;;;:15::i;:::-;36137:625;;;36193:2;36177:36;;;36214:12;:10;:12::i;:::-;36228:4;36234:7;36243:5;36177:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36173:534;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36440:1;36423:6;:13;:18;36419:273;;36466:61;;;;;;;;;;:::i;:::-;;;;;;;;36419:273;36642:6;36636:13;36627:6;36623:2;36619:15;36612:38;36173:534;36310:45;;;36300:55;;;:6;:55;;;;36293:62;;;;;36137:625;36746:4;36739:11;;35965:804;;;;;;;:::o;45786:108::-;45846:13;45879:7;45872:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45786:108;:::o;398:723::-;454:13;684:1;675:5;:10;671:53;;702:10;;;;;;;;;;;;;;;;;;;;;671:53;734:12;749:5;734:20;;765:14;790:78;805:1;797:4;:9;790:78;;823:8;;;;;:::i;:::-;;;;854:2;846:10;;;;;:::i;:::-;;;790:78;;;878:19;910:6;900:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;878:39;;928:154;944:1;935:5;:10;928:154;;972:1;962:11;;;;;:::i;:::-;;;1039:2;1031:5;:10;;;;:::i;:::-;1018:2;:24;;;;:::i;:::-;1005:39;;988:6;995;988:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;1068:2;1059:11;;;;;:::i;:::-;;;928:154;;;1106:6;1092:21;;;;;398:723;;;;:::o;37257:159::-;;;;;:::o;37828:158::-;;;;;:::o;30870:163::-;30993:32;30999:2;31003:8;31013:5;31020:4;30993:5;:32::i;:::-;30870:163;;;:::o;4283:326::-;4343:4;4600:1;4578:7;:19;;;:23;4571:30;;4283:326;;;:::o;31292:1538::-;31431:20;31454:12;;31431:35;;31499:1;31485:16;;:2;:16;;;31477:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31570:1;31558:8;:13;31550:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;31629:61;31659:1;31663:2;31667:12;31681:8;31629:21;:61::i;:::-;32004:8;31968:12;:16;31981:2;31968:16;;;;;;;;;;;;;;;:24;;;:45;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32069:8;32028:12;:16;32041:2;32028:16;;;;;;;;;;;;;;;:29;;;:50;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32128:2;32095:11;:25;32107:12;32095:25;;;;;;;;;;;:30;;;:35;;;;;;;;;;;;;;;;;;32195:15;32145:11;:25;32157:12;32145:25;;;;;;;;;;;:40;;;:66;;;;;;;;;;;;;;;;;;32228:20;32251:12;32228:35;;32285:9;32280:415;32300:8;32296:1;:12;32280:415;;;32364:12;32360:2;32339:38;;32356:1;32339:38;;;;;;;;;;;;32400:4;32396:249;;;32463:59;32494:1;32498:2;32502:12;32516:5;32463:22;:59::i;:::-;32429:196;;;;;;;;;;;;:::i;:::-;;;;;;;;;32396:249;32665:14;;;;;;;32310:3;;;;;;;32280:415;;;;32726:12;32711;:27;;;;31943:807;32762:60;32791:1;32795:2;32799:12;32813:8;32762:20;:60::i;:::-;31420:1410;31292:1538;;;;:::o;-1:-1:-1:-;;;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:77::-;1555:7;1584:5;1573:16;;1518:77;;;:::o;1601:122::-;1674:24;1692:5;1674:24;:::i;:::-;1667:5;1664:35;1654:63;;1713:1;1710;1703:12;1654:63;1601:122;:::o;1729:139::-;1775:5;1813:6;1800:20;1791:29;;1829:33;1856:5;1829:33;:::i;:::-;1729:139;;;;:::o;1874:329::-;1933:6;1982:2;1970:9;1961:7;1957:23;1953:32;1950:119;;;1988:79;;:::i;:::-;1950:119;2108:1;2133:53;2178:7;2169:6;2158:9;2154:22;2133:53;:::i;:::-;2123:63;;2079:117;1874:329;;;;:::o;2209:99::-;2261:6;2295:5;2289:12;2279:22;;2209:99;;;:::o;2314:169::-;2398:11;2432:6;2427:3;2420:19;2472:4;2467:3;2463:14;2448:29;;2314:169;;;;:::o;2489:246::-;2570:1;2580:113;2594:6;2591:1;2588:13;2580:113;;;2679:1;2674:3;2670:11;2664:18;2660:1;2655:3;2651:11;2644:39;2616:2;2613:1;2609:10;2604:15;;2580:113;;;2727:1;2718:6;2713:3;2709:16;2702:27;2551:184;2489:246;;;:::o;2741:102::-;2782:6;2833:2;2829:7;2824:2;2817:5;2813:14;2809:28;2799:38;;2741:102;;;:::o;2849:377::-;2937:3;2965:39;2998:5;2965:39;:::i;:::-;3020:71;3084:6;3079:3;3020:71;:::i;:::-;3013:78;;3100:65;3158:6;3153:3;3146:4;3139:5;3135:16;3100:65;:::i;:::-;3190:29;3212:6;3190:29;:::i;:::-;3185:3;3181:39;3174:46;;2941:285;2849:377;;;;:::o;3232:313::-;3345:4;3383:2;3372:9;3368:18;3360:26;;3432:9;3426:4;3422:20;3418:1;3407:9;3403:17;3396:47;3460:78;3533:4;3524:6;3460:78;:::i;:::-;3452:86;;3232:313;;;;:::o;3551:126::-;3588:7;3628:42;3621:5;3617:54;3606:65;;3551:126;;;:::o;3683:96::-;3720:7;3749:24;3767:5;3749:24;:::i;:::-;3738:35;;3683:96;;;:::o;3785:118::-;3872:24;3890:5;3872:24;:::i;:::-;3867:3;3860:37;3785:118;;:::o;3909:222::-;4002:4;4040:2;4029:9;4025:18;4017:26;;4053:71;4121:1;4110:9;4106:17;4097:6;4053:71;:::i;:::-;3909:222;;;;:::o;4137:122::-;4210:24;4228:5;4210:24;:::i;:::-;4203:5;4200:35;4190:63;;4249:1;4246;4239:12;4190:63;4137:122;:::o;4265:139::-;4311:5;4349:6;4336:20;4327:29;;4365:33;4392:5;4365:33;:::i;:::-;4265:139;;;;:::o;4410:474::-;4478:6;4486;4535:2;4523:9;4514:7;4510:23;4506:32;4503:119;;;4541:79;;:::i;:::-;4503:119;4661:1;4686:53;4731:7;4722:6;4711:9;4707:22;4686:53;:::i;:::-;4676:63;;4632:117;4788:2;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4759:118;4410:474;;;;;:::o;4890:118::-;4977:24;4995:5;4977:24;:::i;:::-;4972:3;4965:37;4890:118;;:::o;5014:222::-;5107:4;5145:2;5134:9;5130:18;5122:26;;5158:71;5226:1;5215:9;5211:17;5202:6;5158:71;:::i;:::-;5014:222;;;;:::o;5242:619::-;5319:6;5327;5335;5384:2;5372:9;5363:7;5359:23;5355:32;5352:119;;;5390:79;;:::i;:::-;5352:119;5510:1;5535:53;5580:7;5571:6;5560:9;5556:22;5535:53;:::i;:::-;5525:63;;5481:117;5637:2;5663:53;5708:7;5699:6;5688:9;5684:22;5663:53;:::i;:::-;5653:63;;5608:118;5765:2;5791:53;5836:7;5827:6;5816:9;5812:22;5791:53;:::i;:::-;5781:63;;5736:118;5242:619;;;;;:::o;5867:117::-;5976:1;5973;5966:12;5990:117;6099:1;6096;6089:12;6113:180;6161:77;6158:1;6151:88;6258:4;6255:1;6248:15;6282:4;6279:1;6272:15;6299:281;6382:27;6404:4;6382:27;:::i;:::-;6374:6;6370:40;6512:6;6500:10;6497:22;6476:18;6464:10;6461:34;6458:62;6455:88;;;6523:18;;:::i;:::-;6455:88;6563:10;6559:2;6552:22;6342:238;6299:281;;:::o;6586:129::-;6620:6;6647:20;;:::i;:::-;6637:30;;6676:33;6704:4;6696:6;6676:33;:::i;:::-;6586:129;;;:::o;6721:308::-;6783:4;6873:18;6865:6;6862:30;6859:56;;;6895:18;;:::i;:::-;6859:56;6933:29;6955:6;6933:29;:::i;:::-;6925:37;;7017:4;7011;7007:15;6999:23;;6721:308;;;:::o;7035:146::-;7132:6;7127:3;7122;7109:30;7173:1;7164:6;7159:3;7155:16;7148:27;7035:146;;;:::o;7187:425::-;7265:5;7290:66;7306:49;7348:6;7306:49;:::i;:::-;7290:66;:::i;:::-;7281:75;;7379:6;7372:5;7365:21;7417:4;7410:5;7406:16;7455:3;7446:6;7441:3;7437:16;7434:25;7431:112;;;7462:79;;:::i;:::-;7431:112;7552:54;7599:6;7594:3;7589;7552:54;:::i;:::-;7271:341;7187:425;;;;;:::o;7632:340::-;7688:5;7737:3;7730:4;7722:6;7718:17;7714:27;7704:122;;7745:79;;:::i;:::-;7704:122;7862:6;7849:20;7887:79;7962:3;7954:6;7947:4;7939:6;7935:17;7887:79;:::i;:::-;7878:88;;7694:278;7632:340;;;;:::o;7978:509::-;8047:6;8096:2;8084:9;8075:7;8071:23;8067:32;8064:119;;;8102:79;;:::i;:::-;8064:119;8250:1;8239:9;8235:17;8222:31;8280:18;8272:6;8269:30;8266:117;;;8302:79;;:::i;:::-;8266:117;8407:63;8462:7;8453:6;8442:9;8438:22;8407:63;:::i;:::-;8397:73;;8193:287;7978:509;;;;:::o;8493:329::-;8552:6;8601:2;8589:9;8580:7;8576:23;8572:32;8569:119;;;8607:79;;:::i;:::-;8569:119;8727:1;8752:53;8797:7;8788:6;8777:9;8773:22;8752:53;:::i;:::-;8742:63;;8698:117;8493:329;;;;:::o;8828:116::-;8898:21;8913:5;8898:21;:::i;:::-;8891:5;8888:32;8878:60;;8934:1;8931;8924:12;8878:60;8828:116;:::o;8950:133::-;8993:5;9031:6;9018:20;9009:29;;9047:30;9071:5;9047:30;:::i;:::-;8950:133;;;;:::o;9089:468::-;9154:6;9162;9211:2;9199:9;9190:7;9186:23;9182:32;9179:119;;;9217:79;;:::i;:::-;9179:119;9337:1;9362:53;9407:7;9398:6;9387:9;9383:22;9362:53;:::i;:::-;9352:63;;9308:117;9464:2;9490:50;9532:7;9523:6;9512:9;9508:22;9490:50;:::i;:::-;9480:60;;9435:115;9089:468;;;;;:::o;9563:307::-;9624:4;9714:18;9706:6;9703:30;9700:56;;;9736:18;;:::i;:::-;9700:56;9774:29;9796:6;9774:29;:::i;:::-;9766:37;;9858:4;9852;9848:15;9840:23;;9563:307;;;:::o;9876:423::-;9953:5;9978:65;9994:48;10035:6;9994:48;:::i;:::-;9978:65;:::i;:::-;9969:74;;10066:6;10059:5;10052:21;10104:4;10097:5;10093:16;10142:3;10133:6;10128:3;10124:16;10121:25;10118:112;;;10149:79;;:::i;:::-;10118:112;10239:54;10286:6;10281:3;10276;10239:54;:::i;:::-;9959:340;9876:423;;;;;:::o;10318:338::-;10373:5;10422:3;10415:4;10407:6;10403:17;10399:27;10389:122;;10430:79;;:::i;:::-;10389:122;10547:6;10534:20;10572:78;10646:3;10638:6;10631:4;10623:6;10619:17;10572:78;:::i;:::-;10563:87;;10379:277;10318:338;;;;:::o;10662:943::-;10757:6;10765;10773;10781;10830:3;10818:9;10809:7;10805:23;10801:33;10798:120;;;10837:79;;:::i;:::-;10798:120;10957:1;10982:53;11027:7;11018:6;11007:9;11003:22;10982:53;:::i;:::-;10972:63;;10928:117;11084:2;11110:53;11155:7;11146:6;11135:9;11131:22;11110:53;:::i;:::-;11100:63;;11055:118;11212:2;11238:53;11283:7;11274:6;11263:9;11259:22;11238:53;:::i;:::-;11228:63;;11183:118;11368:2;11357:9;11353:18;11340:32;11399:18;11391:6;11388:30;11385:117;;;11421:79;;:::i;:::-;11385:117;11526:62;11580:7;11571:6;11560:9;11556:22;11526:62;:::i;:::-;11516:72;;11311:287;10662:943;;;;;;;:::o;11611:474::-;11679:6;11687;11736:2;11724:9;11715:7;11711:23;11707:32;11704:119;;;11742:79;;:::i;:::-;11704:119;11862:1;11887:53;11932:7;11923:6;11912:9;11908:22;11887:53;:::i;:::-;11877:63;;11833:117;11989:2;12015:53;12060:7;12051:6;12040:9;12036:22;12015:53;:::i;:::-;12005:63;;11960:118;11611:474;;;;;:::o;12091:182::-;12231:34;12227:1;12219:6;12215:14;12208:58;12091:182;:::o;12279:366::-;12421:3;12442:67;12506:2;12501:3;12442:67;:::i;:::-;12435:74;;12518:93;12607:3;12518:93;:::i;:::-;12636:2;12631:3;12627:12;12620:19;;12279:366;;;:::o;12651:419::-;12817:4;12855:2;12844:9;12840:18;12832:26;;12904:9;12898:4;12894:20;12890:1;12879:9;12875:17;12868:47;12932:131;13058:4;12932:131;:::i;:::-;12924:139;;12651:419;;;:::o;13076:180::-;13124:77;13121:1;13114:88;13221:4;13218:1;13211:15;13245:4;13242:1;13235:15;13262:320;13306:6;13343:1;13337:4;13333:12;13323:22;;13390:1;13384:4;13380:12;13411:18;13401:81;;13467:4;13459:6;13455:17;13445:27;;13401:81;13529:2;13521:6;13518:14;13498:18;13495:38;13492:84;;13548:18;;:::i;:::-;13492:84;13313:269;13262:320;;;:::o;13588:232::-;13728:34;13724:1;13716:6;13712:14;13705:58;13797:15;13792:2;13784:6;13780:15;13773:40;13588:232;:::o;13826:366::-;13968:3;13989:67;14053:2;14048:3;13989:67;:::i;:::-;13982:74;;14065:93;14154:3;14065:93;:::i;:::-;14183:2;14178:3;14174:12;14167:19;;13826:366;;;:::o;14198:419::-;14364:4;14402:2;14391:9;14387:18;14379:26;;14451:9;14445:4;14441:20;14437:1;14426:9;14422:17;14415:47;14479:131;14605:4;14479:131;:::i;:::-;14471:139;;14198:419;;;:::o;14623:221::-;14763:34;14759:1;14751:6;14747:14;14740:58;14832:4;14827:2;14819:6;14815:15;14808:29;14623:221;:::o;14850:366::-;14992:3;15013:67;15077:2;15072:3;15013:67;:::i;:::-;15006:74;;15089:93;15178:3;15089:93;:::i;:::-;15207:2;15202:3;15198:12;15191:19;;14850:366;;;:::o;15222:419::-;15388:4;15426:2;15415:9;15411:18;15403:26;;15475:9;15469:4;15465:20;15461:1;15450:9;15446:17;15439:47;15503:131;15629:4;15503:131;:::i;:::-;15495:139;;15222:419;;;:::o;15647:244::-;15787:34;15783:1;15775:6;15771:14;15764:58;15856:27;15851:2;15843:6;15839:15;15832:52;15647:244;:::o;15897:366::-;16039:3;16060:67;16124:2;16119:3;16060:67;:::i;:::-;16053:74;;16136:93;16225:3;16136:93;:::i;:::-;16254:2;16249:3;16245:12;16238:19;;15897:366;;;:::o;16269:419::-;16435:4;16473:2;16462:9;16458:18;16450:26;;16522:9;16516:4;16512:20;16508:1;16497:9;16493:17;16486:47;16550:131;16676:4;16550:131;:::i;:::-;16542:139;;16269:419;;;:::o;16694:176::-;16834:28;16830:1;16822:6;16818:14;16811:52;16694:176;:::o;16876:366::-;17018:3;17039:67;17103:2;17098:3;17039:67;:::i;:::-;17032:74;;17115:93;17204:3;17115:93;:::i;:::-;17233:2;17228:3;17224:12;17217:19;;16876:366;;;:::o;17248:419::-;17414:4;17452:2;17441:9;17437:18;17429:26;;17501:9;17495:4;17491:20;17487:1;17476:9;17472:17;17465:47;17529:131;17655:4;17529:131;:::i;:::-;17521:139;;17248:419;;;:::o;17673:221::-;17813:34;17809:1;17801:6;17797:14;17790:58;17882:4;17877:2;17869:6;17865:15;17858:29;17673:221;:::o;17900:366::-;18042:3;18063:67;18127:2;18122:3;18063:67;:::i;:::-;18056:74;;18139:93;18228:3;18139:93;:::i;:::-;18257:2;18252:3;18248:12;18241:19;;17900:366;;;:::o;18272:419::-;18438:4;18476:2;18465:9;18461:18;18453:26;;18525:9;18519:4;18515:20;18511:1;18500:9;18496:17;18489:47;18553:131;18679:4;18553:131;:::i;:::-;18545:139;;18272:419;;;:::o;18697:233::-;18837:34;18833:1;18825:6;18821:14;18814:58;18906:16;18901:2;18893:6;18889:15;18882:41;18697:233;:::o;18936:366::-;19078:3;19099:67;19163:2;19158:3;19099:67;:::i;:::-;19092:74;;19175:93;19264:3;19175:93;:::i;:::-;19293:2;19288:3;19284:12;19277:19;;18936:366;;;:::o;19308:419::-;19474:4;19512:2;19501:9;19497:18;19489:26;;19561:9;19555:4;19551:20;19547:1;19536:9;19532:17;19525:47;19589:131;19715:4;19589:131;:::i;:::-;19581:139;;19308:419;;;:::o;19733:181::-;19873:33;19869:1;19861:6;19857:14;19850:57;19733:181;:::o;19920:366::-;20062:3;20083:67;20147:2;20142:3;20083:67;:::i;:::-;20076:74;;20159:93;20248:3;20159:93;:::i;:::-;20277:2;20272:3;20268:12;20261:19;;19920:366;;;:::o;20292:419::-;20458:4;20496:2;20485:9;20481:18;20473:26;;20545:9;20539:4;20535:20;20531:1;20520:9;20516:17;20509:47;20573:131;20699:4;20573:131;:::i;:::-;20565:139;;20292:419;;;:::o;20717:161::-;20857:13;20853:1;20845:6;20841:14;20834:37;20717:161;:::o;20884:366::-;21026:3;21047:67;21111:2;21106:3;21047:67;:::i;:::-;21040:74;;21123:93;21212:3;21123:93;:::i;:::-;21241:2;21236:3;21232:12;21225:19;;20884:366;;;:::o;21256:419::-;21422:4;21460:2;21449:9;21445:18;21437:26;;21509:9;21503:4;21499:20;21495:1;21484:9;21480:17;21473:47;21537:131;21663:4;21537:131;:::i;:::-;21529:139;;21256:419;;;:::o;21681:180::-;21729:77;21726:1;21719:88;21826:4;21823:1;21816:15;21850:4;21847:1;21840:15;21867:191;21907:3;21926:20;21944:1;21926:20;:::i;:::-;21921:25;;21960:20;21978:1;21960:20;:::i;:::-;21955:25;;22003:1;22000;21996:9;21989:16;;22024:3;22021:1;22018:10;22015:36;;;22031:18;;:::i;:::-;22015:36;21867:191;;;;:::o;22064:169::-;22204:21;22200:1;22192:6;22188:14;22181:45;22064:169;:::o;22239:366::-;22381:3;22402:67;22466:2;22461:3;22402:67;:::i;:::-;22395:74;;22478:93;22567:3;22478:93;:::i;:::-;22596:2;22591:3;22587:12;22580:19;;22239:366;;;:::o;22611:419::-;22777:4;22815:2;22804:9;22800:18;22792:26;;22864:9;22858:4;22854:20;22850:1;22839:9;22835:17;22828:47;22892:131;23018:4;22892:131;:::i;:::-;22884:139;;22611:419;;;:::o;23036:147::-;23137:11;23174:3;23159:18;;23036:147;;;;:::o;23189:114::-;;:::o;23309:398::-;23468:3;23489:83;23570:1;23565:3;23489:83;:::i;:::-;23482:90;;23581:93;23670:3;23581:93;:::i;:::-;23699:1;23694:3;23690:11;23683:18;;23309:398;;;:::o;23713:379::-;23897:3;23919:147;24062:3;23919:147;:::i;:::-;23912:154;;24083:3;24076:10;;23713:379;;;:::o;24098:222::-;24238:34;24234:1;24226:6;24222:14;24215:58;24307:5;24302:2;24294:6;24290:15;24283:30;24098:222;:::o;24326:366::-;24468:3;24489:67;24553:2;24548:3;24489:67;:::i;:::-;24482:74;;24565:93;24654:3;24565:93;:::i;:::-;24683:2;24678:3;24674:12;24667:19;;24326:366;;;:::o;24698:419::-;24864:4;24902:2;24891:9;24887:18;24879:26;;24951:9;24945:4;24941:20;24937:1;24926:9;24922:17;24915:47;24979:131;25105:4;24979:131;:::i;:::-;24971:139;;24698:419;;;:::o;25123:141::-;25172:4;25195:3;25187:11;;25218:3;25215:1;25208:14;25252:4;25249:1;25239:18;25231:26;;25123:141;;;:::o;25270:93::-;25307:6;25354:2;25349;25342:5;25338:14;25334:23;25324:33;;25270:93;;;:::o;25369:107::-;25413:8;25463:5;25457:4;25453:16;25432:37;;25369:107;;;;:::o;25482:393::-;25551:6;25601:1;25589:10;25585:18;25624:97;25654:66;25643:9;25624:97;:::i;:::-;25742:39;25772:8;25761:9;25742:39;:::i;:::-;25730:51;;25814:4;25810:9;25803:5;25799:21;25790:30;;25863:4;25853:8;25849:19;25842:5;25839:30;25829:40;;25558:317;;25482:393;;;;;:::o;25881:60::-;25909:3;25930:5;25923:12;;25881:60;;;:::o;25947:142::-;25997:9;26030:53;26048:34;26057:24;26075:5;26057:24;:::i;:::-;26048:34;:::i;:::-;26030:53;:::i;:::-;26017:66;;25947:142;;;:::o;26095:75::-;26138:3;26159:5;26152:12;;26095:75;;;:::o;26176:269::-;26286:39;26317:7;26286:39;:::i;:::-;26347:91;26396:41;26420:16;26396:41;:::i;:::-;26388:6;26381:4;26375:11;26347:91;:::i;:::-;26341:4;26334:105;26252:193;26176:269;;;:::o;26451:73::-;26496:3;26451:73;:::o;26530:189::-;26607:32;;:::i;:::-;26648:65;26706:6;26698;26692:4;26648:65;:::i;:::-;26583:136;26530:189;;:::o;26725:186::-;26785:120;26802:3;26795:5;26792:14;26785:120;;;26856:39;26893:1;26886:5;26856:39;:::i;:::-;26829:1;26822:5;26818:13;26809:22;;26785:120;;;26725:186;;:::o;26917:543::-;27018:2;27013:3;27010:11;27007:446;;;27052:38;27084:5;27052:38;:::i;:::-;27136:29;27154:10;27136:29;:::i;:::-;27126:8;27122:44;27319:2;27307:10;27304:18;27301:49;;;27340:8;27325:23;;27301:49;27363:80;27419:22;27437:3;27419:22;:::i;:::-;27409:8;27405:37;27392:11;27363:80;:::i;:::-;27022:431;;27007:446;26917:543;;;:::o;27466:117::-;27520:8;27570:5;27564:4;27560:16;27539:37;;27466:117;;;;:::o;27589:169::-;27633:6;27666:51;27714:1;27710:6;27702:5;27699:1;27695:13;27666:51;:::i;:::-;27662:56;27747:4;27741;27737:15;27727:25;;27640:118;27589:169;;;;:::o;27763:295::-;27839:4;27985:29;28010:3;28004:4;27985:29;:::i;:::-;27977:37;;28047:3;28044:1;28040:11;28034:4;28031:21;28023:29;;27763:295;;;;:::o;28063:1395::-;28180:37;28213:3;28180:37;:::i;:::-;28282:18;28274:6;28271:30;28268:56;;;28304:18;;:::i;:::-;28268:56;28348:38;28380:4;28374:11;28348:38;:::i;:::-;28433:67;28493:6;28485;28479:4;28433:67;:::i;:::-;28527:1;28551:4;28538:17;;28583:2;28575:6;28572:14;28600:1;28595:618;;;;29257:1;29274:6;29271:77;;;29323:9;29318:3;29314:19;29308:26;29299:35;;29271:77;29374:67;29434:6;29427:5;29374:67;:::i;:::-;29368:4;29361:81;29230:222;28565:887;;28595:618;28647:4;28643:9;28635:6;28631:22;28681:37;28713:4;28681:37;:::i;:::-;28740:1;28754:208;28768:7;28765:1;28762:14;28754:208;;;28847:9;28842:3;28838:19;28832:26;28824:6;28817:42;28898:1;28890:6;28886:14;28876:24;;28945:2;28934:9;28930:18;28917:31;;28791:4;28788:1;28784:12;28779:17;;28754:208;;;28990:6;28981:7;28978:19;28975:179;;;29048:9;29043:3;29039:19;29033:26;29091:48;29133:4;29125:6;29121:17;29110:9;29091:48;:::i;:::-;29083:6;29076:64;28998:156;28975:179;29200:1;29196;29188:6;29184:14;29180:22;29174:4;29167:36;28602:611;;;28565:887;;28155:1303;;;28063:1395;;:::o;29464:230::-;29604:34;29600:1;29592:6;29588:14;29581:58;29673:13;29668:2;29660:6;29656:15;29649:38;29464:230;:::o;29700:366::-;29842:3;29863:67;29927:2;29922:3;29863:67;:::i;:::-;29856:74;;29939:93;30028:3;29939:93;:::i;:::-;30057:2;30052:3;30048:12;30041:19;;29700:366;;;:::o;30072:419::-;30238:4;30276:2;30265:9;30261:18;30253:26;;30325:9;30319:4;30315:20;30311:1;30300:9;30296:17;30289:47;30353:131;30479:4;30353:131;:::i;:::-;30345:139;;30072:419;;;:::o;30497:165::-;30637:17;30633:1;30625:6;30621:14;30614:41;30497:165;:::o;30668:366::-;30810:3;30831:67;30895:2;30890:3;30831:67;:::i;:::-;30824:74;;30907:93;30996:3;30907:93;:::i;:::-;31025:2;31020:3;31016:12;31009:19;;30668:366;;;:::o;31040:419::-;31206:4;31244:2;31233:9;31229:18;31221:26;;31293:9;31287:4;31283:20;31279:1;31268:9;31264:17;31257:47;31321:131;31447:4;31321:131;:::i;:::-;31313:139;;31040:419;;;:::o;31465:182::-;31605:34;31601:1;31593:6;31589:14;31582:58;31465:182;:::o;31653:366::-;31795:3;31816:67;31880:2;31875:3;31816:67;:::i;:::-;31809:74;;31892:93;31981:3;31892:93;:::i;:::-;32010:2;32005:3;32001:12;31994:19;;31653:366;;;:::o;32025:419::-;32191:4;32229:2;32218:9;32214:18;32206:26;;32278:9;32272:4;32268:20;32264:1;32253:9;32249:17;32242:47;32306:131;32432:4;32306:131;:::i;:::-;32298:139;;32025:419;;;:::o;32450:233::-;32489:3;32512:24;32530:5;32512:24;:::i;:::-;32503:33;;32558:66;32551:5;32548:77;32545:103;;32628:18;;:::i;:::-;32545:103;32675:1;32668:5;32664:13;32657:20;;32450:233;;;:::o;32689:221::-;32829:34;32825:1;32817:6;32813:14;32806:58;32898:4;32893:2;32885:6;32881:15;32874:29;32689:221;:::o;32916:366::-;33058:3;33079:67;33143:2;33138:3;33079:67;:::i;:::-;33072:74;;33155:93;33244:3;33155:93;:::i;:::-;33273:2;33268:3;33264:12;33257:19;;32916:366;;;:::o;33288:419::-;33454:4;33492:2;33481:9;33477:18;33469:26;;33541:9;33535:4;33531:20;33527:1;33516:9;33512:17;33505:47;33569:131;33695:4;33569:131;:::i;:::-;33561:139;;33288:419;;;:::o;33713:410::-;33753:7;33776:20;33794:1;33776:20;:::i;:::-;33771:25;;33810:20;33828:1;33810:20;:::i;:::-;33805:25;;33865:1;33862;33858:9;33887:30;33905:11;33887:30;:::i;:::-;33876:41;;34066:1;34057:7;34053:15;34050:1;34047:22;34027:1;34020:9;34000:83;33977:139;;34096:18;;:::i;:::-;33977:139;33761:362;33713:410;;;;:::o;34129:176::-;34269:28;34265:1;34257:6;34253:14;34246:52;34129:176;:::o;34311:366::-;34453:3;34474:67;34538:2;34533:3;34474:67;:::i;:::-;34467:74;;34550:93;34639:3;34550:93;:::i;:::-;34668:2;34663:3;34659:12;34652:19;;34311:366;;;:::o;34683:419::-;34849:4;34887:2;34876:9;34872:18;34864:26;;34936:9;34930:4;34926:20;34922:1;34911:9;34907:17;34900:47;34964:131;35090:4;34964:131;:::i;:::-;34956:139;;34683:419;;;:::o;35108:238::-;35248:34;35244:1;35236:6;35232:14;35225:58;35317:21;35312:2;35304:6;35300:15;35293:46;35108:238;:::o;35352:366::-;35494:3;35515:67;35579:2;35574:3;35515:67;:::i;:::-;35508:74;;35591:93;35680:3;35591:93;:::i;:::-;35709:2;35704:3;35700:12;35693:19;;35352:366;;;:::o;35724:419::-;35890:4;35928:2;35917:9;35913:18;35905:26;;35977:9;35971:4;35967:20;35963:1;35952:9;35948:17;35941:47;36005:131;36131:4;36005:131;:::i;:::-;35997:139;;35724:419;;;:::o;36149:220::-;36289:34;36285:1;36277:6;36273:14;36266:58;36358:3;36353:2;36345:6;36341:15;36334:28;36149:220;:::o;36375:366::-;36517:3;36538:67;36602:2;36597:3;36538:67;:::i;:::-;36531:74;;36614:93;36703:3;36614:93;:::i;:::-;36732:2;36727:3;36723:12;36716:19;;36375:366;;;:::o;36747:419::-;36913:4;36951:2;36940:9;36936:18;36928:26;;37000:9;36994:4;36990:20;36986:1;36975:9;36971:17;36964:47;37028:131;37154:4;37028:131;:::i;:::-;37020:139;;36747:419;;;:::o;37172:148::-;37274:11;37311:3;37296:18;;37172:148;;;;:::o;37326:390::-;37432:3;37460:39;37493:5;37460:39;:::i;:::-;37515:89;37597:6;37592:3;37515:89;:::i;:::-;37508:96;;37613:65;37671:6;37666:3;37659:4;37652:5;37648:16;37613:65;:::i;:::-;37703:6;37698:3;37694:16;37687:23;;37436:280;37326:390;;;;:::o;37722:435::-;37902:3;37924:95;38015:3;38006:6;37924:95;:::i;:::-;37917:102;;38036:95;38127:3;38118:6;38036:95;:::i;:::-;38029:102;;38148:3;38141:10;;37722:435;;;;;:::o;38163:225::-;38303:34;38299:1;38291:6;38287:14;38280:58;38372:8;38367:2;38359:6;38355:15;38348:33;38163:225;:::o;38394:366::-;38536:3;38557:67;38621:2;38616:3;38557:67;:::i;:::-;38550:74;;38633:93;38722:3;38633:93;:::i;:::-;38751:2;38746:3;38742:12;38735:19;;38394:366;;;:::o;38766:419::-;38932:4;38970:2;38959:9;38955:18;38947:26;;39019:9;39013:4;39009:20;39005:1;38994:9;38990:17;38983:47;39047:131;39173:4;39047:131;:::i;:::-;39039:139;;38766:419;;;:::o;39191:237::-;39331:34;39327:1;39319:6;39315:14;39308:58;39400:20;39395:2;39387:6;39383:15;39376:45;39191:237;:::o;39434:366::-;39576:3;39597:67;39661:2;39656:3;39597:67;:::i;:::-;39590:74;;39673:93;39762:3;39673:93;:::i;:::-;39791:2;39786:3;39782:12;39775:19;;39434:366;;;:::o;39806:419::-;39972:4;40010:2;39999:9;39995:18;39987:26;;40059:9;40053:4;40049:20;40045:1;40034:9;40030:17;40023:47;40087:131;40213:4;40087:131;:::i;:::-;40079:139;;39806:419;;;:::o;40231:225::-;40371:34;40367:1;40359:6;40355:14;40348:58;40440:8;40435:2;40427:6;40423:15;40416:33;40231:225;:::o;40462:366::-;40604:3;40625:67;40689:2;40684:3;40625:67;:::i;:::-;40618:74;;40701:93;40790:3;40701:93;:::i;:::-;40819:2;40814:3;40810:12;40803:19;;40462:366;;;:::o;40834:419::-;41000:4;41038:2;41027:9;41023:18;41015:26;;41087:9;41081:4;41077:20;41073:1;41062:9;41058:17;41051:47;41115:131;41241:4;41115:131;:::i;:::-;41107:139;;40834:419;;;:::o;41259:224::-;41399:34;41395:1;41387:6;41383:14;41376:58;41468:7;41463:2;41455:6;41451:15;41444:32;41259:224;:::o;41489:366::-;41631:3;41652:67;41716:2;41711:3;41652:67;:::i;:::-;41645:74;;41728:93;41817:3;41728:93;:::i;:::-;41846:2;41841:3;41837:12;41830:19;;41489:366;;;:::o;41861:419::-;42027:4;42065:2;42054:9;42050:18;42042:26;;42114:9;42108:4;42104:20;42100:1;42089:9;42085:17;42078:47;42142:131;42268:4;42142:131;:::i;:::-;42134:139;;41861:419;;;:::o;42286:229::-;42426:34;42422:1;42414:6;42410:14;42403:58;42495:12;42490:2;42482:6;42478:15;42471:37;42286:229;:::o;42521:366::-;42663:3;42684:67;42748:2;42743:3;42684:67;:::i;:::-;42677:74;;42760:93;42849:3;42760:93;:::i;:::-;42878:2;42873:3;42869:12;42862:19;;42521:366;;;:::o;42893:419::-;43059:4;43097:2;43086:9;43082:18;43074:26;;43146:9;43140:4;43136:20;43132:1;43121:9;43117:17;43110:47;43174:131;43300:4;43174:131;:::i;:::-;43166:139;;42893:419;;;:::o;43318:234::-;43458:34;43454:1;43446:6;43442:14;43435:58;43527:17;43522:2;43514:6;43510:15;43503:42;43318:234;:::o;43558:366::-;43700:3;43721:67;43785:2;43780:3;43721:67;:::i;:::-;43714:74;;43797:93;43886:3;43797:93;:::i;:::-;43915:2;43910:3;43906:12;43899:19;;43558:366;;;:::o;43930:419::-;44096:4;44134:2;44123:9;44119:18;44111:26;;44183:9;44177:4;44173:20;44169:1;44158:9;44154:17;44147:47;44211:131;44337:4;44211:131;:::i;:::-;44203:139;;43930:419;;;:::o;44355:98::-;44406:6;44440:5;44434:12;44424:22;;44355:98;;;:::o;44459:168::-;44542:11;44576:6;44571:3;44564:19;44616:4;44611:3;44607:14;44592:29;;44459:168;;;;:::o;44633:373::-;44719:3;44747:38;44779:5;44747:38;:::i;:::-;44801:70;44864:6;44859:3;44801:70;:::i;:::-;44794:77;;44880:65;44938:6;44933:3;44926:4;44919:5;44915:16;44880:65;:::i;:::-;44970:29;44992:6;44970:29;:::i;:::-;44965:3;44961:39;44954:46;;44723:283;44633:373;;;;:::o;45012:640::-;45207:4;45245:3;45234:9;45230:19;45222:27;;45259:71;45327:1;45316:9;45312:17;45303:6;45259:71;:::i;:::-;45340:72;45408:2;45397:9;45393:18;45384:6;45340:72;:::i;:::-;45422;45490:2;45479:9;45475:18;45466:6;45422:72;:::i;:::-;45541:9;45535:4;45531:20;45526:2;45515:9;45511:18;45504:48;45569:76;45640:4;45631:6;45569:76;:::i;:::-;45561:84;;45012:640;;;;;;;:::o;45658:141::-;45714:5;45745:6;45739:13;45730:22;;45761:32;45787:5;45761:32;:::i;:::-;45658:141;;;;:::o;45805:349::-;45874:6;45923:2;45911:9;45902:7;45898:23;45894:32;45891:119;;;45929:79;;:::i;:::-;45891:119;46049:1;46074:63;46129:7;46120:6;46109:9;46105:22;46074:63;:::i;:::-;46064:73;;46020:127;45805:349;;;;:::o;46160:180::-;46208:77;46205:1;46198:88;46305:4;46302:1;46295:15;46329:4;46326:1;46319:15;46346:185;46386:1;46403:20;46421:1;46403:20;:::i;:::-;46398:25;;46437:20;46455:1;46437:20;:::i;:::-;46432:25;;46476:1;46466:35;;46481:18;;:::i;:::-;46466:35;46523:1;46520;46516:9;46511:14;;46346:185;;;;:::o;46537:194::-;46577:4;46597:20;46615:1;46597:20;:::i;:::-;46592:25;;46631:20;46649:1;46631:20;:::i;:::-;46626:25;;46675:1;46672;46668:9;46660:17;;46699:1;46693:4;46690:11;46687:37;;;46704:18;;:::i;:::-;46687:37;46537:194;;;;:::o;46737:176::-;46769:1;46786:20;46804:1;46786:20;:::i;:::-;46781:25;;46820:20;46838:1;46820:20;:::i;:::-;46815:25;;46859:1;46849:35;;46864:18;;:::i;:::-;46849:35;46905:1;46902;46898:9;46893:14;;46737:176;;;;:::o;46919:180::-;46967:77;46964:1;46957:88;47064:4;47061:1;47054:15;47088:4;47085:1;47078:15;47105:220;47245:34;47241:1;47233:6;47229:14;47222:58;47314:3;47309:2;47301:6;47297:15;47290:28;47105:220;:::o;47331:366::-;47473:3;47494:67;47558:2;47553:3;47494:67;:::i;:::-;47487:74;;47570:93;47659:3;47570:93;:::i;:::-;47688:2;47683:3;47679:12;47672:19;;47331:366;;;:::o;47703:419::-;47869:4;47907:2;47896:9;47892:18;47884:26;;47956:9;47950:4;47946:20;47942:1;47931:9;47927:17;47920:47;47984:131;48110:4;47984:131;:::i;:::-;47976:139;;47703:419;;;:::o;48128:227::-;48268:34;48264:1;48256:6;48252:14;48245:58;48337:10;48332:2;48324:6;48320:15;48313:35;48128:227;:::o;48361:366::-;48503:3;48524:67;48588:2;48583:3;48524:67;:::i;:::-;48517:74;;48600:93;48689:3;48600:93;:::i;:::-;48718:2;48713:3;48709:12;48702:19;;48361:366;;;:::o;48733:419::-;48899:4;48937:2;48926:9;48922:18;48914:26;;48986:9;48980:4;48976:20;48972:1;48961:9;48957:17;48950:47;49014:131;49140:4;49014:131;:::i;:::-;49006:139;;48733:419;;;:::o
Swarm Source
ipfs://77746090bc7d9b7626e896ce8c67db0a3b318ba073aaf663f10d780ab66fcf8a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.