Token YAY Bears
Overview ERC-721
Total Supply:
2,535 YBEAR
Holders:
708 addresses
Contract:
Balance
1 YBEAR
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
YayBears
Compiler Version
v0.8.2+commit.661d1103
Contract Source Code (Solidity)
/** *Submitted for verification at Arbiscan.io on 2021-09-07 */ // Sources flattened with hardhat v2.6.2 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // SPDX-License-Identifier: MIT /* YAY BEARS .--. .--. : (\ ". _......_ ." /) : '. ` ` .' /' _ _ `\ / 0} {0 \ | / \ | | /' `\ | \ | . .==. . | / '._ \.' \__/ './ _.' / ``'._-''-_.'`` \ */ 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/access/[email protected] 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); } } // File @openzeppelin/contracts/utils/introspection/[email protected] 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/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File @openzeppelin/contracts/token/ERC721/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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 @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File @openzeppelin/contracts/utils/[email protected] 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/introspection/[email protected] 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/[email protected] pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @title ERC721 Burnable Token * @dev ERC721 Token that can be irreversibly burned (destroyed). */ abstract contract ERC721Burnable is Context, ERC721 { /** * @dev Burns `tokenId`. See {ERC721-_burn}. * * Requirements: * * - The caller must own `tokenId` or be an approved operator. */ function burn(uint256 tokenId) public virtual { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721Burnable: caller is not owner nor approved"); _burn(tokenId); } } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] 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 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File @openzeppelin/contracts/token/ERC721/extensions/[email protected] pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File @openzeppelin/contracts/utils/math/[email protected] pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is no longer needed starting with Solidity 0.8. The compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File @openzeppelin/contracts/security/[email protected] 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; } } // File @openzeppelin/contracts/utils/[email protected] pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File contracts/YayBears.sol pragma solidity >=0.7.0; contract YayBears is Ownable, ERC721Enumerable, ERC721Burnable, ReentrancyGuard { event List(uint256 indexed tokenId, uint256 value); event Delist(uint256 indexed tokenId); using Counters for Counters.Counter; using SafeMath for uint256; Counters.Counter private _tokenIdTracker; uint256 public constant MAX_BEARS = 8085; uint256 public constant MINT_FEE = 0.025 ether; bool public isMarketPlaceOn = true; mapping (uint256 => uint256) public listings; // id to price //Base token URI string public base = "<url>/"; constructor() ERC721("YAY Bears", "YBEAR") { reserveTokens(50); } //Overriding ERC721.sol method for use w/ tokenURI method function _baseURI() internal view override returns(string memory) { return base; } function setBaseTokenURI(string memory _baseTokenURI) public onlyOwner { base = _baseTokenURI; } function mint(uint256 _numBears) public virtual payable { uint256 nextId = _tokenIdTracker.current(); require(_numBears <= 20, "Only 20 bears can be minted at a time"); require(nextId + _numBears <= MAX_BEARS, "Mint amount exceeds supply"); require((msg.value >= MINT_FEE * _numBears && nextId + _numBears <= 1000) || (msg.value >= MINT_FEE * _numBears * 2), "Price not met"); for(uint i = 0; i < _numBears; i++) { _safeMint(msg.sender, _tokenIdTracker.current()); _tokenIdTracker.increment(); } } function reserveTokens(uint256 _reserveAmount) public onlyOwner { for (uint i = 0; i < _reserveAmount; i++) { _safeMint(owner(), _tokenIdTracker.current()); _tokenIdTracker.increment(); } } function withdraw() public onlyOwner { (bool success, ) = owner().call{value: address(this).balance}(""); require(success, "Transfer failed."); } function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override(ERC721, ERC721Enumerable) { super._beforeTokenTransfer(from, to, tokenId); } function supportsInterface(bytes4 interfaceId) public view virtual override(ERC721, ERC721Enumerable) returns (bool) { return super.supportsInterface(interfaceId); } //Modifier to enable/disable marketplace functions modifier marketPlaceFunc { require(isMarketPlaceOn, "Marketplace is disabled"); _; } function toggleMarketPlace() external onlyOwner { isMarketPlaceOn = !isMarketPlaceOn; } //Credit to Ether Phrocks for marketplace functions https://etherscan.io/address/0x23fc142a6ba57a37855d9d52702fda2ec4b4fd53 function listBear(uint256 tokenId, uint256 price) public marketPlaceFunc { require(msg.sender == ownerOf(tokenId), "Must own Bear to sell"); require(price > 0); listings[tokenId] = price; emit List(tokenId, price); } function delistBear(uint256 tokenId) public { require(msg.sender == ownerOf(tokenId), "Must own Bear to delist"); listings[tokenId] = 0; emit Delist(tokenId); } function buyBear(uint256 tokenId) public payable nonReentrant marketPlaceFunc { require(listings[tokenId] > 0, "Bear must be for sale to buy"); require(msg.value >= listings[tokenId], "Must pay enough for Bear"); address oldOwner = ownerOf(tokenId); _transfer(oldOwner, msg.sender, tokenId); listings[tokenId] = 0; (bool success, ) = oldOwner.call{value: msg.value}(""); require(success); } //Delisting on transfer function transferFrom(address from, address to, uint256 tokenId) public override { if(listings[tokenId] != 0) { delistBear(tokenId); } super.transferFrom(from, to, tokenId); } function safeTransferFrom(address from,address to,uint256 tokenId) public override { if(listings[tokenId] != 0) { delistBear(tokenId); } super.safeTransferFrom(from, to, tokenId); } function safeTransferFrom(address from,address to,uint256 tokenId, bytes memory _data) public override { if(listings[tokenId] != 0) { delistBear(tokenId); } super.safeTransferFrom(from, to, tokenId, _data); } }
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":"uint256","name":"tokenId","type":"uint256"}],"name":"Delist","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"List","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_BEARS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MINT_FEE","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":"base","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"buyBear","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"delistBear","outputs":[],"stateMutability":"nonpayable","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":"isMarketPlaceOn","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"uint256","name":"price","type":"uint256"}],"name":"listBear","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"listings","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_numBears","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":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_reserveAmount","type":"uint256"}],"name":"reserveTokens","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_baseTokenURI","type":"string"}],"name":"setBaseTokenURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"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":[],"name":"toggleMarketPlace","outputs":[],"stateMutability":"nonpayable","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":"nonpayable","type":"function"}]
Contract Creation Code
60806040526001600d60006101000a81548160ff0219169083151502179055506040518060400160405280600681526020017f3c75726c3e2f0000000000000000000000000000000000000000000000000000815250600f90805190602001906200006c92919062000de8565b503480156200007a57600080fd5b506040518060400160405280600981526020017f59415920426561727300000000000000000000000000000000000000000000008152506040518060400160405280600581526020017f594245415200000000000000000000000000000000000000000000000000000081525062000107620000fb6200015b60201b60201c565b6200016360201b60201c565b81600190805190602001906200011f92919062000de8565b5080600290805190602001906200013892919062000de8565b5050506001600b819055506200015560326200022760201b60201c565b6200148a565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002376200015b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff166200025d6200032a60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff1614620002b6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620002ad90620010dd565b60405180910390fd5b60005b818110156200032657620002f9620002d66200032a60201b60201c565b620002ed600c6200035360201b62001bef1760201c565b6200036160201b60201c565b62000310600c6200038760201b62001bfd1760201c565b80806200031d906200129a565b915050620002b9565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600081600001549050919050565b620003838282604051806020016040528060008152506200039d60201b60201c565b5050565b6001816000016000828254019250508190555050565b620003af83836200040b60201b60201c565b620003c46000848484620005f160201b60201c565b62000406576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003fd9062001055565b60405180910390fd5b505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156200047e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200047590620010bb565b60405180910390fd5b6200048f81620007ab60201b60201c565b15620004d2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620004c99062001077565b60405180910390fd5b620004e6600083836200081760201b60201c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546200053891906200112c565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b60006200061f8473ffffffffffffffffffffffffffffffffffffffff166200083460201b62001c131760201c565b156200079e578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02620006516200015b60201b60201c565b8786866040518563ffffffff1660e01b815260040162000675949392919062001001565b602060405180830381600087803b1580156200069057600080fd5b505af1925050508015620006c457506040513d601f19601f82011682018060405250810190620006c1919062000eaf565b60015b6200074d573d8060008114620006f7576040519150601f19603f3d011682016040523d82523d6000602084013e620006fc565b606091505b5060008151141562000745576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200073c9062001055565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050620007a3565b600190505b949350505050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b6200082f8383836200084760201b62001c261760201c565b505050565b600080823b905060008111915050919050565b6200085f8383836200098e60201b62001d3a1760201c565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415620008ac57620008a6816200099360201b60201c565b620008f4565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614620008f357620008f28382620009dc60201b60201c565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000941576200093b8162000b5960201b60201c565b62000989565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614620009885762000987828262000ca160201b60201c565b5b5b505050565b505050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001620009f68462000d2d60201b620010e91760201c565b62000a02919062001189565b905060006008600084815260200190815260200160002054905081811462000ae8576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160098054905062000b6f919062001189565b90506000600a600084815260200190815260200160002054905060006009838154811062000bc6577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806009838154811062000c0f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a600085815260200190815260200160002060009055600980548062000c85577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600062000cb98362000d2d60201b620010e91760201c565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141562000da1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000d989062001099565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b82805462000df69062001264565b90600052602060002090601f01602090048101928262000e1a576000855562000e66565b82601f1062000e3557805160ff191683800117855562000e66565b8280016001018555821562000e66579182015b8281111562000e6557825182559160200191906001019062000e48565b5b50905062000e75919062000e79565b5090565b5b8082111562000e9457600081600090555060010162000e7a565b5090565b60008151905062000ea98162001470565b92915050565b60006020828403121562000ec257600080fd5b600062000ed28482850162000e98565b91505092915050565b62000ee681620011c4565b82525050565b600062000ef982620010ff565b62000f0581856200110a565b935062000f178185602086016200122e565b62000f228162001346565b840191505092915050565b600062000f3c6032836200111b565b915062000f498262001357565b604082019050919050565b600062000f63601c836200111b565b915062000f7082620013a6565b602082019050919050565b600062000f8a602a836200111b565b915062000f9782620013cf565b604082019050919050565b600062000fb16020836200111b565b915062000fbe826200141e565b602082019050919050565b600062000fd86020836200111b565b915062000fe58262001447565b602082019050919050565b62000ffb8162001224565b82525050565b600060808201905062001018600083018762000edb565b62001027602083018662000edb565b62001036604083018562000ff0565b81810360608301526200104a818462000eec565b905095945050505050565b60006020820190508181036000830152620010708162000f2d565b9050919050565b60006020820190508181036000830152620010928162000f54565b9050919050565b60006020820190508181036000830152620010b48162000f7b565b9050919050565b60006020820190508181036000830152620010d68162000fa2565b9050919050565b60006020820190508181036000830152620010f88162000fc9565b9050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b6000620011398262001224565b9150620011468362001224565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156200117e576200117d620012e8565b5b828201905092915050565b6000620011968262001224565b9150620011a38362001224565b925082821015620011b957620011b8620012e8565b5b828203905092915050565b6000620011d18262001204565b9050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60005b838110156200124e57808201518184015260208101905062001231565b838111156200125e576000848401525b50505050565b600060028204905060018216806200127d57607f821691505b6020821081141562001294576200129362001317565b5b50919050565b6000620012a78262001224565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415620012dd57620012dc620012e8565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6200147b81620011d8565b81146200148757600080fd5b50565b614a05806200149a6000396000f3fe6080604052600436106101ee5760003560e01c80636d0186301161010d578063b13d6a4e116100a0578063d7bf81a31161006f578063d7bf81a3146106b7578063da649ed7146106e2578063de74e57b1461070d578063e985e9c51461074a578063f2fde38b14610787576101ee565b8063b13d6a4e146105ff578063b88d4fde14610628578063c87b56dd14610651578063d031370b1461068e576101ee565b80638da5cb5b116100dc5780638da5cb5b1461056457806395d89b411461058f578063a0712d68146105ba578063a22cb465146105d6576101ee565b80636d018630146104c957806370a08231146104f457806370e8c5ea14610531578063715018a61461054d576101ee565b80632f745c591161018557806342966c681161015457806342966c68146103fb5780634f6ccce7146104245780635001f3b5146104615780636352211e1461048c576101ee565b80632f745c591461035557806330176e13146103925780633ccfd60b146103bb57806342842e0e146103d2576101ee565b80630fde47b1116101c15780630fde47b1146102c157806318160ddd146102ea57806318c6dcb01461031557806323b872dd1461032c576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906133a7565b6107b0565b6040516102279190613a29565b60405180910390f35b34801561023c57600080fd5b506102456107c2565b6040516102529190613a44565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061343a565b610854565b60405161028f91906139c2565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba919061336b565b6108d9565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613463565b6109f1565b005b3480156102f657600080fd5b506102ff610b17565b60405161030c9190613e06565b60405180910390f35b34801561032157600080fd5b5061032a610b24565b005b34801561033857600080fd5b50610353600480360381019061034e9190613265565b610bcc565b005b34801561036157600080fd5b5061037c6004803603810190610377919061336b565b610c01565b6040516103899190613e06565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906133f9565b610ca6565b005b3480156103c757600080fd5b506103d0610d3c565b005b3480156103de57600080fd5b506103f960048036038101906103f49190613265565b610e6e565b005b34801561040757600080fd5b50610422600480360381019061041d919061343a565b610ea3565b005b34801561043057600080fd5b5061044b6004803603810190610446919061343a565b610eff565b6040516104589190613e06565b60405180910390f35b34801561046d57600080fd5b50610476610f96565b6040516104839190613a44565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae919061343a565b611024565b6040516104c091906139c2565b60405180910390f35b3480156104d557600080fd5b506104de6110d6565b6040516104eb9190613a29565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613200565b6110e9565b6040516105289190613e06565b60405180910390f35b61054b6004803603810190610546919061343a565b6111a1565b005b34801561055957600080fd5b5061056261139e565b005b34801561057057600080fd5b50610579611426565b60405161058691906139c2565b60405180910390f35b34801561059b57600080fd5b506105a461144f565b6040516105b19190613a44565b60405180910390f35b6105d460048036038101906105cf919061343a565b6114e1565b005b3480156105e257600080fd5b506105fd60048036038101906105f8919061332f565b61165a565b005b34801561060b57600080fd5b506106266004803603810190610621919061343a565b6117db565b005b34801561063457600080fd5b5061064f600480360381019061064a91906132b4565b61189a565b005b34801561065d57600080fd5b506106786004803603810190610673919061343a565b6118d1565b6040516106859190613a44565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b0919061343a565b611978565b005b3480156106c357600080fd5b506106cc611a3a565b6040516106d99190613e06565b60405180910390f35b3480156106ee57600080fd5b506106f7611a45565b6040516107049190613e06565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061343a565b611a4b565b6040516107419190613e06565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190613229565b611a63565b60405161077e9190613a29565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613200565b611af7565b005b60006107bb82611d3f565b9050919050565b6060600180546107d1906140c1565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd906140c1565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b600061085f82611db9565b61089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613c26565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e482611024565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90613ce6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610974611e25565b73ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28161099d611e25565b611a63565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990613ba6565b60405180910390fd5b6109ec8383611e2d565b505050565b600d60009054906101000a900460ff16610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790613d06565b60405180910390fd5b610a4982611024565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90613b66565b60405180910390fd5b60008111610ac357600080fd5b80600e600084815260200190815260200160002081905550817fc38e7832a23e5e13678e20a3184751ed5c3a1a74483e4f70f5e172e3b4ce5ac382604051610b0b9190613e06565b60405180910390a25050565b6000600980549050905090565b610b2c611e25565b73ffffffffffffffffffffffffffffffffffffffff16610b4a611426565b73ffffffffffffffffffffffffffffffffffffffff1614610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790613c46565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000600e60008381526020019081526020016000205414610bf157610bf0816117db565b5b610bfc838383611ee6565b505050565b6000610c0c836110e9565b8210610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613aa6565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cae611e25565b73ffffffffffffffffffffffffffffffffffffffff16610ccc611426565b73ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613c46565b60405180910390fd5b80600f9080519060200190610d38929190613024565b5050565b610d44611e25565b73ffffffffffffffffffffffffffffffffffffffff16610d62611426565b73ffffffffffffffffffffffffffffffffffffffff1614610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90613c46565b60405180910390fd5b6000610dc2611426565b73ffffffffffffffffffffffffffffffffffffffff1647604051610de5906139ad565b60006040518083038185875af1925050503d8060008114610e22576040519150601f19603f3d011682016040523d82523d6000602084013e610e27565b606091505b5050905080610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613d26565b60405180910390fd5b50565b6000600e60008381526020019081526020016000205414610e9357610e92816117db565b5b610e9e838383611f46565b505050565b610eb4610eae611e25565b82611f66565b610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613de6565b60405180910390fd5b610efc81612044565b50565b6000610f09610b17565b8210610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613d66565b60405180910390fd5b60098281548110610f84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600f8054610fa3906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcf906140c1565b801561101c5780601f10610ff15761010080835404028352916020019161101c565b820191906000526020600020905b815481529060010190602001808311610fff57829003601f168201915b505050505081565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490613be6565b60405180910390fd5b80915050919050565b600d60009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613bc6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6002600b5414156111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613dc6565b60405180910390fd5b6002600b81905550600d60009054906101000a900460ff1661123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613d06565b60405180910390fd5b6000600e60008381526020019081526020016000205411611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613c86565b60405180910390fd5b600e6000828152602001908152602001600020543410156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613da6565b60405180910390fd5b60006112f582611024565b9050611302813384612155565b6000600e60008481526020019081526020016000208190555060008173ffffffffffffffffffffffffffffffffffffffff1634604051611341906139ad565b60006040518083038185875af1925050503d806000811461137e576040519150601f19603f3d011682016040523d82523d6000602084013e611383565b606091505b505090508061139157600080fd5b50506001600b8190555050565b6113a6611e25565b73ffffffffffffffffffffffffffffffffffffffff166113c4611426565b73ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190613c46565b60405180910390fd5b61142460006123b1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461145e906140c1565b80601f016020809104026020016040519081016040528092919081815260200182805461148a906140c1565b80156114d75780601f106114ac576101008083540402835291602001916114d7565b820191906000526020600020905b8154815290600101906020018083116114ba57829003601f168201915b5050505050905090565b60006114ed600c611bef565b90506014821115611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a90613a66565b60405180910390fd5b611f9582826115429190613ef6565b1115611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613d86565b60405180910390fd5b816658d15e176280006115969190613f7d565b34101580156115b257506103e882826115af9190613ef6565b11155b806115db57506002826658d15e176280006115cd9190613f7d565b6115d79190613f7d565b3410155b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613c66565b60405180910390fd5b60005b828110156116555761163833611633600c611bef565b612475565b611642600c611bfd565b808061164d90614124565b91505061161d565b505050565b611662611e25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613b46565b60405180910390fd5b80600660006116dd611e25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178a611e25565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117cf9190613a29565b60405180910390a35050565b6117e481611024565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890613a86565b60405180910390fd5b6000600e600083815260200190815260200160002081905550807f2c525dc2c086b9a2f3b902d229853b5b838fcedc22933c40ed7ebe4890a53a8260405160405180910390a250565b6000600e600084815260200190815260200160002054146118bf576118be826117db565b5b6118cb84848484612493565b50505050565b60606118dc82611db9565b61191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613cc6565b60405180910390fd5b60006119256124f5565b905060008151116119455760405180602001604052806000815250611970565b8061194f84612587565b604051602001611960929190613989565b6040516020818303038152906040525b915050919050565b611980611e25565b73ffffffffffffffffffffffffffffffffffffffff1661199e611426565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90613c46565b60405180910390fd5b60005b81811015611a3657611a19611a0a611426565b611a14600c611bef565b612475565b611a23600c611bfd565b8080611a2e90614124565b9150506119f7565b5050565b6658d15e1762800081565b611f9581565b600e6020528060005260406000206000915090505481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aff611e25565b73ffffffffffffffffffffffffffffffffffffffff16611b1d611426565b73ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613c46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90613ae6565b60405180910390fd5b611bec816123b1565b50565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b611c31838383611d3a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c7457611c6f81612734565b611cb3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cb257611cb1838261277d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf657611cf1816128ea565b611d35565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d3457611d338282612a2d565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611db25750611db182612aac565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ea083611024565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611ef7611ef1611e25565b82611f66565b611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d90613d46565b60405180910390fd5b611f41838383612155565b505050565b611f618383836040518060200160405280600081525061189a565b505050565b6000611f7182611db9565b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613b86565b60405180910390fd5b6000611fbb83611024565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061202a57508373ffffffffffffffffffffffffffffffffffffffff1661201284610854565b73ffffffffffffffffffffffffffffffffffffffff16145b8061203b575061203a8185611a63565b5b91505092915050565b600061204f82611024565b905061205d81600084612b8e565b612068600083611e2d565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b89190613fd7565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8273ffffffffffffffffffffffffffffffffffffffff1661217582611024565b73ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290613ca6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290613b26565b60405180910390fd5b612246838383612b8e565b612251600082611e2d565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a19190613fd7565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f89190613ef6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61248f828260405180602001604052806000815250612b9e565b5050565b6124a461249e611e25565b83611f66565b6124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90613d46565b60405180910390fd5b6124ef84848484612bf9565b50505050565b6060600f8054612504906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612530906140c1565b801561257d5780601f106125525761010080835404028352916020019161257d565b820191906000526020600020905b81548152906001019060200180831161256057829003601f168201915b5050505050905090565b606060008214156125cf576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061272f565b600082905060005b600082146126015780806125ea90614124565b915050600a826125fa9190613f4c565b91506125d7565b60008167ffffffffffffffff811115612643577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126755781602001600182028036833780820191505090505b5090505b600085146127285760018261268e9190613fd7565b9150600a8561269d919061416d565b60306126a99190613ef6565b60f81b8183815181106126e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127219190613f4c565b9450612679565b8093505050505b919050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161278a846110e9565b6127949190613fd7565b9050600060086000848152602001908152602001600020549050818114612879576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506128fe9190613fd7565b90506000600a6000848152602001908152602001600020549050600060098381548110612954577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806009838154811061299c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612a11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612a38836110e9565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612b875750612b8682612c55565b5b9050919050565b612b99838383611c26565b505050565b612ba88383612cbf565b612bb56000848484612e8d565b612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90613ac6565b60405180910390fd5b505050565b612c04848484612155565b612c1084848484612e8d565b612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690613ac6565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690613c06565b60405180910390fd5b612d3881611db9565b15612d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6f90613b06565b60405180910390fd5b612d8460008383612b8e565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dd49190613ef6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612eae8473ffffffffffffffffffffffffffffffffffffffff16611c13565b15613017578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ed7611e25565b8786866040518563ffffffff1660e01b8152600401612ef994939291906139dd565b602060405180830381600087803b158015612f1357600080fd5b505af1925050508015612f4457506040513d601f19601f82011682018060405250810190612f4191906133d0565b60015b612fc7573d8060008114612f74576040519150601f19603f3d011682016040523d82523d6000602084013e612f79565b606091505b50600081511415612fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb690613ac6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061301c565b600190505b949350505050565b828054613030906140c1565b90600052602060002090601f0160209004810192826130525760008555613099565b82601f1061306b57805160ff1916838001178555613099565b82800160010185558215613099579182015b8281111561309857825182559160200191906001019061307d565b5b5090506130a691906130aa565b5090565b5b808211156130c35760008160009055506001016130ab565b5090565b60006130da6130d584613e46565b613e21565b9050828152602081018484840111156130f257600080fd5b6130fd84828561407f565b509392505050565b600061311861311384613e77565b613e21565b90508281526020810184848401111561313057600080fd5b61313b84828561407f565b509392505050565b60008135905061315281614973565b92915050565b6000813590506131678161498a565b92915050565b60008135905061317c816149a1565b92915050565b600081519050613191816149a1565b92915050565b600082601f8301126131a857600080fd5b81356131b88482602086016130c7565b91505092915050565b600082601f8301126131d257600080fd5b81356131e2848260208601613105565b91505092915050565b6000813590506131fa816149b8565b92915050565b60006020828403121561321257600080fd5b600061322084828501613143565b91505092915050565b6000806040838503121561323c57600080fd5b600061324a85828601613143565b925050602061325b85828601613143565b9150509250929050565b60008060006060848603121561327a57600080fd5b600061328886828701613143565b935050602061329986828701613143565b92505060406132aa868287016131eb565b9150509250925092565b600080600080608085870312156132ca57600080fd5b60006132d887828801613143565b94505060206132e987828801613143565b93505060406132fa878288016131eb565b925050606085013567ffffffffffffffff81111561331757600080fd5b61332387828801613197565b91505092959194509250565b6000806040838503121561334257600080fd5b600061335085828601613143565b925050602061336185828601613158565b9150509250929050565b6000806040838503121561337e57600080fd5b600061338c85828601613143565b925050602061339d858286016131eb565b9150509250929050565b6000602082840312156133b957600080fd5b60006133c78482850161316d565b91505092915050565b6000602082840312156133e257600080fd5b60006133f084828501613182565b91505092915050565b60006020828403121561340b57600080fd5b600082013567ffffffffffffffff81111561342557600080fd5b613431848285016131c1565b91505092915050565b60006020828403121561344c57600080fd5b600061345a848285016131eb565b91505092915050565b6000806040838503121561347657600080fd5b6000613484858286016131eb565b9250506020613495858286016131eb565b9150509250929050565b6134a88161400b565b82525050565b6134b78161401d565b82525050565b60006134c882613ea8565b6134d28185613ebe565b93506134e281856020860161408e565b6134eb8161425a565b840191505092915050565b600061350182613eb3565b61350b8185613eda565b935061351b81856020860161408e565b6135248161425a565b840191505092915050565b600061353a82613eb3565b6135448185613eeb565b935061355481856020860161408e565b80840191505092915050565b600061356d602583613eda565b91506135788261426b565b604082019050919050565b6000613590601783613eda565b915061359b826142ba565b602082019050919050565b60006135b3602b83613eda565b91506135be826142e3565b604082019050919050565b60006135d6603283613eda565b91506135e182614332565b604082019050919050565b60006135f9602683613eda565b915061360482614381565b604082019050919050565b600061361c601c83613eda565b9150613627826143d0565b602082019050919050565b600061363f602483613eda565b915061364a826143f9565b604082019050919050565b6000613662601983613eda565b915061366d82614448565b602082019050919050565b6000613685601583613eda565b915061369082614471565b602082019050919050565b60006136a8602c83613eda565b91506136b38261449a565b604082019050919050565b60006136cb603883613eda565b91506136d6826144e9565b604082019050919050565b60006136ee602a83613eda565b91506136f982614538565b604082019050919050565b6000613711602983613eda565b915061371c82614587565b604082019050919050565b6000613734602083613eda565b915061373f826145d6565b602082019050919050565b6000613757602c83613eda565b9150613762826145ff565b604082019050919050565b600061377a602083613eda565b91506137858261464e565b602082019050919050565b600061379d600d83613eda565b91506137a882614677565b602082019050919050565b60006137c0601c83613eda565b91506137cb826146a0565b602082019050919050565b60006137e3602983613eda565b91506137ee826146c9565b604082019050919050565b6000613806602f83613eda565b915061381182614718565b604082019050919050565b6000613829602183613eda565b915061383482614767565b604082019050919050565b600061384c601783613eda565b9150613857826147b6565b602082019050919050565b600061386f600083613ecf565b915061387a826147df565b600082019050919050565b6000613892601083613eda565b915061389d826147e2565b602082019050919050565b60006138b5603183613eda565b91506138c08261480b565b604082019050919050565b60006138d8602c83613eda565b91506138e38261485a565b604082019050919050565b60006138fb601a83613eda565b9150613906826148a9565b602082019050919050565b600061391e601883613eda565b9150613929826148d2565b602082019050919050565b6000613941601f83613eda565b915061394c826148fb565b602082019050919050565b6000613964603083613eda565b915061396f82614924565b604082019050919050565b61398381614075565b82525050565b6000613995828561352f565b91506139a1828461352f565b91508190509392505050565b60006139b882613862565b9150819050919050565b60006020820190506139d7600083018461349f565b92915050565b60006080820190506139f2600083018761349f565b6139ff602083018661349f565b613a0c604083018561397a565b8181036060830152613a1e81846134bd565b905095945050505050565b6000602082019050613a3e60008301846134ae565b92915050565b60006020820190508181036000830152613a5e81846134f6565b905092915050565b60006020820190508181036000830152613a7f81613560565b9050919050565b60006020820190508181036000830152613a9f81613583565b9050919050565b60006020820190508181036000830152613abf816135a6565b9050919050565b60006020820190508181036000830152613adf816135c9565b9050919050565b60006020820190508181036000830152613aff816135ec565b9050919050565b60006020820190508181036000830152613b1f8161360f565b9050919050565b60006020820190508181036000830152613b3f81613632565b9050919050565b60006020820190508181036000830152613b5f81613655565b9050919050565b60006020820190508181036000830152613b7f81613678565b9050919050565b60006020820190508181036000830152613b9f8161369b565b9050919050565b60006020820190508181036000830152613bbf816136be565b9050919050565b60006020820190508181036000830152613bdf816136e1565b9050919050565b60006020820190508181036000830152613bff81613704565b9050919050565b60006020820190508181036000830152613c1f81613727565b9050919050565b60006020820190508181036000830152613c3f8161374a565b9050919050565b60006020820190508181036000830152613c5f8161376d565b9050919050565b60006020820190508181036000830152613c7f81613790565b9050919050565b60006020820190508181036000830152613c9f816137b3565b9050919050565b60006020820190508181036000830152613cbf816137d6565b9050919050565b60006020820190508181036000830152613cdf816137f9565b9050919050565b60006020820190508181036000830152613cff8161381c565b9050919050565b60006020820190508181036000830152613d1f8161383f565b9050919050565b60006020820190508181036000830152613d3f81613885565b9050919050565b60006020820190508181036000830152613d5f816138a8565b9050919050565b60006020820190508181036000830152613d7f816138cb565b9050919050565b60006020820190508181036000830152613d9f816138ee565b9050919050565b60006020820190508181036000830152613dbf81613911565b9050919050565b60006020820190508181036000830152613ddf81613934565b9050919050565b60006020820190508181036000830152613dff81613957565b9050919050565b6000602082019050613e1b600083018461397a565b92915050565b6000613e2b613e3c565b9050613e3782826140f3565b919050565b6000604051905090565b600067ffffffffffffffff821115613e6157613e6061422b565b5b613e6a8261425a565b9050602081019050919050565b600067ffffffffffffffff821115613e9257613e9161422b565b5b613e9b8261425a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f0182614075565b9150613f0c83614075565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f4157613f4061419e565b5b828201905092915050565b6000613f5782614075565b9150613f6283614075565b925082613f7257613f716141cd565b5b828204905092915050565b6000613f8882614075565b9150613f9383614075565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fcc57613fcb61419e565b5b828202905092915050565b6000613fe282614075565b9150613fed83614075565b92508282101561400057613fff61419e565b5b828203905092915050565b600061401682614055565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140ac578082015181840152602081019050614091565b838111156140bb576000848401525b50505050565b600060028204905060018216806140d957607f821691505b602082108114156140ed576140ec6141fc565b5b50919050565b6140fc8261425a565b810181811067ffffffffffffffff8211171561411b5761411a61422b565b5b80604052505050565b600061412f82614075565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141625761416161419e565b5b600182019050919050565b600061417882614075565b915061418383614075565b925082614193576141926141cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f6e6c792032302062656172732063616e206265206d696e746564206174206160008201527f2074696d65000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206f776e204265617220746f2064656c697374000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206f776e204265617220746f2073656c6c0000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5072696365206e6f74206d657400000000000000000000000000000000000000600082015250565b7f42656172206d75737420626520666f722073616c6520746f2062757900000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61726b6574706c6163652069732064697361626c6564000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e74206578636565647320737570706c79000000000000600082015250565b7f4d7573742070617920656e6f75676820666f7220426561720000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b61497c8161400b565b811461498757600080fd5b50565b6149938161401d565b811461499e57600080fd5b50565b6149aa81614029565b81146149b557600080fd5b50565b6149c181614075565b81146149cc57600080fd5b5056fea2646970667358221220ef14b51fafa75cd1348c04e0f20b76f19ec3292af00e5e245f08ad4695b4a3b964736f6c63430008020033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c80636d0186301161010d578063b13d6a4e116100a0578063d7bf81a31161006f578063d7bf81a3146106b7578063da649ed7146106e2578063de74e57b1461070d578063e985e9c51461074a578063f2fde38b14610787576101ee565b8063b13d6a4e146105ff578063b88d4fde14610628578063c87b56dd14610651578063d031370b1461068e576101ee565b80638da5cb5b116100dc5780638da5cb5b1461056457806395d89b411461058f578063a0712d68146105ba578063a22cb465146105d6576101ee565b80636d018630146104c957806370a08231146104f457806370e8c5ea14610531578063715018a61461054d576101ee565b80632f745c591161018557806342966c681161015457806342966c68146103fb5780634f6ccce7146104245780635001f3b5146104615780636352211e1461048c576101ee565b80632f745c591461035557806330176e13146103925780633ccfd60b146103bb57806342842e0e146103d2576101ee565b80630fde47b1116101c15780630fde47b1146102c157806318160ddd146102ea57806318c6dcb01461031557806323b872dd1461032c576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906133a7565b6107b0565b6040516102279190613a29565b60405180910390f35b34801561023c57600080fd5b506102456107c2565b6040516102529190613a44565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d919061343a565b610854565b60405161028f91906139c2565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba919061336b565b6108d9565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613463565b6109f1565b005b3480156102f657600080fd5b506102ff610b17565b60405161030c9190613e06565b60405180910390f35b34801561032157600080fd5b5061032a610b24565b005b34801561033857600080fd5b50610353600480360381019061034e9190613265565b610bcc565b005b34801561036157600080fd5b5061037c6004803603810190610377919061336b565b610c01565b6040516103899190613e06565b60405180910390f35b34801561039e57600080fd5b506103b960048036038101906103b491906133f9565b610ca6565b005b3480156103c757600080fd5b506103d0610d3c565b005b3480156103de57600080fd5b506103f960048036038101906103f49190613265565b610e6e565b005b34801561040757600080fd5b50610422600480360381019061041d919061343a565b610ea3565b005b34801561043057600080fd5b5061044b6004803603810190610446919061343a565b610eff565b6040516104589190613e06565b60405180910390f35b34801561046d57600080fd5b50610476610f96565b6040516104839190613a44565b60405180910390f35b34801561049857600080fd5b506104b360048036038101906104ae919061343a565b611024565b6040516104c091906139c2565b60405180910390f35b3480156104d557600080fd5b506104de6110d6565b6040516104eb9190613a29565b60405180910390f35b34801561050057600080fd5b5061051b60048036038101906105169190613200565b6110e9565b6040516105289190613e06565b60405180910390f35b61054b6004803603810190610546919061343a565b6111a1565b005b34801561055957600080fd5b5061056261139e565b005b34801561057057600080fd5b50610579611426565b60405161058691906139c2565b60405180910390f35b34801561059b57600080fd5b506105a461144f565b6040516105b19190613a44565b60405180910390f35b6105d460048036038101906105cf919061343a565b6114e1565b005b3480156105e257600080fd5b506105fd60048036038101906105f8919061332f565b61165a565b005b34801561060b57600080fd5b506106266004803603810190610621919061343a565b6117db565b005b34801561063457600080fd5b5061064f600480360381019061064a91906132b4565b61189a565b005b34801561065d57600080fd5b506106786004803603810190610673919061343a565b6118d1565b6040516106859190613a44565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b0919061343a565b611978565b005b3480156106c357600080fd5b506106cc611a3a565b6040516106d99190613e06565b60405180910390f35b3480156106ee57600080fd5b506106f7611a45565b6040516107049190613e06565b60405180910390f35b34801561071957600080fd5b50610734600480360381019061072f919061343a565b611a4b565b6040516107419190613e06565b60405180910390f35b34801561075657600080fd5b50610771600480360381019061076c9190613229565b611a63565b60405161077e9190613a29565b60405180910390f35b34801561079357600080fd5b506107ae60048036038101906107a99190613200565b611af7565b005b60006107bb82611d3f565b9050919050565b6060600180546107d1906140c1565b80601f01602080910402602001604051908101604052809291908181526020018280546107fd906140c1565b801561084a5780601f1061081f5761010080835404028352916020019161084a565b820191906000526020600020905b81548152906001019060200180831161082d57829003601f168201915b5050505050905090565b600061085f82611db9565b61089e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161089590613c26565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108e482611024565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610955576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161094c90613ce6565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610974611e25565b73ffffffffffffffffffffffffffffffffffffffff1614806109a357506109a28161099d611e25565b611a63565b5b6109e2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109d990613ba6565b60405180910390fd5b6109ec8383611e2d565b505050565b600d60009054906101000a900460ff16610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790613d06565b60405180910390fd5b610a4982611024565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610ab6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aad90613b66565b60405180910390fd5b60008111610ac357600080fd5b80600e600084815260200190815260200160002081905550817fc38e7832a23e5e13678e20a3184751ed5c3a1a74483e4f70f5e172e3b4ce5ac382604051610b0b9190613e06565b60405180910390a25050565b6000600980549050905090565b610b2c611e25565b73ffffffffffffffffffffffffffffffffffffffff16610b4a611426565b73ffffffffffffffffffffffffffffffffffffffff1614610ba0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9790613c46565b60405180910390fd5b600d60009054906101000a900460ff1615600d60006101000a81548160ff021916908315150217905550565b6000600e60008381526020019081526020016000205414610bf157610bf0816117db565b5b610bfc838383611ee6565b505050565b6000610c0c836110e9565b8210610c4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c4490613aa6565b60405180910390fd5b600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610cae611e25565b73ffffffffffffffffffffffffffffffffffffffff16610ccc611426565b73ffffffffffffffffffffffffffffffffffffffff1614610d22576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1990613c46565b60405180910390fd5b80600f9080519060200190610d38929190613024565b5050565b610d44611e25565b73ffffffffffffffffffffffffffffffffffffffff16610d62611426565b73ffffffffffffffffffffffffffffffffffffffff1614610db8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610daf90613c46565b60405180910390fd5b6000610dc2611426565b73ffffffffffffffffffffffffffffffffffffffff1647604051610de5906139ad565b60006040518083038185875af1925050503d8060008114610e22576040519150601f19603f3d011682016040523d82523d6000602084013e610e27565b606091505b5050905080610e6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e6290613d26565b60405180910390fd5b50565b6000600e60008381526020019081526020016000205414610e9357610e92816117db565b5b610e9e838383611f46565b505050565b610eb4610eae611e25565b82611f66565b610ef3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610eea90613de6565b60405180910390fd5b610efc81612044565b50565b6000610f09610b17565b8210610f4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4190613d66565b60405180910390fd5b60098281548110610f84577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b600f8054610fa3906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054610fcf906140c1565b801561101c5780601f10610ff15761010080835404028352916020019161101c565b820191906000526020600020905b815481529060010190602001808311610fff57829003601f168201915b505050505081565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156110cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110c490613be6565b60405180910390fd5b80915050919050565b600d60009054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561115a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161115190613bc6565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6002600b5414156111e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111de90613dc6565b60405180910390fd5b6002600b81905550600d60009054906101000a900460ff1661123e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123590613d06565b60405180910390fd5b6000600e60008381526020019081526020016000205411611294576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161128b90613c86565b60405180910390fd5b600e6000828152602001908152602001600020543410156112ea576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112e190613da6565b60405180910390fd5b60006112f582611024565b9050611302813384612155565b6000600e60008481526020019081526020016000208190555060008173ffffffffffffffffffffffffffffffffffffffff1634604051611341906139ad565b60006040518083038185875af1925050503d806000811461137e576040519150601f19603f3d011682016040523d82523d6000602084013e611383565b606091505b505090508061139157600080fd5b50506001600b8190555050565b6113a6611e25565b73ffffffffffffffffffffffffffffffffffffffff166113c4611426565b73ffffffffffffffffffffffffffffffffffffffff161461141a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161141190613c46565b60405180910390fd5b61142460006123b1565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606002805461145e906140c1565b80601f016020809104026020016040519081016040528092919081815260200182805461148a906140c1565b80156114d75780601f106114ac576101008083540402835291602001916114d7565b820191906000526020600020905b8154815290600101906020018083116114ba57829003601f168201915b5050505050905090565b60006114ed600c611bef565b90506014821115611533576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152a90613a66565b60405180910390fd5b611f9582826115429190613ef6565b1115611583576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161157a90613d86565b60405180910390fd5b816658d15e176280006115969190613f7d565b34101580156115b257506103e882826115af9190613ef6565b11155b806115db57506002826658d15e176280006115cd9190613f7d565b6115d79190613f7d565b3410155b61161a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161190613c66565b60405180910390fd5b60005b828110156116555761163833611633600c611bef565b612475565b611642600c611bfd565b808061164d90614124565b91505061161d565b505050565b611662611e25565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156116d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c790613b46565b60405180910390fd5b80600660006116dd611e25565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff1661178a611e25565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516117cf9190613a29565b60405180910390a35050565b6117e481611024565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611851576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184890613a86565b60405180910390fd5b6000600e600083815260200190815260200160002081905550807f2c525dc2c086b9a2f3b902d229853b5b838fcedc22933c40ed7ebe4890a53a8260405160405180910390a250565b6000600e600084815260200190815260200160002054146118bf576118be826117db565b5b6118cb84848484612493565b50505050565b60606118dc82611db9565b61191b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191290613cc6565b60405180910390fd5b60006119256124f5565b905060008151116119455760405180602001604052806000815250611970565b8061194f84612587565b604051602001611960929190613989565b6040516020818303038152906040525b915050919050565b611980611e25565b73ffffffffffffffffffffffffffffffffffffffff1661199e611426565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90613c46565b60405180910390fd5b60005b81811015611a3657611a19611a0a611426565b611a14600c611bef565b612475565b611a23600c611bfd565b8080611a2e90614124565b9150506119f7565b5050565b6658d15e1762800081565b611f9581565b600e6020528060005260406000206000915090505481565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611aff611e25565b73ffffffffffffffffffffffffffffffffffffffff16611b1d611426565b73ffffffffffffffffffffffffffffffffffffffff1614611b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6a90613c46565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611be3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bda90613ae6565b60405180910390fd5b611bec816123b1565b50565b600081600001549050919050565b6001816000016000828254019250508190555050565b600080823b905060008111915050919050565b611c31838383611d3a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611c7457611c6f81612734565b611cb3565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614611cb257611cb1838261277d565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf657611cf1816128ea565b611d35565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614611d3457611d338282612a2d565b5b5b505050565b505050565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611db25750611db182612aac565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611ea083611024565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b611ef7611ef1611e25565b82611f66565b611f36576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f2d90613d46565b60405180910390fd5b611f41838383612155565b505050565b611f618383836040518060200160405280600081525061189a565b505050565b6000611f7182611db9565b611fb0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fa790613b86565b60405180910390fd5b6000611fbb83611024565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061202a57508373ffffffffffffffffffffffffffffffffffffffff1661201284610854565b73ffffffffffffffffffffffffffffffffffffffff16145b8061203b575061203a8185611a63565b5b91505092915050565b600061204f82611024565b905061205d81600084612b8e565b612068600083611e2d565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120b89190613fd7565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8273ffffffffffffffffffffffffffffffffffffffff1661217582611024565b73ffffffffffffffffffffffffffffffffffffffff16146121cb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c290613ca6565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561223b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161223290613b26565b60405180910390fd5b612246838383612b8e565b612251600082611e2d565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122a19190613fd7565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122f89190613ef6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b61248f828260405180602001604052806000815250612b9e565b5050565b6124a461249e611e25565b83611f66565b6124e3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124da90613d46565b60405180910390fd5b6124ef84848484612bf9565b50505050565b6060600f8054612504906140c1565b80601f0160208091040260200160405190810160405280929190818152602001828054612530906140c1565b801561257d5780601f106125525761010080835404028352916020019161257d565b820191906000526020600020905b81548152906001019060200180831161256057829003601f168201915b5050505050905090565b606060008214156125cf576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061272f565b600082905060005b600082146126015780806125ea90614124565b915050600a826125fa9190613f4c565b91506125d7565b60008167ffffffffffffffff811115612643577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156126755781602001600182028036833780820191505090505b5090505b600085146127285760018261268e9190613fd7565b9150600a8561269d919061416d565b60306126a99190613ef6565b60f81b8183815181106126e5577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856127219190613f4c565b9450612679565b8093505050505b919050565b600980549050600a600083815260200190815260200160002081905550600981908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161278a846110e9565b6127949190613fd7565b9050600060086000848152602001908152602001600020549050818114612879576000600760008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600760008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816008600083815260200190815260200160002081905550505b6008600084815260200190815260200160002060009055600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b600060016009805490506128fe9190613fd7565b90506000600a6000848152602001908152602001600020549050600060098381548110612954577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050806009838154811061299c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600a600083815260200190815260200160002081905550600a6000858152602001908152602001600020600090556009805480612a11577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b6000612a38836110e9565b905081600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806008600084815260200190815260200160002081905550505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480612b7757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612b875750612b8682612c55565b5b9050919050565b612b99838383611c26565b505050565b612ba88383612cbf565b612bb56000848484612e8d565b612bf4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612beb90613ac6565b60405180910390fd5b505050565b612c04848484612155565b612c1084848484612e8d565b612c4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c4690613ac6565b60405180910390fd5b50505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d2690613c06565b60405180910390fd5b612d3881611db9565b15612d78576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d6f90613b06565b60405180910390fd5b612d8460008383612b8e565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612dd49190613ef6565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b6000612eae8473ffffffffffffffffffffffffffffffffffffffff16611c13565b15613017578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612ed7611e25565b8786866040518563ffffffff1660e01b8152600401612ef994939291906139dd565b602060405180830381600087803b158015612f1357600080fd5b505af1925050508015612f4457506040513d601f19601f82011682018060405250810190612f4191906133d0565b60015b612fc7573d8060008114612f74576040519150601f19603f3d011682016040523d82523d6000602084013e612f79565b606091505b50600081511415612fbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fb690613ac6565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161491505061301c565b600190505b949350505050565b828054613030906140c1565b90600052602060002090601f0160209004810192826130525760008555613099565b82601f1061306b57805160ff1916838001178555613099565b82800160010185558215613099579182015b8281111561309857825182559160200191906001019061307d565b5b5090506130a691906130aa565b5090565b5b808211156130c35760008160009055506001016130ab565b5090565b60006130da6130d584613e46565b613e21565b9050828152602081018484840111156130f257600080fd5b6130fd84828561407f565b509392505050565b600061311861311384613e77565b613e21565b90508281526020810184848401111561313057600080fd5b61313b84828561407f565b509392505050565b60008135905061315281614973565b92915050565b6000813590506131678161498a565b92915050565b60008135905061317c816149a1565b92915050565b600081519050613191816149a1565b92915050565b600082601f8301126131a857600080fd5b81356131b88482602086016130c7565b91505092915050565b600082601f8301126131d257600080fd5b81356131e2848260208601613105565b91505092915050565b6000813590506131fa816149b8565b92915050565b60006020828403121561321257600080fd5b600061322084828501613143565b91505092915050565b6000806040838503121561323c57600080fd5b600061324a85828601613143565b925050602061325b85828601613143565b9150509250929050565b60008060006060848603121561327a57600080fd5b600061328886828701613143565b935050602061329986828701613143565b92505060406132aa868287016131eb565b9150509250925092565b600080600080608085870312156132ca57600080fd5b60006132d887828801613143565b94505060206132e987828801613143565b93505060406132fa878288016131eb565b925050606085013567ffffffffffffffff81111561331757600080fd5b61332387828801613197565b91505092959194509250565b6000806040838503121561334257600080fd5b600061335085828601613143565b925050602061336185828601613158565b9150509250929050565b6000806040838503121561337e57600080fd5b600061338c85828601613143565b925050602061339d858286016131eb565b9150509250929050565b6000602082840312156133b957600080fd5b60006133c78482850161316d565b91505092915050565b6000602082840312156133e257600080fd5b60006133f084828501613182565b91505092915050565b60006020828403121561340b57600080fd5b600082013567ffffffffffffffff81111561342557600080fd5b613431848285016131c1565b91505092915050565b60006020828403121561344c57600080fd5b600061345a848285016131eb565b91505092915050565b6000806040838503121561347657600080fd5b6000613484858286016131eb565b9250506020613495858286016131eb565b9150509250929050565b6134a88161400b565b82525050565b6134b78161401d565b82525050565b60006134c882613ea8565b6134d28185613ebe565b93506134e281856020860161408e565b6134eb8161425a565b840191505092915050565b600061350182613eb3565b61350b8185613eda565b935061351b81856020860161408e565b6135248161425a565b840191505092915050565b600061353a82613eb3565b6135448185613eeb565b935061355481856020860161408e565b80840191505092915050565b600061356d602583613eda565b91506135788261426b565b604082019050919050565b6000613590601783613eda565b915061359b826142ba565b602082019050919050565b60006135b3602b83613eda565b91506135be826142e3565b604082019050919050565b60006135d6603283613eda565b91506135e182614332565b604082019050919050565b60006135f9602683613eda565b915061360482614381565b604082019050919050565b600061361c601c83613eda565b9150613627826143d0565b602082019050919050565b600061363f602483613eda565b915061364a826143f9565b604082019050919050565b6000613662601983613eda565b915061366d82614448565b602082019050919050565b6000613685601583613eda565b915061369082614471565b602082019050919050565b60006136a8602c83613eda565b91506136b38261449a565b604082019050919050565b60006136cb603883613eda565b91506136d6826144e9565b604082019050919050565b60006136ee602a83613eda565b91506136f982614538565b604082019050919050565b6000613711602983613eda565b915061371c82614587565b604082019050919050565b6000613734602083613eda565b915061373f826145d6565b602082019050919050565b6000613757602c83613eda565b9150613762826145ff565b604082019050919050565b600061377a602083613eda565b91506137858261464e565b602082019050919050565b600061379d600d83613eda565b91506137a882614677565b602082019050919050565b60006137c0601c83613eda565b91506137cb826146a0565b602082019050919050565b60006137e3602983613eda565b91506137ee826146c9565b604082019050919050565b6000613806602f83613eda565b915061381182614718565b604082019050919050565b6000613829602183613eda565b915061383482614767565b604082019050919050565b600061384c601783613eda565b9150613857826147b6565b602082019050919050565b600061386f600083613ecf565b915061387a826147df565b600082019050919050565b6000613892601083613eda565b915061389d826147e2565b602082019050919050565b60006138b5603183613eda565b91506138c08261480b565b604082019050919050565b60006138d8602c83613eda565b91506138e38261485a565b604082019050919050565b60006138fb601a83613eda565b9150613906826148a9565b602082019050919050565b600061391e601883613eda565b9150613929826148d2565b602082019050919050565b6000613941601f83613eda565b915061394c826148fb565b602082019050919050565b6000613964603083613eda565b915061396f82614924565b604082019050919050565b61398381614075565b82525050565b6000613995828561352f565b91506139a1828461352f565b91508190509392505050565b60006139b882613862565b9150819050919050565b60006020820190506139d7600083018461349f565b92915050565b60006080820190506139f2600083018761349f565b6139ff602083018661349f565b613a0c604083018561397a565b8181036060830152613a1e81846134bd565b905095945050505050565b6000602082019050613a3e60008301846134ae565b92915050565b60006020820190508181036000830152613a5e81846134f6565b905092915050565b60006020820190508181036000830152613a7f81613560565b9050919050565b60006020820190508181036000830152613a9f81613583565b9050919050565b60006020820190508181036000830152613abf816135a6565b9050919050565b60006020820190508181036000830152613adf816135c9565b9050919050565b60006020820190508181036000830152613aff816135ec565b9050919050565b60006020820190508181036000830152613b1f8161360f565b9050919050565b60006020820190508181036000830152613b3f81613632565b9050919050565b60006020820190508181036000830152613b5f81613655565b9050919050565b60006020820190508181036000830152613b7f81613678565b9050919050565b60006020820190508181036000830152613b9f8161369b565b9050919050565b60006020820190508181036000830152613bbf816136be565b9050919050565b60006020820190508181036000830152613bdf816136e1565b9050919050565b60006020820190508181036000830152613bff81613704565b9050919050565b60006020820190508181036000830152613c1f81613727565b9050919050565b60006020820190508181036000830152613c3f8161374a565b9050919050565b60006020820190508181036000830152613c5f8161376d565b9050919050565b60006020820190508181036000830152613c7f81613790565b9050919050565b60006020820190508181036000830152613c9f816137b3565b9050919050565b60006020820190508181036000830152613cbf816137d6565b9050919050565b60006020820190508181036000830152613cdf816137f9565b9050919050565b60006020820190508181036000830152613cff8161381c565b9050919050565b60006020820190508181036000830152613d1f8161383f565b9050919050565b60006020820190508181036000830152613d3f81613885565b9050919050565b60006020820190508181036000830152613d5f816138a8565b9050919050565b60006020820190508181036000830152613d7f816138cb565b9050919050565b60006020820190508181036000830152613d9f816138ee565b9050919050565b60006020820190508181036000830152613dbf81613911565b9050919050565b60006020820190508181036000830152613ddf81613934565b9050919050565b60006020820190508181036000830152613dff81613957565b9050919050565b6000602082019050613e1b600083018461397a565b92915050565b6000613e2b613e3c565b9050613e3782826140f3565b919050565b6000604051905090565b600067ffffffffffffffff821115613e6157613e6061422b565b5b613e6a8261425a565b9050602081019050919050565b600067ffffffffffffffff821115613e9257613e9161422b565b5b613e9b8261425a565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613f0182614075565b9150613f0c83614075565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613f4157613f4061419e565b5b828201905092915050565b6000613f5782614075565b9150613f6283614075565b925082613f7257613f716141cd565b5b828204905092915050565b6000613f8882614075565b9150613f9383614075565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613fcc57613fcb61419e565b5b828202905092915050565b6000613fe282614075565b9150613fed83614075565b92508282101561400057613fff61419e565b5b828203905092915050565b600061401682614055565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156140ac578082015181840152602081019050614091565b838111156140bb576000848401525b50505050565b600060028204905060018216806140d957607f821691505b602082108114156140ed576140ec6141fc565b5b50919050565b6140fc8261425a565b810181811067ffffffffffffffff8211171561411b5761411a61422b565b5b80604052505050565b600061412f82614075565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156141625761416161419e565b5b600182019050919050565b600061417882614075565b915061418383614075565b925082614193576141926141cd565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f4f6e6c792032302062656172732063616e206265206d696e746564206174206160008201527f2074696d65000000000000000000000000000000000000000000000000000000602082015250565b7f4d757374206f776e204265617220746f2064656c697374000000000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4d757374206f776e204265617220746f2073656c6c0000000000000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f5072696365206e6f74206d657400000000000000000000000000000000000000600082015250565b7f42656172206d75737420626520666f722073616c6520746f2062757900000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f4d61726b6574706c6163652069732064697361626c6564000000000000000000600082015250565b50565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f4d696e7420616d6f756e74206578636565647320737570706c79000000000000600082015250565b7f4d7573742070617920656e6f75676820666f7220426561720000000000000000600082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f4552433732314275726e61626c653a2063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656400000000000000000000000000000000602082015250565b61497c8161400b565b811461498757600080fd5b50565b6149938161401d565b811461499e57600080fd5b50565b6149aa81614029565b81146149b557600080fd5b50565b6149c181614075565b81146149cc57600080fd5b5056fea2646970667358221220ef14b51fafa75cd1348c04e0f20b76f19ec3292af00e5e245f08ad4695b4a3b964736f6c63430008020033
Deployed ByteCode Sourcemap
55402:4510:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57626:179;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24295:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25854:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25377:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58222:259;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38749:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57984:101;;;;;;;;;;;;;:::i;:::-;;59190:220;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38417:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56245:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57219:168;;;;;;;;;;;;;:::i;:::-;;59418:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35932:245;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38939:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55953:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23989:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55820:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23719:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58691:462;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2891:94;;;;;;;;;;;;;:::i;:::-;;2240:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24464:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56363:594;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26147:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;58489:194;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;59652:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24639:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56965:246;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55765:46;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55718:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55863:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26513:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;3140:192;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57626:179;57737:4;57761:36;57785:11;57761:23;:36::i;:::-;57754:43;;57626:179;;;:::o;24295:100::-;24349:13;24382:5;24375:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24295:100;:::o;25854:221::-;25930:7;25958:16;25966:7;25958;:16::i;:::-;25950:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26043:15;:24;26059:7;26043:24;;;;;;;;;;;;;;;;;;;;;26036:31;;25854:221;;;:::o;25377:411::-;25458:13;25474:23;25489:7;25474:14;:23::i;:::-;25458:39;;25522:5;25516:11;;:2;:11;;;;25508:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;25616:5;25600:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;25625:37;25642:5;25649:12;:10;:12::i;:::-;25625:16;:37::i;:::-;25600:62;25578:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25759:21;25768:2;25772:7;25759:8;:21::i;:::-;25377:411;;;:::o;58222:259::-;57913:15;;;;;;;;;;;57905:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;58328:16:::1;58336:7;58328;:16::i;:::-;58314:30;;:10;:30;;;58306:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;58397:1;58389:5;:9;58381:18;;;::::0;::::1;;58432:5;58412:8;:17;58421:7;58412:17;;;;;;;;;;;:25;;;;58458:7;58453:20;58467:5;58453:20;;;;;;:::i;:::-;;;;;;;;58222:259:::0;;:::o;38749:113::-;38810:7;38837:10;:17;;;;38830:24;;38749:113;:::o;57984:101::-;2471:12;:10;:12::i;:::-;2460:23;;:7;:5;:7::i;:::-;:23;;;2452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;58062:15:::1;;;;;;;;;;;58061:16;58043:15;;:34;;;;;;;;;;;;;;;;;;57984:101::o:0;59190:220::-;59306:1;59285:8;:17;59294:7;59285:17;;;;;;;;;;;;:22;59282:73;;59324:19;59335:7;59324:10;:19::i;:::-;59282:73;59365:37;59384:4;59390:2;59394:7;59365:18;:37::i;:::-;59190:220;;;:::o;38417:256::-;38514:7;38550:23;38567:5;38550:16;:23::i;:::-;38542:5;:31;38534:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;38639:12;:19;38652:5;38639:19;;;;;;;;;;;;;;;:26;38659:5;38639:26;;;;;;;;;;;;38632:33;;38417:256;;;;:::o;56245:110::-;2471:12;:10;:12::i;:::-;2460:23;;:7;:5;:7::i;:::-;:23;;;2452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56334:13:::1;56327:4;:20;;;;;;;;;;;;:::i;:::-;;56245:110:::0;:::o;57219:168::-;2471:12;:10;:12::i;:::-;2460:23;;:7;:5;:7::i;:::-;:23;;;2452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57268:12:::1;57286:7;:5;:7::i;:::-;:12;;57306:21;57286:46;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57267:65;;;57351:7;57343:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;2531:1;57219:168::o:0;59418:226::-;59536:1;59515:8;:17;59524:7;59515:17;;;;;;;;;;;;:22;59512:73;;59554:19;59565:7;59554:10;:19::i;:::-;59512:73;59595:41;59618:4;59624:2;59628:7;59595:22;:41::i;:::-;59418:226;;;:::o;35932:245::-;36050:41;36069:12;:10;:12::i;:::-;36083:7;36050:18;:41::i;:::-;36042:102;;;;;;;;;;;;:::i;:::-;;;;;;;;;36155:14;36161:7;36155:5;:14::i;:::-;35932:245;:::o;38939:233::-;39014:7;39050:30;:28;:30::i;:::-;39042:5;:38;39034:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;39147:10;39158:5;39147:17;;;;;;;;;;;;;;;;;;;;;;;;39140:24;;38939:233;;;:::o;55953:29::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;23989:239::-;24061:7;24081:13;24097:7;:16;24105:7;24097:16;;;;;;;;;;;;;;;;;;;;;24081:32;;24149:1;24132:19;;:5;:19;;;;24124:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;24215:5;24208:12;;;23989:239;;;:::o;55820:34::-;;;;;;;;;;;;;:::o;23719:208::-;23791:7;23836:1;23819:19;;:5;:19;;;;23811:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23903:9;:16;23913:5;23903:16;;;;;;;;;;;;;;;;23896:23;;23719:208;;;:::o;58691:462::-;52969:1;53565:7;;:19;;53557:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;52969:1;53698:7;:18;;;;57913:15:::1;;;;;;;;;;;57905:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;58808:1:::2;58788:8;:17;58797:7;58788:17;;;;;;;;;;;;:21;58780:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;58874:8;:17;58883:7;58874:17;;;;;;;;;;;;58861:9;:30;;58853:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;58933:16;58952;58960:7;58952;:16::i;:::-;58933:35;;58979:40;58989:8;58999:10;59011:7;58979:9;:40::i;:::-;59050:1;59030:8;:17;59039:7;59030:17;;;;;;;;;;;:21;;;;59065:12;59083:8;:13;;59104:9;59083:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;59064:54;;;59137:7;59129:16;;;::::0;::::2;;57967:1;;52925::::0;53877:7;:22;;;;58691:462;:::o;2891:94::-;2471:12;:10;:12::i;:::-;2460:23;;:7;:5;:7::i;:::-;:23;;;2452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2956:21:::1;2974:1;2956:9;:21::i;:::-;2891:94::o:0;2240:87::-;2286:7;2313:6;;;;;;;;;;;2306:13;;2240:87;:::o;24464:104::-;24520:13;24553:7;24546:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24464:104;:::o;56363:594::-;56430:14;56447:25;:15;:23;:25::i;:::-;56430:42;;56504:2;56491:9;:15;;56483:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;55754:4;56576:9;56567:6;:18;;;;:::i;:::-;:31;;56559:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;56673:9;55800:11;56662:20;;;;:::i;:::-;56649:9;:33;;:63;;;;;56708:4;56695:9;56686:6;:18;;;;:::i;:::-;:26;;56649:63;56648:108;;;;56754:1;56742:9;55800:11;56731:20;;;;:::i;:::-;:24;;;;:::i;:::-;56718:9;:37;;56648:108;56640:134;;;;;;;;;;;;:::i;:::-;;;;;;;;;56791:6;56787:153;56807:9;56803:1;:13;56787:153;;;56838:48;56848:10;56860:25;:15;:23;:25::i;:::-;56838:9;:48::i;:::-;56901:27;:15;:25;:27::i;:::-;56818:3;;;;;:::i;:::-;;;;56787:153;;;;56363:594;;:::o;26147:295::-;26262:12;:10;:12::i;:::-;26250:24;;:8;:24;;;;26242:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;26362:8;26317:18;:32;26336:12;:10;:12::i;:::-;26317:32;;;;;;;;;;;;;;;:42;26350:8;26317:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;26415:8;26386:48;;26401:12;:10;:12::i;:::-;26386:48;;;26425:8;26386:48;;;;;;:::i;:::-;;;;;;;;26147:295;;:::o;58489:194::-;58566:16;58574:7;58566;:16::i;:::-;58552:30;;:10;:30;;;58544:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;58643:1;58623:8;:17;58632:7;58623:17;;;;;;;;;;;:21;;;;58667:7;58660:15;;;;;;;;;;58489:194;:::o;59652:253::-;59790:1;59769:8;:17;59778:7;59769:17;;;;;;;;;;;;:22;59766:73;;59808:19;59819:7;59808:10;:19::i;:::-;59766:73;59849:48;59872:4;59878:2;59882:7;59891:5;59849:22;:48::i;:::-;59652:253;;;;:::o;24639:334::-;24712:13;24746:16;24754:7;24746;:16::i;:::-;24738:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24827:21;24851:10;:8;:10::i;:::-;24827:34;;24903:1;24885:7;24879:21;:25;:86;;;;;;;;;;;;;;;;;24931:7;24940:18;:7;:16;:18::i;:::-;24914:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;24879:86;24872:93;;;24639:334;;;:::o;56965:246::-;2471:12;:10;:12::i;:::-;2460:23;;:7;:5;:7::i;:::-;:23;;;2452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57053:6:::1;57048:156;57069:14;57065:1;:18;57048:156;;;57105:45;57115:7;:5;:7::i;:::-;57124:25;:15;:23;:25::i;:::-;57105:9;:45::i;:::-;57165:27;:15;:25;:27::i;:::-;57085:3;;;;;:::i;:::-;;;;57048:156;;;;56965:246:::0;:::o;55765:46::-;55800:11;55765:46;:::o;55718:40::-;55754:4;55718:40;:::o;55863:44::-;;;;;;;;;;;;;;;;;:::o;26513:164::-;26610:4;26634:18;:25;26653:5;26634:25;;;;;;;;;;;;;;;:35;26660:8;26634:35;;;;;;;;;;;;;;;;;;;;;;;;;26627:42;;26513:164;;;;:::o;3140:192::-;2471:12;:10;:12::i;:::-;2460:23;;:7;:5;:7::i;:::-;:23;;;2452:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;3249:1:::1;3229:22;;:8;:22;;;;3221:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;3305:19;3315:8;3305:9;:19::i;:::-;3140:192:::0;:::o;54735:114::-;54800:7;54827;:14;;;54820:21;;54735:114;;;:::o;54857:127::-;54964:1;54946:7;:14;;;:19;;;;;;;;;;;54857:127;:::o;11647:387::-;11707:4;11915:12;11982:7;11970:20;11962:28;;12025:1;12018:4;:8;12011:15;;;11647:387;;;:::o;39785:589::-;39929:45;39956:4;39962:2;39966:7;39929:26;:45::i;:::-;40007:1;39991:18;;:4;:18;;;39987:187;;;40026:40;40058:7;40026:31;:40::i;:::-;39987:187;;;40096:2;40088:10;;:4;:10;;;40084:90;;40115:47;40148:4;40154:7;40115:32;:47::i;:::-;40084:90;39987:187;40202:1;40188:16;;:2;:16;;;40184:183;;;40221:45;40258:7;40221:36;:45::i;:::-;40184:183;;;40294:4;40288:10;;:2;:10;;;40284:83;;40315:40;40343:2;40347:7;40315:27;:40::i;:::-;40284:83;40184:183;39785:589;;;:::o;35340:126::-;;;;:::o;38109:224::-;38211:4;38250:35;38235:50;;;:11;:50;;;;:90;;;;38289:36;38313:11;38289:23;:36::i;:::-;38235:90;38228:97;;38109:224;;;:::o;29248:127::-;29313:4;29365:1;29337:30;;:7;:16;29345:7;29337:16;;;;;;;;;;;;;;;;;;;;;:30;;;;29330:37;;29248:127;;;:::o;1026:98::-;1079:7;1106:10;1099:17;;1026:98;:::o;33230:174::-;33332:2;33305:15;:24;33321:7;33305:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;33388:7;33384:2;33350:46;;33359:23;33374:7;33359:14;:23::i;:::-;33350:46;;;;;;;;;;;;33230:174;;:::o;26744:339::-;26939:41;26958:12;:10;:12::i;:::-;26972:7;26939:18;:41::i;:::-;26931:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27047:28;27057:4;27063:2;27067:7;27047:9;:28::i;:::-;26744:339;;;:::o;27154:185::-;27292:39;27309:4;27315:2;27319:7;27292:39;;;;;;;;;;;;:16;:39::i;:::-;27154:185;;;:::o;29542:348::-;29635:4;29660:16;29668:7;29660;:16::i;:::-;29652:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29736:13;29752:23;29767:7;29752:14;:23::i;:::-;29736:39;;29805:5;29794:16;;:7;:16;;;:51;;;;29838:7;29814:31;;:20;29826:7;29814:11;:20::i;:::-;:31;;;29794:51;:87;;;;29849:32;29866:5;29873:7;29849:16;:32::i;:::-;29794:87;29786:96;;;29542:348;;;;:::o;31837:360::-;31897:13;31913:23;31928:7;31913:14;:23::i;:::-;31897:39;;31949:48;31970:5;31985:1;31989:7;31949:20;:48::i;:::-;32038:29;32055:1;32059:7;32038:8;:29::i;:::-;32100:1;32080:9;:16;32090:5;32080:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;32119:7;:16;32127:7;32119:16;;;;;;;;;;;;32112:23;;;;;;;;;;;32181:7;32177:1;32153:36;;32162:5;32153:36;;;;;;;;;;;;31837:360;;:::o;32534:578::-;32693:4;32666:31;;:23;32681:7;32666:14;:23::i;:::-;:31;;;32658:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;32776:1;32762:16;;:2;:16;;;;32754:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32832:39;32853:4;32859:2;32863:7;32832:20;:39::i;:::-;32936:29;32953:1;32957:7;32936:8;:29::i;:::-;32997:1;32978:9;:15;32988:4;32978:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;33026:1;33009:9;:13;33019:2;33009:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33057:2;33038:7;:16;33046:7;33038:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33096:7;33092:2;33077:27;;33086:4;33077:27;;;;;;;;;;;;32534:578;;;:::o;3340:173::-;3396:16;3415:6;;;;;;;;;;;3396:25;;3441:8;3432:6;;:17;;;;;;;;;;;;;;;;;;3496:8;3465:40;;3486:8;3465:40;;;;;;;;;;;;3340:173;;:::o;30232:110::-;30308:26;30318:2;30322:7;30308:26;;;;;;;;;;;;:9;:26::i;:::-;30232:110;;:::o;27410:328::-;27585:41;27604:12;:10;:12::i;:::-;27618:7;27585:18;:41::i;:::-;27577:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;27691:39;27705:4;27711:2;27715:7;27724:5;27691:13;:39::i;:::-;27410:328;;;;:::o;56141:96::-;56192:13;56225:4;56218:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56141:96;:::o;19293:723::-;19349:13;19579:1;19570:5;:10;19566:53;;;19597:10;;;;;;;;;;;;;;;;;;;;;19566:53;19629:12;19644:5;19629:20;;19660:14;19685:78;19700:1;19692:4;:9;19685:78;;19718:8;;;;;:::i;:::-;;;;19749:2;19741:10;;;;;:::i;:::-;;;19685:78;;;19773:19;19805:6;19795:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;19773:39;;19823:154;19839:1;19830:5;:10;19823:154;;19867:1;19857:11;;;;;:::i;:::-;;;19934:2;19926:5;:10;;;;:::i;:::-;19913:2;:24;;;;:::i;:::-;19900:39;;19883:6;19890;19883:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;19963:2;19954:11;;;;;:::i;:::-;;;19823:154;;;20001:6;19987:21;;;;;19293:723;;;;:::o;41097:164::-;41201:10;:17;;;;41174:15;:24;41190:7;41174:24;;;;;;;;;;;:44;;;;41229:10;41245:7;41229:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41097:164;:::o;41888:988::-;42154:22;42204:1;42179:22;42196:4;42179:16;:22::i;:::-;:26;;;;:::i;:::-;42154:51;;42216:18;42237:17;:26;42255:7;42237:26;;;;;;;;;;;;42216:47;;42384:14;42370:10;:28;42366:328;;42415:19;42437:12;:18;42450:4;42437:18;;;;;;;;;;;;;;;:34;42456:14;42437:34;;;;;;;;;;;;42415:56;;42521:11;42488:12;:18;42501:4;42488:18;;;;;;;;;;;;;;;:30;42507:10;42488:30;;;;;;;;;;;:44;;;;42638:10;42605:17;:30;42623:11;42605:30;;;;;;;;;;;:43;;;;42366:328;;42790:17;:26;42808:7;42790:26;;;;;;;;;;;42783:33;;;42834:12;:18;42847:4;42834:18;;;;;;;;;;;;;;;:34;42853:14;42834:34;;;;;;;;;;;42827:41;;;41888:988;;;;:::o;43171:1079::-;43424:22;43469:1;43449:10;:17;;;;:21;;;;:::i;:::-;43424:46;;43481:18;43502:15;:24;43518:7;43502:24;;;;;;;;;;;;43481:45;;43853:19;43875:10;43886:14;43875:26;;;;;;;;;;;;;;;;;;;;;;;;43853:48;;43939:11;43914:10;43925;43914:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;44050:10;44019:15;:28;44035:11;44019:28;;;;;;;;;;;:41;;;;44191:15;:24;44207:7;44191:24;;;;;;;;;;;44184:31;;;44226:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43171:1079;;;;:::o;40675:221::-;40760:14;40777:20;40794:2;40777:16;:20::i;:::-;40760:37;;40835:7;40808:12;:16;40821:2;40808:16;;;;;;;;;;;;;;;:24;40825:6;40808:24;;;;;;;;;;;:34;;;;40882:6;40853:17;:26;40871:7;40853:26;;;;;;;;;;;:35;;;;40675:221;;;:::o;23350:305::-;23452:4;23504:25;23489:40;;;:11;:40;;;;:105;;;;23561:33;23546:48;;;:11;:48;;;;23489:105;:158;;;;23611:36;23635:11;23611:23;:36::i;:::-;23489:158;23469:178;;23350:305;;;:::o;57395:223::-;57565:45;57592:4;57598:2;57602:7;57565:26;:45::i;:::-;57395:223;;;:::o;30569:321::-;30699:18;30705:2;30709:7;30699:5;:18::i;:::-;30750:54;30781:1;30785:2;30789:7;30798:5;30750:22;:54::i;:::-;30728:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;30569:321;;;:::o;28620:315::-;28777:28;28787:4;28793:2;28797:7;28777:9;:28::i;:::-;28824:48;28847:4;28853:2;28857:7;28866:5;28824:22;:48::i;:::-;28816:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;28620:315;;;;:::o;21852:157::-;21937:4;21976:25;21961:40;;;:11;:40;;;;21954:47;;21852:157;;;:::o;31226:382::-;31320:1;31306:16;;:2;:16;;;;31298:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;31379:16;31387:7;31379;:16::i;:::-;31378:17;31370:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;31441:45;31470:1;31474:2;31478:7;31441:20;:45::i;:::-;31516:1;31499:9;:13;31509:2;31499:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31547:2;31528:7;:16;31536:7;31528:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31592:7;31588:2;31567:33;;31584:1;31567:33;;;;;;;;;;;;31226:382;;:::o;33969:799::-;34124:4;34145:15;:2;:13;;;:15::i;:::-;34141:620;;;34197:2;34181:36;;;34218:12;:10;:12::i;:::-;34232:4;34238:7;34247:5;34181:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;34177:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34440:1;34423:6;:13;:18;34419:272;;;34466:60;;;;;;;;;;:::i;:::-;;;;;;;;34419:272;34641:6;34635:13;34626:6;34622:2;34618:15;34611:38;34177:529;34314:41;;;34304:51;;;:6;:51;;;;34297:58;;;;;34141:620;34745:4;34738:11;;33969:799;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;;;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;;;;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;;;;;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;;;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;;;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:407::-;;;6211:2;6199:9;6190:7;6186:23;6182:32;6179:2;;;6227:1;6224;6217:12;6179:2;6270:1;6295:53;6340:7;6331:6;6320:9;6316:22;6295:53;:::i;:::-;6285:63;;6241:117;6397:2;6423:53;6468:7;6459:6;6448:9;6444:22;6423:53;:::i;:::-;6413:63;;6368:118;6169:324;;;;;:::o;6499:118::-;6586:24;6604:5;6586:24;:::i;:::-;6581:3;6574:37;6564:53;;:::o;6623:109::-;6704:21;6719:5;6704:21;:::i;:::-;6699:3;6692:34;6682:50;;:::o;6738:360::-;;6852:38;6884:5;6852:38;:::i;:::-;6906:70;6969:6;6964:3;6906:70;:::i;:::-;6899:77;;6985:52;7030:6;7025:3;7018:4;7011:5;7007:16;6985:52;:::i;:::-;7062:29;7084:6;7062:29;:::i;:::-;7057:3;7053:39;7046:46;;6828:270;;;;;:::o;7104:364::-;;7220:39;7253:5;7220:39;:::i;:::-;7275:71;7339:6;7334:3;7275:71;:::i;:::-;7268:78;;7355:52;7400:6;7395:3;7388:4;7381:5;7377:16;7355:52;:::i;:::-;7432:29;7454:6;7432:29;:::i;:::-;7427:3;7423:39;7416:46;;7196:272;;;;;:::o;7474:377::-;;7608:39;7641:5;7608:39;:::i;:::-;7663:89;7745:6;7740:3;7663:89;:::i;:::-;7656:96;;7761:52;7806:6;7801:3;7794:4;7787:5;7783:16;7761:52;:::i;:::-;7838:6;7833:3;7829:16;7822:23;;7584:267;;;;;:::o;7857:366::-;;8020:67;8084:2;8079:3;8020:67;:::i;:::-;8013:74;;8096:93;8185:3;8096:93;:::i;:::-;8214:2;8209:3;8205:12;8198:19;;8003:220;;;:::o;8229:366::-;;8392:67;8456:2;8451:3;8392:67;:::i;:::-;8385:74;;8468:93;8557:3;8468:93;:::i;:::-;8586:2;8581:3;8577:12;8570:19;;8375:220;;;:::o;8601:366::-;;8764:67;8828:2;8823:3;8764:67;:::i;:::-;8757:74;;8840:93;8929:3;8840:93;:::i;:::-;8958:2;8953:3;8949:12;8942:19;;8747:220;;;:::o;8973:366::-;;9136:67;9200:2;9195:3;9136:67;:::i;:::-;9129:74;;9212:93;9301:3;9212:93;:::i;:::-;9330:2;9325:3;9321:12;9314:19;;9119:220;;;:::o;9345:366::-;;9508:67;9572:2;9567:3;9508:67;:::i;:::-;9501:74;;9584:93;9673:3;9584:93;:::i;:::-;9702:2;9697:3;9693:12;9686:19;;9491:220;;;:::o;9717:366::-;;9880:67;9944:2;9939:3;9880:67;:::i;:::-;9873:74;;9956:93;10045:3;9956:93;:::i;:::-;10074:2;10069:3;10065:12;10058:19;;9863:220;;;:::o;10089:366::-;;10252:67;10316:2;10311:3;10252:67;:::i;:::-;10245:74;;10328:93;10417:3;10328:93;:::i;:::-;10446:2;10441:3;10437:12;10430:19;;10235:220;;;:::o;10461:366::-;;10624:67;10688:2;10683:3;10624:67;:::i;:::-;10617:74;;10700:93;10789:3;10700:93;:::i;:::-;10818:2;10813:3;10809:12;10802:19;;10607:220;;;:::o;10833:366::-;;10996:67;11060:2;11055:3;10996:67;:::i;:::-;10989:74;;11072:93;11161:3;11072:93;:::i;:::-;11190:2;11185:3;11181:12;11174:19;;10979:220;;;:::o;11205:366::-;;11368:67;11432:2;11427:3;11368:67;:::i;:::-;11361:74;;11444:93;11533:3;11444:93;:::i;:::-;11562:2;11557:3;11553:12;11546:19;;11351:220;;;:::o;11577:366::-;;11740:67;11804:2;11799:3;11740:67;:::i;:::-;11733:74;;11816:93;11905:3;11816:93;:::i;:::-;11934:2;11929:3;11925:12;11918:19;;11723:220;;;:::o;11949:366::-;;12112:67;12176:2;12171:3;12112:67;:::i;:::-;12105:74;;12188:93;12277:3;12188:93;:::i;:::-;12306:2;12301:3;12297:12;12290:19;;12095:220;;;:::o;12321:366::-;;12484:67;12548:2;12543:3;12484:67;:::i;:::-;12477:74;;12560:93;12649:3;12560:93;:::i;:::-;12678:2;12673:3;12669:12;12662:19;;12467:220;;;:::o;12693:366::-;;12856:67;12920:2;12915:3;12856:67;:::i;:::-;12849:74;;12932:93;13021:3;12932:93;:::i;:::-;13050:2;13045:3;13041:12;13034:19;;12839:220;;;:::o;13065:366::-;;13228:67;13292:2;13287:3;13228:67;:::i;:::-;13221:74;;13304:93;13393:3;13304:93;:::i;:::-;13422:2;13417:3;13413:12;13406:19;;13211:220;;;:::o;13437:366::-;;13600:67;13664:2;13659:3;13600:67;:::i;:::-;13593:74;;13676:93;13765:3;13676:93;:::i;:::-;13794:2;13789:3;13785:12;13778:19;;13583:220;;;:::o;13809:366::-;;13972:67;14036:2;14031:3;13972:67;:::i;:::-;13965:74;;14048:93;14137:3;14048:93;:::i;:::-;14166:2;14161:3;14157:12;14150:19;;13955:220;;;:::o;14181:366::-;;14344:67;14408:2;14403:3;14344:67;:::i;:::-;14337:74;;14420:93;14509:3;14420:93;:::i;:::-;14538:2;14533:3;14529:12;14522:19;;14327:220;;;:::o;14553:366::-;;14716:67;14780:2;14775:3;14716:67;:::i;:::-;14709:74;;14792:93;14881:3;14792:93;:::i;:::-;14910:2;14905:3;14901:12;14894:19;;14699:220;;;:::o;14925:366::-;;15088:67;15152:2;15147:3;15088:67;:::i;:::-;15081:74;;15164:93;15253:3;15164:93;:::i;:::-;15282:2;15277:3;15273:12;15266:19;;15071:220;;;:::o;15297:366::-;;15460:67;15524:2;15519:3;15460:67;:::i;:::-;15453:74;;15536:93;15625:3;15536:93;:::i;:::-;15654:2;15649:3;15645:12;15638:19;;15443:220;;;:::o;15669:366::-;;15832:67;15896:2;15891:3;15832:67;:::i;:::-;15825:74;;15908:93;15997:3;15908:93;:::i;:::-;16026:2;16021:3;16017:12;16010:19;;15815:220;;;:::o;16041:398::-;;16221:83;16302:1;16297:3;16221:83;:::i;:::-;16214:90;;16313:93;16402:3;16313:93;:::i;:::-;16431:1;16426:3;16422:11;16415:18;;16204:235;;;:::o;16445:366::-;;16608:67;16672:2;16667:3;16608:67;:::i;:::-;16601:74;;16684:93;16773:3;16684:93;:::i;:::-;16802:2;16797:3;16793:12;16786:19;;16591:220;;;:::o;16817:366::-;;16980:67;17044:2;17039:3;16980:67;:::i;:::-;16973:74;;17056:93;17145:3;17056:93;:::i;:::-;17174:2;17169:3;17165:12;17158:19;;16963:220;;;:::o;17189:366::-;;17352:67;17416:2;17411:3;17352:67;:::i;:::-;17345:74;;17428:93;17517:3;17428:93;:::i;:::-;17546:2;17541:3;17537:12;17530:19;;17335:220;;;:::o;17561:366::-;;17724:67;17788:2;17783:3;17724:67;:::i;:::-;17717:74;;17800:93;17889:3;17800:93;:::i;:::-;17918:2;17913:3;17909:12;17902:19;;17707:220;;;:::o;17933:366::-;;18096:67;18160:2;18155:3;18096:67;:::i;:::-;18089:74;;18172:93;18261:3;18172:93;:::i;:::-;18290:2;18285:3;18281:12;18274:19;;18079:220;;;:::o;18305:366::-;;18468:67;18532:2;18527:3;18468:67;:::i;:::-;18461:74;;18544:93;18633:3;18544:93;:::i;:::-;18662:2;18657:3;18653:12;18646:19;;18451:220;;;:::o;18677:366::-;;18840:67;18904:2;18899:3;18840:67;:::i;:::-;18833:74;;18916:93;19005:3;18916:93;:::i;:::-;19034:2;19029:3;19025:12;19018:19;;18823:220;;;:::o;19049:118::-;19136:24;19154:5;19136:24;:::i;:::-;19131:3;19124:37;19114:53;;:::o;19173:435::-;;19375:95;19466:3;19457:6;19375:95;:::i;:::-;19368:102;;19487:95;19578:3;19569:6;19487:95;:::i;:::-;19480:102;;19599:3;19592:10;;19357:251;;;;;:::o;19614:379::-;;19820:147;19963:3;19820:147;:::i;:::-;19813:154;;19984:3;19977:10;;19802:191;;;:::o;19999:222::-;;20130:2;20119:9;20115:18;20107:26;;20143:71;20211:1;20200:9;20196:17;20187:6;20143:71;:::i;:::-;20097:124;;;;:::o;20227:640::-;;20460:3;20449:9;20445:19;20437:27;;20474:71;20542:1;20531:9;20527:17;20518:6;20474:71;:::i;:::-;20555:72;20623:2;20612:9;20608:18;20599:6;20555:72;:::i;:::-;20637;20705:2;20694:9;20690:18;20681:6;20637:72;:::i;:::-;20756:9;20750:4;20746:20;20741:2;20730:9;20726:18;20719:48;20784:76;20855:4;20846:6;20784:76;:::i;:::-;20776:84;;20427:440;;;;;;;:::o;20873:210::-;;20998:2;20987:9;20983:18;20975:26;;21011:65;21073:1;21062:9;21058:17;21049:6;21011:65;:::i;:::-;20965:118;;;;:::o;21089:313::-;;21240:2;21229:9;21225:18;21217:26;;21289:9;21283:4;21279:20;21275:1;21264:9;21260:17;21253:47;21317:78;21390:4;21381:6;21317:78;:::i;:::-;21309:86;;21207:195;;;;:::o;21408:419::-;;21612:2;21601:9;21597:18;21589:26;;21661:9;21655:4;21651:20;21647:1;21636:9;21632:17;21625:47;21689:131;21815:4;21689:131;:::i;:::-;21681:139;;21579:248;;;:::o;21833:419::-;;22037:2;22026:9;22022:18;22014:26;;22086:9;22080:4;22076:20;22072:1;22061:9;22057:17;22050:47;22114:131;22240:4;22114:131;:::i;:::-;22106:139;;22004:248;;;:::o;22258:419::-;;22462:2;22451:9;22447:18;22439:26;;22511:9;22505:4;22501:20;22497:1;22486:9;22482:17;22475:47;22539:131;22665:4;22539:131;:::i;:::-;22531:139;;22429:248;;;:::o;22683:419::-;;22887:2;22876:9;22872:18;22864:26;;22936:9;22930:4;22926:20;22922:1;22911:9;22907:17;22900:47;22964:131;23090:4;22964:131;:::i;:::-;22956:139;;22854:248;;;:::o;23108:419::-;;23312:2;23301:9;23297:18;23289:26;;23361:9;23355:4;23351:20;23347:1;23336:9;23332:17;23325:47;23389:131;23515:4;23389:131;:::i;:::-;23381:139;;23279:248;;;:::o;23533:419::-;;23737:2;23726:9;23722:18;23714:26;;23786:9;23780:4;23776:20;23772:1;23761:9;23757:17;23750:47;23814:131;23940:4;23814:131;:::i;:::-;23806:139;;23704:248;;;:::o;23958:419::-;;24162:2;24151:9;24147:18;24139:26;;24211:9;24205:4;24201:20;24197:1;24186:9;24182:17;24175:47;24239:131;24365:4;24239:131;:::i;:::-;24231:139;;24129:248;;;:::o;24383:419::-;;24587:2;24576:9;24572:18;24564:26;;24636:9;24630:4;24626:20;24622:1;24611:9;24607:17;24600:47;24664:131;24790:4;24664:131;:::i;:::-;24656:139;;24554:248;;;:::o;24808:419::-;;25012:2;25001:9;24997:18;24989:26;;25061:9;25055:4;25051:20;25047:1;25036:9;25032:17;25025:47;25089:131;25215:4;25089:131;:::i;:::-;25081:139;;24979:248;;;:::o;25233:419::-;;25437:2;25426:9;25422:18;25414:26;;25486:9;25480:4;25476:20;25472:1;25461:9;25457:17;25450:47;25514:131;25640:4;25514:131;:::i;:::-;25506:139;;25404:248;;;:::o;25658:419::-;;25862:2;25851:9;25847:18;25839:26;;25911:9;25905:4;25901:20;25897:1;25886:9;25882:17;25875:47;25939:131;26065:4;25939:131;:::i;:::-;25931:139;;25829:248;;;:::o;26083:419::-;;26287:2;26276:9;26272:18;26264:26;;26336:9;26330:4;26326:20;26322:1;26311:9;26307:17;26300:47;26364:131;26490:4;26364:131;:::i;:::-;26356:139;;26254:248;;;:::o;26508:419::-;;26712:2;26701:9;26697:18;26689:26;;26761:9;26755:4;26751:20;26747:1;26736:9;26732:17;26725:47;26789:131;26915:4;26789:131;:::i;:::-;26781:139;;26679:248;;;:::o;26933:419::-;;27137:2;27126:9;27122:18;27114:26;;27186:9;27180:4;27176:20;27172:1;27161:9;27157:17;27150:47;27214:131;27340:4;27214:131;:::i;:::-;27206:139;;27104:248;;;:::o;27358:419::-;;27562:2;27551:9;27547:18;27539:26;;27611:9;27605:4;27601:20;27597:1;27586:9;27582:17;27575:47;27639:131;27765:4;27639:131;:::i;:::-;27631:139;;27529:248;;;:::o;27783:419::-;;27987:2;27976:9;27972:18;27964:26;;28036:9;28030:4;28026:20;28022:1;28011:9;28007:17;28000:47;28064:131;28190:4;28064:131;:::i;:::-;28056:139;;27954:248;;;:::o;28208:419::-;;28412:2;28401:9;28397:18;28389:26;;28461:9;28455:4;28451:20;28447:1;28436:9;28432:17;28425:47;28489:131;28615:4;28489:131;:::i;:::-;28481:139;;28379:248;;;:::o;28633:419::-;;28837:2;28826:9;28822:18;28814:26;;28886:9;28880:4;28876:20;28872:1;28861:9;28857:17;28850:47;28914:131;29040:4;28914:131;:::i;:::-;28906:139;;28804:248;;;:::o;29058:419::-;;29262:2;29251:9;29247:18;29239:26;;29311:9;29305:4;29301:20;29297:1;29286:9;29282:17;29275:47;29339:131;29465:4;29339:131;:::i;:::-;29331:139;;29229:248;;;:::o;29483:419::-;;29687:2;29676:9;29672:18;29664:26;;29736:9;29730:4;29726:20;29722:1;29711:9;29707:17;29700:47;29764:131;29890:4;29764:131;:::i;:::-;29756:139;;29654:248;;;:::o;29908:419::-;;30112:2;30101:9;30097:18;30089:26;;30161:9;30155:4;30151:20;30147:1;30136:9;30132:17;30125:47;30189:131;30315:4;30189:131;:::i;:::-;30181:139;;30079:248;;;:::o;30333:419::-;;30537:2;30526:9;30522:18;30514:26;;30586:9;30580:4;30576:20;30572:1;30561:9;30557:17;30550:47;30614:131;30740:4;30614:131;:::i;:::-;30606:139;;30504:248;;;:::o;30758:419::-;;30962:2;30951:9;30947:18;30939:26;;31011:9;31005:4;31001:20;30997:1;30986:9;30982:17;30975:47;31039:131;31165:4;31039:131;:::i;:::-;31031:139;;30929:248;;;:::o;31183:419::-;;31387:2;31376:9;31372:18;31364:26;;31436:9;31430:4;31426:20;31422:1;31411:9;31407:17;31400:47;31464:131;31590:4;31464:131;:::i;:::-;31456:139;;31354:248;;;:::o;31608:419::-;;31812:2;31801:9;31797:18;31789:26;;31861:9;31855:4;31851:20;31847:1;31836:9;31832:17;31825:47;31889:131;32015:4;31889:131;:::i;:::-;31881:139;;31779:248;;;:::o;32033:419::-;;32237:2;32226:9;32222:18;32214:26;;32286:9;32280:4;32276:20;32272:1;32261:9;32257:17;32250:47;32314:131;32440:4;32314:131;:::i;:::-;32306:139;;32204:248;;;:::o;32458:419::-;;32662:2;32651:9;32647:18;32639:26;;32711:9;32705:4;32701:20;32697:1;32686:9;32682:17;32675:47;32739:131;32865:4;32739:131;:::i;:::-;32731:139;;32629:248;;;:::o;32883:419::-;;33087:2;33076:9;33072:18;33064:26;;33136:9;33130:4;33126:20;33122:1;33111:9;33107:17;33100:47;33164:131;33290:4;33164:131;:::i;:::-;33156:139;;33054:248;;;:::o;33308:419::-;;33512:2;33501:9;33497:18;33489:26;;33561:9;33555:4;33551:20;33547:1;33536:9;33532:17;33525:47;33589:131;33715:4;33589:131;:::i;:::-;33581:139;;33479:248;;;:::o;33733:222::-;;33864:2;33853:9;33849:18;33841:26;;33877:71;33945:1;33934:9;33930:17;33921:6;33877:71;:::i;:::-;33831:124;;;;:::o;33961:129::-;;34022:20;;:::i;:::-;34012:30;;34051:33;34079:4;34071:6;34051:33;:::i;:::-;34002:88;;;:::o;34096:75::-;;34162:2;34156:9;34146:19;;34136:35;:::o;34177:307::-;;34328:18;34320:6;34317:30;34314:2;;;34350:18;;:::i;:::-;34314:2;34388:29;34410:6;34388:29;:::i;:::-;34380:37;;34472:4;34466;34462:15;34454:23;;34243:241;;;:::o;34490:308::-;;34642:18;34634:6;34631:30;34628:2;;;34664:18;;:::i;:::-;34628:2;34702:29;34724:6;34702:29;:::i;:::-;34694:37;;34786:4;34780;34776:15;34768:23;;34557:241;;;:::o;34804:98::-;;34889:5;34883:12;34873:22;;34862:40;;;:::o;34908:99::-;;34994:5;34988:12;34978:22;;34967:40;;;:::o;35013:168::-;;35130:6;35125:3;35118:19;35170:4;35165:3;35161:14;35146:29;;35108:73;;;;:::o;35187:147::-;;35325:3;35310:18;;35300:34;;;;:::o;35340:169::-;;35458:6;35453:3;35446:19;35498:4;35493:3;35489:14;35474:29;;35436:73;;;;:::o;35515:148::-;;35654:3;35639:18;;35629:34;;;;:::o;35669:305::-;;35728:20;35746:1;35728:20;:::i;:::-;35723:25;;35762:20;35780:1;35762:20;:::i;:::-;35757:25;;35916:1;35848:66;35844:74;35841:1;35838:81;35835:2;;;35922:18;;:::i;:::-;35835:2;35966:1;35963;35959:9;35952:16;;35713:261;;;;:::o;35980:185::-;;36037:20;36055:1;36037:20;:::i;:::-;36032:25;;36071:20;36089:1;36071:20;:::i;:::-;36066:25;;36110:1;36100:2;;36115:18;;:::i;:::-;36100:2;36157:1;36154;36150:9;36145:14;;36022:143;;;;:::o;36171:348::-;;36234:20;36252:1;36234:20;:::i;:::-;36229:25;;36268:20;36286:1;36268:20;:::i;:::-;36263:25;;36456:1;36388:66;36384:74;36381:1;36378:81;36373:1;36366:9;36359:17;36355:105;36352:2;;;36463:18;;:::i;:::-;36352:2;36511:1;36508;36504:9;36493:20;;36219:300;;;;:::o;36525:191::-;;36585:20;36603:1;36585:20;:::i;:::-;36580:25;;36619:20;36637:1;36619:20;:::i;:::-;36614:25;;36658:1;36655;36652:8;36649:2;;;36663:18;;:::i;:::-;36649:2;36708:1;36705;36701:9;36693:17;;36570:146;;;;:::o;36722:96::-;;36788:24;36806:5;36788:24;:::i;:::-;36777:35;;36767:51;;;:::o;36824:90::-;;36901:5;36894:13;36887:21;36876:32;;36866:48;;;:::o;36920:149::-;;36996:66;36989:5;36985:78;36974:89;;36964:105;;;:::o;37075:126::-;;37152:42;37145:5;37141:54;37130:65;;37120:81;;;:::o;37207:77::-;;37273:5;37262:16;;37252:32;;;:::o;37290:154::-;37374:6;37369:3;37364;37351:30;37436:1;37427:6;37422:3;37418:16;37411:27;37341:103;;;:::o;37450:307::-;37518:1;37528:113;37542:6;37539:1;37536:13;37528:113;;;37627:1;37622:3;37618:11;37612:18;37608:1;37603:3;37599:11;37592:39;37564:2;37561:1;37557:10;37552:15;;37528:113;;;37659:6;37656:1;37653:13;37650:2;;;37739:1;37730:6;37725:3;37721:16;37714:27;37650:2;37499:258;;;;:::o;37763:320::-;;37844:1;37838:4;37834:12;37824:22;;37891:1;37885:4;37881:12;37912:18;37902:2;;37968:4;37960:6;37956:17;37946:27;;37902:2;38030;38022:6;38019:14;37999:18;37996:38;37993:2;;;38049:18;;:::i;:::-;37993:2;37814:269;;;;:::o;38089:281::-;38172:27;38194:4;38172:27;:::i;:::-;38164:6;38160:40;38302:6;38290:10;38287:22;38266:18;38254:10;38251:34;38248:62;38245:2;;;38313:18;;:::i;:::-;38245:2;38353:10;38349:2;38342:22;38132:238;;;:::o;38376:233::-;;38438:24;38456:5;38438:24;:::i;:::-;38429:33;;38484:66;38477:5;38474:77;38471:2;;;38554:18;;:::i;:::-;38471:2;38601:1;38594:5;38590:13;38583:20;;38419:190;;;:::o;38615:176::-;;38664:20;38682:1;38664:20;:::i;:::-;38659:25;;38698:20;38716:1;38698:20;:::i;:::-;38693:25;;38737:1;38727:2;;38742:18;;:::i;:::-;38727:2;38783:1;38780;38776:9;38771:14;;38649:142;;;;:::o;38797:180::-;38845:77;38842:1;38835:88;38942:4;38939:1;38932:15;38966:4;38963:1;38956:15;38983:180;39031:77;39028:1;39021:88;39128:4;39125:1;39118:15;39152:4;39149:1;39142:15;39169:180;39217:77;39214:1;39207:88;39314:4;39311:1;39304:15;39338:4;39335:1;39328:15;39355:180;39403:77;39400:1;39393:88;39500:4;39497:1;39490:15;39524:4;39521:1;39514:15;39541:102;;39633:2;39629:7;39624:2;39617:5;39613:14;39609:28;39599:38;;39589:54;;;:::o;39649:224::-;39789:34;39785:1;39777:6;39773:14;39766:58;39858:7;39853:2;39845:6;39841:15;39834:32;39755:118;:::o;39879:173::-;40019:25;40015:1;40007:6;40003:14;39996:49;39985:67;:::o;40058:230::-;40198:34;40194:1;40186:6;40182:14;40175:58;40267:13;40262:2;40254:6;40250:15;40243:38;40164:124;:::o;40294:237::-;40434:34;40430:1;40422:6;40418:14;40411:58;40503:20;40498:2;40490:6;40486:15;40479:45;40400:131;:::o;40537:225::-;40677:34;40673:1;40665:6;40661:14;40654:58;40746:8;40741:2;40733:6;40729:15;40722:33;40643:119;:::o;40768:178::-;40908:30;40904:1;40896:6;40892:14;40885:54;40874:72;:::o;40952:223::-;41092:34;41088:1;41080:6;41076:14;41069:58;41161:6;41156:2;41148:6;41144:15;41137:31;41058:117;:::o;41181:175::-;41321:27;41317:1;41309:6;41305:14;41298:51;41287:69;:::o;41362:171::-;41502:23;41498:1;41490:6;41486:14;41479:47;41468:65;:::o;41539:231::-;41679:34;41675:1;41667:6;41663:14;41656:58;41748:14;41743:2;41735:6;41731:15;41724:39;41645:125;:::o;41776:243::-;41916:34;41912:1;41904:6;41900:14;41893:58;41985:26;41980:2;41972:6;41968:15;41961:51;41882:137;:::o;42025:229::-;42165:34;42161:1;42153:6;42149:14;42142:58;42234:12;42229:2;42221:6;42217:15;42210:37;42131:123;:::o;42260:228::-;42400:34;42396:1;42388:6;42384:14;42377:58;42469:11;42464:2;42456:6;42452:15;42445:36;42366:122;:::o;42494:182::-;42634:34;42630:1;42622:6;42618:14;42611:58;42600:76;:::o;42682:231::-;42822:34;42818:1;42810:6;42806:14;42799:58;42891:14;42886:2;42878:6;42874:15;42867:39;42788:125;:::o;42919:182::-;43059:34;43055:1;43047:6;43043:14;43036:58;43025:76;:::o;43107:163::-;43247:15;43243:1;43235:6;43231:14;43224:39;43213:57;:::o;43276:178::-;43416:30;43412:1;43404:6;43400:14;43393:54;43382:72;:::o;43460:228::-;43600:34;43596:1;43588:6;43584:14;43577:58;43669:11;43664:2;43656:6;43652:15;43645:36;43566:122;:::o;43694:234::-;43834:34;43830:1;43822:6;43818:14;43811:58;43903:17;43898:2;43890:6;43886:15;43879:42;43800:128;:::o;43934:220::-;44074:34;44070:1;44062:6;44058:14;44051:58;44143:3;44138:2;44130:6;44126:15;44119:28;44040:114;:::o;44160:173::-;44300:25;44296:1;44288:6;44284:14;44277:49;44266:67;:::o;44339:114::-;44445:8;:::o;44459:166::-;44599:18;44595:1;44587:6;44583:14;44576:42;44565:60;:::o;44631:236::-;44771:34;44767:1;44759:6;44755:14;44748:58;44840:19;44835:2;44827:6;44823:15;44816:44;44737:130;:::o;44873:231::-;45013:34;45009:1;45001:6;44997:14;44990:58;45082:14;45077:2;45069:6;45065:15;45058:39;44979:125;:::o;45110:176::-;45250:28;45246:1;45238:6;45234:14;45227:52;45216:70;:::o;45292:174::-;45432:26;45428:1;45420:6;45416:14;45409:50;45398:68;:::o;45472:181::-;45612:33;45608:1;45600:6;45596:14;45589:57;45578:75;:::o;45659:235::-;45799:34;45795:1;45787:6;45783:14;45776:58;45868:18;45863:2;45855:6;45851:15;45844:43;45765:129;:::o;45900:122::-;45973:24;45991:5;45973:24;:::i;:::-;45966:5;45963:35;45953:2;;46012:1;46009;46002:12;45953:2;45943:79;:::o;46028:116::-;46098:21;46113:5;46098:21;:::i;:::-;46091:5;46088:32;46078:2;;46134:1;46131;46124:12;46078:2;46068:76;:::o;46150:120::-;46222:23;46239:5;46222:23;:::i;:::-;46215:5;46212:34;46202:2;;46260:1;46257;46250:12;46202:2;46192:78;:::o;46276:122::-;46349:24;46367:5;46349:24;:::i;:::-;46342:5;46339:35;46329:2;;46388:1;46385;46378:12;46329:2;46319:79;:::o
Metadata Hash
ipfs://ef14b51fafa75cd1348c04e0f20b76f19ec3292af00e5e245f08ad4695b4a3b9