ERC-721
Overview
Max Total Supply
107 DREAM
Holders
46
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
3 DREAMLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
ALittleDream
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-04-04 */ // SPDX-License-Identifier: MIT // @@@@@@@@@@@@&(/((%%&&%&&#* ,%%%&%#%%%#&#%&##&#%%# // @@@@@@@@@@@@&(/((%%&&%&&#( .....#......../*/##&#%%# // @@@@@@@@@@@@&(/((%%&%......... .... (...,,....#(%%@@@@@@@@@@@@@@/ // @@@@@@@@@@@@&(/(/,. ........./#%&&((%(/((#(((%#&#%..%@@@@@@@@@@@@( // @@@@@@@@@@@@&//...........(@%&(//(#(#/(*#(#((((/(%@@%%%&&&&&&&&&&/ // @@@@@@@@@@@&.....#.%#%*,,&###*%##/%.*##%#%##*%(((///%%%#%%&&&&&&&/ // &&&&&&&&&(..... ((/*(%%(#/%#####//.#/%(%%##/*/(###(**@@&%%%%%%%%%* // @@@@@@@&........(/%/%/((#,((######/,%(#/#(/*(*#*##(//%@%%&#######* // %%%%%%.....*(....*(((((%#(/%(/#%/#/,(/#(%*(/%##(%#((((* .@@@@@@@( // ##### . . .......&&&, .##%%##**/**,..*(../#(##%*# .@@@@@@@( // &&&@............ &&&&%((((#((*....* ....*....##(#(( .@@@@@@@( // (((/,((((*,,& ..///////////(*.,.., .........,///( // ((,.*(/*,(......#(((((/////,.*..**.,...(..( ,,.****************** // (((,****/.. ./,.(%%%%#((((#/.** ........... *,,.#*((((((((((((((,. // #(/**(***,.... %.****////(** *#**#,..... #/#((*,.%*.(/##((((((((,. // *%(*,****/(, ...#((/**/,*(/,///*//#(.,&#*,(#/*,,,#*%*/(((((((((,. // *((,,,**/%,# ....#((**#,#*.((/(*/ #, . %//##%/***/(%#*((//////(,. // (#****,.*//(. .#..*.#(#,(* ,/***,/ .(#%(,....((#***,(/&#(%@@@&@ ,. // #%***,*,*/.. %/...,(/,,,(../ /,**/. *. .... *..((,**//(///((&@ ,. // (///,*(.%,/...*( (,,,%**. *. *., *(# ,....,#*..,..*%,**,&/(#/%%%.. // /(/*#(/*......(,,,,(,*(( */....,..(/.# #..#....,./*///,/*#(,%&&&& // &&&(/*........(.(./(#*(*%*(..../..,.*(,...(*#..*%/#%,**%%..((((((, // @@@@., %....#....*,,## *.*(//..%/.....,....%(/, .((/&&*..*@ ////, // @..((#,....*.%./.../ ..,.(.%#*,..,.............,,,/.... @@@@ ((((, // ..//#%%&..,...../ ..... , *(.........(..,,,*. ...(*,.*@@@@@@ ((((, // ..((////(#...(,...........( ....,***,*..*..(..&.*&&@@@@@@@ ((((, // ..(%@@@@@&%%%......./,(.../.....***(**#/(#.( .,&%&&&&@@@@@@@ ((((, // ..(%@@@@@&%%%%%&%*.... ..... #.**,,*,,#.,/%%%%%@%&&&&@@@@@@@ ((((, // ..(%@@@@@&%%%%%&%#%%&(((##/,,.%,#/##%#&///%%%%%@%&&&&@@@@@@@ ((((, // A Little Dream for Ukraine is a Generative Art Project from Lapin Mignon //(Augmented Watercolour Little Ukrainian Girl), with the Collaboration from //Kristy Glas (The beautiful Skies) and the wizard magic coding from Tagachi. // Every mint is a dynamic NFT, with a day and night version aligned to Kiyv //Sunset and Sunrise. // All benefits will be given to Voices Of Children 🔗, in Ukraine, //which helps children in wartime to relieve their trauma with the power of //Psychology and Art. A full team of amazing people in Ukraine, fighting to //protect and mend a dented childhood. // Lots of love to anyone who support this project with us ❤️. /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; ////import "../../utils/introspection/IERC165.sol"; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, 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; } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; ////import "./IERC165.sol"; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [////IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * ////IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; ////import "../IERC721.sol"; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; ////import "../utils/Context.sol"; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; ////import "./IERC721.sol"; ////import "./IERC721Receiver.sol"; ////import "./extensions/IERC721Metadata.sol"; ////import "../../utils/Address.sol"; ////import "../../utils/Context.sol"; ////import "../../utils/Strings.sol"; ////import "../../utils/introspection/ERC165.sol"; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } /** * SourceUnit: d:\TagachiStudio\Lapin\A Little Dream\codebase\alittledream\contracts\ALittleDream.sol */ ////// SPDX-License-Identifier-FLATTEN-SUPPRESS-WARNING: MIT pragma solidity ^0.8.7; ////import '@openzeppelin/contracts/token/ERC721/ERC721.sol'; ////import '@openzeppelin/contracts/access/Ownable.sol'; contract ALittleDream is ERC721, Ownable { uint256 public mintPrice; uint256 public totalSupply; uint256 public maxSupply; bool public isPublicMintEnabled; string internal baseTokenUri; string public hiddenMetadataUri; address public withdrawWallet; mapping(address => uint256) public WalletMints; bool public isRevealed; constructor() payable ERC721('A Little Dream', 'DREAM') { mintPrice = 0.1 ether; maxSupply = 288; withdrawWallet = 0xe481387CA21AeA113180a184d14B64D804027deb; setHiddenMetadataUri("ipfs://QmePaWBPUzudprRHPSym29umGi2xwyFLBPePR9nDUhpGW7/"); isRevealed = false; } modifier callerIsAWallet() { require(tx.origin ==msg.sender, "Another contract detected"); _; } function setIsPublicMintEnabled(bool isPublicMintEnabled_) external onlyOwner { isPublicMintEnabled = isPublicMintEnabled_; } function reveal() external onlyOwner { isRevealed = true; } function setHiddenMetadataUri(string memory hiddenMetadataUri_) public onlyOwner { hiddenMetadataUri = hiddenMetadataUri_; } function setBaseTokenUri(string calldata baseTokenUri_) external onlyOwner { baseTokenUri = baseTokenUri_; } function tokenURI(uint256 tokenId_) public view override returns (string memory) { if (isRevealed == false) { return hiddenMetadataUri; } require(_exists(tokenId_), 'Token does not exist!'); return string(abi.encodePacked(baseTokenUri, Strings.toString(tokenId_), ".json")); } string private customContractURI = "ipfs://QmaNhL43nG9pjNx4467JtBLjCfiz6wPWA2s84ugHPXr6CG/"; function setContractURI(string memory customContractURI_) external onlyOwner { customContractURI = customContractURI_; } function contractURI() public view returns (string memory) { return customContractURI; } function withdraw() external onlyOwner { (bool success, ) = withdrawWallet.call{ value: address(this).balance }(''); require(success, 'withdraw failed'); } function mint(uint256 quantity_) public payable callerIsAWallet { require(isPublicMintEnabled, 'minting not enabled'); require(msg.value >= quantity_ * mintPrice, 'wrong mint value'); require(totalSupply + quantity_ <= maxSupply, 'sold out'); for(uint256 i = 0; i < quantity_; i++) { uint256 newTokenId = totalSupply + 1; WalletMints[msg.sender]++; totalSupply++; _safeMint(msg.sender, newTokenId); } } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"payable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"WalletMints","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":"contractURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintEnabled","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isRevealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"quantity_","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"reveal","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":"string","name":"customContractURI_","type":"string"}],"name":"setContractURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"hiddenMetadataUri_","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"isPublicMintEnabled_","type":"bool"}],"name":"setIsPublicMintEnabled","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"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"},{"inputs":[],"name":"withdrawWallet","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
6080604052604051806060016040528060368152602001620042e560369139601090805190602001906200003592919062000351565b506040518060400160405280600e81526020017f41204c6974746c6520447265616d0000000000000000000000000000000000008152506040518060400160405280600581526020017f445245414d0000000000000000000000000000000000000000000000000000008152508160009080519060200190620000ba92919062000351565b508060019080519060200190620000d392919062000351565b505050620000f6620000ea620001ae60201b60201c565b620001b660201b60201c565b67016345785d8a000060078190555061012060098190555073e481387ca21aea113180a184d14b64d804027deb600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506200018d6040518060600160405280603681526020016200431b603691396200027c60201b60201c565b6000600f60006101000a81548160ff021916908315150217905550620004e9565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6200028c620001ae60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620002b26200032760201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200030b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401620003029062000428565b60405180910390fd5b80600c90805190602001906200032392919062000351565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b8280546200035f906200045b565b90600052602060002090601f016020900481019282620003835760008555620003cf565b82601f106200039e57805160ff1916838001178555620003cf565b82800160010185558215620003cf579182015b82811115620003ce578251825591602001919060010190620003b1565b5b509050620003de9190620003e2565b5090565b5b80821115620003fd576000816000905550600101620003e3565b5090565b6000620004106020836200044a565b91506200041d82620004c0565b602082019050919050565b60006020820190508181036000830152620004438162000401565b9050919050565b600082825260208201905092915050565b600060028204905060018216806200047457607f821691505b602082108114156200048b576200048a62000491565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b613dec80620004f96000396000f3fe6080604052600436106101e35760003560e01c8063715018a611610102578063a45ba8e711610095578063d5abeb0111610064578063d5abeb01146106ab578063e8a3d485146106d6578063e985e9c514610701578063f2fde38b1461073e576101e3565b8063a45ba8e714610603578063a475b5dd1461062e578063b88d4fde14610645578063c87b56dd1461066e576101e3565b806395652cfa116100d157806395652cfa1461056a57806395d89b4114610593578063a0712d68146105be578063a22cb465146105da576101e3565b8063715018a6146104d457806385d178f4146104eb5780638da5cb5b14610516578063938e3d7b14610541576101e3565b806323b872dd1161017a57806354214f691161014957806354214f69146104045780636352211e1461042f5780636817c76c1461046c57806370a0823114610497576101e3565b806323b872dd146103725780633ccfd60b1461039b57806342842e0e146103b25780634fdd43cb146103db576101e3565b8063095ea7b3116101b6578063095ea7b3146102b857806318160ddd146102e15780631b22020a1461030c5780632373ac2214610349576101e3565b80630116bc2d146101e857806301ffc9a71461021357806306fdde0314610250578063081812fc1461027b575b600080fd5b3480156101f457600080fd5b506101fd610767565b60405161020a919061308b565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612a4f565b61077a565b604051610247919061308b565b60405180910390f35b34801561025c57600080fd5b5061026561085c565b60405161027291906130a6565b60405180910390f35b34801561028757600080fd5b506102a2600480360381019061029d9190612b3f565b6108ee565b6040516102af9190613024565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906129e2565b610973565b005b3480156102ed57600080fd5b506102f6610a8b565b6040516103039190613368565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e919061285f565b610a91565b6040516103409190613368565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190612a22565b610aa9565b005b34801561037e57600080fd5b50610399600480360381019061039491906128cc565b610b42565b005b3480156103a757600080fd5b506103b0610ba2565b005b3480156103be57600080fd5b506103d960048036038101906103d491906128cc565b610cef565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190612af6565b610d0f565b005b34801561041057600080fd5b50610419610da5565b604051610426919061308b565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612b3f565b610db8565b6040516104639190613024565b60405180910390f35b34801561047857600080fd5b50610481610e6a565b60405161048e9190613368565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b9919061285f565b610e70565b6040516104cb9190613368565b60405180910390f35b3480156104e057600080fd5b506104e9610f28565b005b3480156104f757600080fd5b50610500610fb0565b60405161050d9190613024565b60405180910390f35b34801561052257600080fd5b5061052b610fd6565b6040516105389190613024565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612af6565b611000565b005b34801561057657600080fd5b50610591600480360381019061058c9190612aa9565b611096565b005b34801561059f57600080fd5b506105a8611128565b6040516105b591906130a6565b60405180910390f35b6105d860048036038101906105d39190612b3f565b6111ba565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906129a2565b6113c6565b005b34801561060f57600080fd5b506106186113dc565b60405161062591906130a6565b60405180910390f35b34801561063a57600080fd5b5061064361146a565b005b34801561065157600080fd5b5061066c6004803603810190610667919061291f565b611503565b005b34801561067a57600080fd5b5061069560048036038101906106909190612b3f565b611565565b6040516106a291906130a6565b60405180910390f35b3480156106b757600080fd5b506106c0611690565b6040516106cd9190613368565b60405180910390f35b3480156106e257600080fd5b506106eb611696565b6040516106f891906130a6565b60405180910390f35b34801561070d57600080fd5b506107286004803603810190610723919061288c565b611728565b604051610735919061308b565b60405180910390f35b34801561074a57600080fd5b506107656004803603810190610760919061285f565b6117bc565b005b600a60009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108555750610854826118b4565b5b9050919050565b60606000805461086b90613638565b80601f016020809104026020016040519081016040528092919081815260200182805461089790613638565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f98261191e565b610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906132a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097e82610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906132e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0e61198a565b73ffffffffffffffffffffffffffffffffffffffff161480610a3d5750610a3c81610a3761198a565b611728565b5b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7390613228565b60405180910390fd5b610a868383611992565b505050565b60085481565b600e6020528060005260406000206000915090505481565b610ab161198a565b73ffffffffffffffffffffffffffffffffffffffff16610acf610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c906132c8565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b610b53610b4d61198a565b82611a4b565b610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613308565b60405180910390fd5b610b9d838383611b29565b505050565b610baa61198a565b73ffffffffffffffffffffffffffffffffffffffff16610bc8610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c15906132c8565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610c669061300f565b60006040518083038185875af1925050503d8060008114610ca3576040519150601f19603f3d011682016040523d82523d6000602084013e610ca8565b606091505b5050905080610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613348565b60405180910390fd5b50565b610d0a83838360405180602001604052806000815250611503565b505050565b610d1761198a565b73ffffffffffffffffffffffffffffffffffffffff16610d35610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d82906132c8565b60405180910390fd5b80600c9080519060200190610da1929190612597565b5050565b600f60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613268565b60405180910390fd5b80915050919050565b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613248565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f3061198a565b73ffffffffffffffffffffffffffffffffffffffff16610f4e610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906132c8565b60405180910390fd5b610fae6000611d90565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61100861198a565b73ffffffffffffffffffffffffffffffffffffffff16611026610fd6565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611073906132c8565b60405180910390fd5b8060109080519060200190611092929190612597565b5050565b61109e61198a565b73ffffffffffffffffffffffffffffffffffffffff166110bc610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906132c8565b60405180910390fd5b8181600b919061112392919061261d565b505050565b60606001805461113790613638565b80601f016020809104026020016040519081016040528092919081815260200182805461116390613638565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f906130e8565b60405180910390fd5b600a60009054906101000a900460ff16611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90613128565b60405180910390fd5b6007548161128591906134f4565b3410156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be906130c8565b60405180910390fd5b600954816008546112d8919061346d565b1115611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613208565b60405180910390fd5b60005b818110156113c25760006001600854611335919061346d565b9050600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906113879061369b565b91905055506008600081548092919061139f9061369b565b91905055506113ae3382611e56565b5080806113ba9061369b565b91505061131c565b5050565b6113d86113d161198a565b8383611e74565b5050565b600c80546113e990613638565b80601f016020809104026020016040519081016040528092919081815260200182805461141590613638565b80156114625780601f1061143757610100808354040283529160200191611462565b820191906000526020600020905b81548152906001019060200180831161144557829003601f168201915b505050505081565b61147261198a565b73ffffffffffffffffffffffffffffffffffffffff16611490610fd6565b73ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906132c8565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b61151461150e61198a565b83611a4b565b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613308565b60405180910390fd5b61155f84848484611fe1565b50505050565b606060001515600f60009054906101000a900460ff161515141561161557600c805461159090613638565b80601f01602080910402602001604051908101604052809291908181526020018280546115bc90613638565b80156116095780601f106115de57610100808354040283529160200191611609565b820191906000526020600020905b8154815290600101906020018083116115ec57829003601f168201915b5050505050905061168b565b61161e8261191e565b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613328565b60405180910390fd5b600b6116688361203d565b604051602001611679929190612fe0565b60405160208183030381529060405290505b919050565b60095481565b6060601080546116a590613638565b80601f01602080910402602001604051908101604052809291908181526020018280546116d190613638565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117c461198a565b73ffffffffffffffffffffffffffffffffffffffff166117e2610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906132c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613148565b60405180910390fd5b6118b181611d90565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0583610db8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a568261191e565b611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906131e8565b60405180910390fd5b6000611aa083610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0f57508373ffffffffffffffffffffffffffffffffffffffff16611af7846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b205750611b1f8185611728565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4982610db8565b73ffffffffffffffffffffffffffffffffffffffff1614611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690613168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906131a8565b60405180910390fd5b611c1a83838361219e565b611c25600082611992565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c75919061354e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ccc919061346d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8b8383836121a3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e708282604051806020016040528060008152506121a8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906131c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fd4919061308b565b60405180910390a3505050565b611fec848484611b29565b611ff884848484612203565b612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90613108565b60405180910390fd5b50505050565b60606000821415612085576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612199565b600082905060005b600082146120b75780806120a09061369b565b915050600a826120b091906134c3565b915061208d565b60008167ffffffffffffffff8111156120d3576120d26137d1565b5b6040519080825280601f01601f1916602001820160405280156121055781602001600182028036833780820191505090505b5090505b600085146121925760018261211e919061354e565b9150600a8561212d91906136e4565b6030612139919061346d565b60f81b81838151811061214f5761214e6137a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561218b91906134c3565b9450612109565b8093505050505b919050565b505050565b505050565b6121b2838361239a565b6121bf6000848484612203565b6121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590613108565b60405180910390fd5b505050565b60006122248473ffffffffffffffffffffffffffffffffffffffff16612574565b1561238d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261224d61198a565b8786866040518563ffffffff1660e01b815260040161226f949392919061303f565b602060405180830381600087803b15801561228957600080fd5b505af19250505080156122ba57506040513d601f19601f820116820180604052508101906122b79190612a7c565b60015b61233d573d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b50600081511415612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90613108565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612392565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190613288565b60405180910390fd5b6124138161191e565b15612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90613188565b60405180910390fd5b61245f6000838361219e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124af919061346d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612570600083836121a3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125a390613638565b90600052602060002090601f0160209004810192826125c5576000855561260c565b82601f106125de57805160ff191683800117855561260c565b8280016001018555821561260c579182015b8281111561260b5782518255916020019190600101906125f0565b5b50905061261991906126a3565b5090565b82805461262990613638565b90600052602060002090601f01602090048101928261264b5760008555612692565b82601f1061266457803560ff1916838001178555612692565b82800160010185558215612692579182015b82811115612691578235825591602001919060010190612676565b5b50905061269f91906126a3565b5090565b5b808211156126bc5760008160009055506001016126a4565b5090565b60006126d36126ce846133a8565b613383565b9050828152602081018484840111156126ef576126ee61380f565b5b6126fa8482856135f6565b509392505050565b6000612715612710846133d9565b613383565b9050828152602081018484840111156127315761273061380f565b5b61273c8482856135f6565b509392505050565b60008135905061275381613d5a565b92915050565b60008135905061276881613d71565b92915050565b60008135905061277d81613d88565b92915050565b60008151905061279281613d88565b92915050565b600082601f8301126127ad576127ac613805565b5b81356127bd8482602086016126c0565b91505092915050565b60008083601f8401126127dc576127db613805565b5b8235905067ffffffffffffffff8111156127f9576127f8613800565b5b6020830191508360018202830111156128155761281461380a565b5b9250929050565b600082601f83011261283157612830613805565b5b8135612841848260208601612702565b91505092915050565b60008135905061285981613d9f565b92915050565b60006020828403121561287557612874613819565b5b600061288384828501612744565b91505092915050565b600080604083850312156128a3576128a2613819565b5b60006128b185828601612744565b92505060206128c285828601612744565b9150509250929050565b6000806000606084860312156128e5576128e4613819565b5b60006128f386828701612744565b935050602061290486828701612744565b92505060406129158682870161284a565b9150509250925092565b6000806000806080858703121561293957612938613819565b5b600061294787828801612744565b945050602061295887828801612744565b93505060406129698782880161284a565b925050606085013567ffffffffffffffff81111561298a57612989613814565b5b61299687828801612798565b91505092959194509250565b600080604083850312156129b9576129b8613819565b5b60006129c785828601612744565b92505060206129d885828601612759565b9150509250929050565b600080604083850312156129f9576129f8613819565b5b6000612a0785828601612744565b9250506020612a188582860161284a565b9150509250929050565b600060208284031215612a3857612a37613819565b5b6000612a4684828501612759565b91505092915050565b600060208284031215612a6557612a64613819565b5b6000612a738482850161276e565b91505092915050565b600060208284031215612a9257612a91613819565b5b6000612aa084828501612783565b91505092915050565b60008060208385031215612ac057612abf613819565b5b600083013567ffffffffffffffff811115612ade57612add613814565b5b612aea858286016127c6565b92509250509250929050565b600060208284031215612b0c57612b0b613819565b5b600082013567ffffffffffffffff811115612b2a57612b29613814565b5b612b368482850161281c565b91505092915050565b600060208284031215612b5557612b54613819565b5b6000612b638482850161284a565b91505092915050565b612b7581613582565b82525050565b612b8481613594565b82525050565b6000612b958261341f565b612b9f8185613435565b9350612baf818560208601613605565b612bb88161381e565b840191505092915050565b6000612bce8261342a565b612bd88185613451565b9350612be8818560208601613605565b612bf18161381e565b840191505092915050565b6000612c078261342a565b612c118185613462565b9350612c21818560208601613605565b80840191505092915050565b60008154612c3a81613638565b612c448186613462565b94506001821660008114612c5f5760018114612c7057612ca3565b60ff19831686528186019350612ca3565b612c798561340a565b60005b83811015612c9b57815481890152600182019150602081019050612c7c565b838801955050505b50505092915050565b6000612cb9601083613451565b9150612cc48261382f565b602082019050919050565b6000612cdc601983613451565b9150612ce782613858565b602082019050919050565b6000612cff603283613451565b9150612d0a82613881565b604082019050919050565b6000612d22601383613451565b9150612d2d826138d0565b602082019050919050565b6000612d45602683613451565b9150612d50826138f9565b604082019050919050565b6000612d68602583613451565b9150612d7382613948565b604082019050919050565b6000612d8b601c83613451565b9150612d9682613997565b602082019050919050565b6000612dae602483613451565b9150612db9826139c0565b604082019050919050565b6000612dd1601983613451565b9150612ddc82613a0f565b602082019050919050565b6000612df4602c83613451565b9150612dff82613a38565b604082019050919050565b6000612e17600883613451565b9150612e2282613a87565b602082019050919050565b6000612e3a603883613451565b9150612e4582613ab0565b604082019050919050565b6000612e5d602a83613451565b9150612e6882613aff565b604082019050919050565b6000612e80602983613451565b9150612e8b82613b4e565b604082019050919050565b6000612ea3602083613451565b9150612eae82613b9d565b602082019050919050565b6000612ec6602c83613451565b9150612ed182613bc6565b604082019050919050565b6000612ee9600583613462565b9150612ef482613c15565b600582019050919050565b6000612f0c602083613451565b9150612f1782613c3e565b602082019050919050565b6000612f2f602183613451565b9150612f3a82613c67565b604082019050919050565b6000612f52600083613446565b9150612f5d82613cb6565b600082019050919050565b6000612f75603183613451565b9150612f8082613cb9565b604082019050919050565b6000612f98601583613451565b9150612fa382613d08565b602082019050919050565b6000612fbb600f83613451565b9150612fc682613d31565b602082019050919050565b612fda816135ec565b82525050565b6000612fec8285612c2d565b9150612ff88284612bfc565b915061300382612edc565b91508190509392505050565b600061301a82612f45565b9150819050919050565b60006020820190506130396000830184612b6c565b92915050565b60006080820190506130546000830187612b6c565b6130616020830186612b6c565b61306e6040830185612fd1565b81810360608301526130808184612b8a565b905095945050505050565b60006020820190506130a06000830184612b7b565b92915050565b600060208201905081810360008301526130c08184612bc3565b905092915050565b600060208201905081810360008301526130e181612cac565b9050919050565b6000602082019050818103600083015261310181612ccf565b9050919050565b6000602082019050818103600083015261312181612cf2565b9050919050565b6000602082019050818103600083015261314181612d15565b9050919050565b6000602082019050818103600083015261316181612d38565b9050919050565b6000602082019050818103600083015261318181612d5b565b9050919050565b600060208201905081810360008301526131a181612d7e565b9050919050565b600060208201905081810360008301526131c181612da1565b9050919050565b600060208201905081810360008301526131e181612dc4565b9050919050565b6000602082019050818103600083015261320181612de7565b9050919050565b6000602082019050818103600083015261322181612e0a565b9050919050565b6000602082019050818103600083015261324181612e2d565b9050919050565b6000602082019050818103600083015261326181612e50565b9050919050565b6000602082019050818103600083015261328181612e73565b9050919050565b600060208201905081810360008301526132a181612e96565b9050919050565b600060208201905081810360008301526132c181612eb9565b9050919050565b600060208201905081810360008301526132e181612eff565b9050919050565b6000602082019050818103600083015261330181612f22565b9050919050565b6000602082019050818103600083015261332181612f68565b9050919050565b6000602082019050818103600083015261334181612f8b565b9050919050565b6000602082019050818103600083015261336181612fae565b9050919050565b600060208201905061337d6000830184612fd1565b92915050565b600061338d61339e565b9050613399828261366a565b919050565b6000604051905090565b600067ffffffffffffffff8211156133c3576133c26137d1565b5b6133cc8261381e565b9050602081019050919050565b600067ffffffffffffffff8211156133f4576133f36137d1565b5b6133fd8261381e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613478826135ec565b9150613483836135ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134b8576134b7613715565b5b828201905092915050565b60006134ce826135ec565b91506134d9836135ec565b9250826134e9576134e8613744565b5b828204905092915050565b60006134ff826135ec565b915061350a836135ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561354357613542613715565b5b828202905092915050565b6000613559826135ec565b9150613564836135ec565b92508282101561357757613576613715565b5b828203905092915050565b600061358d826135cc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613623578082015181840152602081019050613608565b83811115613632576000848401525b50505050565b6000600282049050600182168061365057607f821691505b6020821081141561366457613663613773565b5b50919050565b6136738261381e565b810181811067ffffffffffffffff82111715613692576136916137d1565b5b80604052505050565b60006136a6826135ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d9576136d8613715565b5b600182019050919050565b60006136ef826135ec565b91506136fa836135ec565b92508261370a57613709613744565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f77726f6e67206d696e742076616c756500000000000000000000000000000000600082015250565b7f416e6f7468657220636f6e747261637420646574656374656400000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f6d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f74206578697374210000000000000000000000600082015250565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b613d6381613582565b8114613d6e57600080fd5b50565b613d7a81613594565b8114613d8557600080fd5b50565b613d91816135a0565b8114613d9c57600080fd5b50565b613da8816135ec565b8114613db357600080fd5b5056fea2646970667358221220135f49fa54fd4f977e82afae5d87e0c4acce2872c32ea5305ff2ed264384bf8364736f6c63430008070033697066733a2f2f516d614e684c34336e4739706a4e78343436374a74424c6a4366697a3677505741327338347567485058723643472f697066733a2f2f516d655061574250557a7564707252485053796d3239756d476932787779464c4250655052396e445568704757372f
Deployed Bytecode
0x6080604052600436106101e35760003560e01c8063715018a611610102578063a45ba8e711610095578063d5abeb0111610064578063d5abeb01146106ab578063e8a3d485146106d6578063e985e9c514610701578063f2fde38b1461073e576101e3565b8063a45ba8e714610603578063a475b5dd1461062e578063b88d4fde14610645578063c87b56dd1461066e576101e3565b806395652cfa116100d157806395652cfa1461056a57806395d89b4114610593578063a0712d68146105be578063a22cb465146105da576101e3565b8063715018a6146104d457806385d178f4146104eb5780638da5cb5b14610516578063938e3d7b14610541576101e3565b806323b872dd1161017a57806354214f691161014957806354214f69146104045780636352211e1461042f5780636817c76c1461046c57806370a0823114610497576101e3565b806323b872dd146103725780633ccfd60b1461039b57806342842e0e146103b25780634fdd43cb146103db576101e3565b8063095ea7b3116101b6578063095ea7b3146102b857806318160ddd146102e15780631b22020a1461030c5780632373ac2214610349576101e3565b80630116bc2d146101e857806301ffc9a71461021357806306fdde0314610250578063081812fc1461027b575b600080fd5b3480156101f457600080fd5b506101fd610767565b60405161020a919061308b565b60405180910390f35b34801561021f57600080fd5b5061023a60048036038101906102359190612a4f565b61077a565b604051610247919061308b565b60405180910390f35b34801561025c57600080fd5b5061026561085c565b60405161027291906130a6565b60405180910390f35b34801561028757600080fd5b506102a2600480360381019061029d9190612b3f565b6108ee565b6040516102af9190613024565b60405180910390f35b3480156102c457600080fd5b506102df60048036038101906102da91906129e2565b610973565b005b3480156102ed57600080fd5b506102f6610a8b565b6040516103039190613368565b60405180910390f35b34801561031857600080fd5b50610333600480360381019061032e919061285f565b610a91565b6040516103409190613368565b60405180910390f35b34801561035557600080fd5b50610370600480360381019061036b9190612a22565b610aa9565b005b34801561037e57600080fd5b50610399600480360381019061039491906128cc565b610b42565b005b3480156103a757600080fd5b506103b0610ba2565b005b3480156103be57600080fd5b506103d960048036038101906103d491906128cc565b610cef565b005b3480156103e757600080fd5b5061040260048036038101906103fd9190612af6565b610d0f565b005b34801561041057600080fd5b50610419610da5565b604051610426919061308b565b60405180910390f35b34801561043b57600080fd5b5061045660048036038101906104519190612b3f565b610db8565b6040516104639190613024565b60405180910390f35b34801561047857600080fd5b50610481610e6a565b60405161048e9190613368565b60405180910390f35b3480156104a357600080fd5b506104be60048036038101906104b9919061285f565b610e70565b6040516104cb9190613368565b60405180910390f35b3480156104e057600080fd5b506104e9610f28565b005b3480156104f757600080fd5b50610500610fb0565b60405161050d9190613024565b60405180910390f35b34801561052257600080fd5b5061052b610fd6565b6040516105389190613024565b60405180910390f35b34801561054d57600080fd5b5061056860048036038101906105639190612af6565b611000565b005b34801561057657600080fd5b50610591600480360381019061058c9190612aa9565b611096565b005b34801561059f57600080fd5b506105a8611128565b6040516105b591906130a6565b60405180910390f35b6105d860048036038101906105d39190612b3f565b6111ba565b005b3480156105e657600080fd5b5061060160048036038101906105fc91906129a2565b6113c6565b005b34801561060f57600080fd5b506106186113dc565b60405161062591906130a6565b60405180910390f35b34801561063a57600080fd5b5061064361146a565b005b34801561065157600080fd5b5061066c6004803603810190610667919061291f565b611503565b005b34801561067a57600080fd5b5061069560048036038101906106909190612b3f565b611565565b6040516106a291906130a6565b60405180910390f35b3480156106b757600080fd5b506106c0611690565b6040516106cd9190613368565b60405180910390f35b3480156106e257600080fd5b506106eb611696565b6040516106f891906130a6565b60405180910390f35b34801561070d57600080fd5b506107286004803603810190610723919061288c565b611728565b604051610735919061308b565b60405180910390f35b34801561074a57600080fd5b506107656004803603810190610760919061285f565b6117bc565b005b600a60009054906101000a900460ff1681565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061084557507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806108555750610854826118b4565b5b9050919050565b60606000805461086b90613638565b80601f016020809104026020016040519081016040528092919081815260200182805461089790613638565b80156108e45780601f106108b9576101008083540402835291602001916108e4565b820191906000526020600020905b8154815290600101906020018083116108c757829003601f168201915b5050505050905090565b60006108f98261191e565b610938576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161092f906132a8565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061097e82610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109ef576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e6906132e8565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610a0e61198a565b73ffffffffffffffffffffffffffffffffffffffff161480610a3d5750610a3c81610a3761198a565b611728565b5b610a7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a7390613228565b60405180910390fd5b610a868383611992565b505050565b60085481565b600e6020528060005260406000206000915090505481565b610ab161198a565b73ffffffffffffffffffffffffffffffffffffffff16610acf610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610b25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b1c906132c8565b60405180910390fd5b80600a60006101000a81548160ff02191690831515021790555050565b610b53610b4d61198a565b82611a4b565b610b92576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b8990613308565b60405180910390fd5b610b9d838383611b29565b505050565b610baa61198a565b73ffffffffffffffffffffffffffffffffffffffff16610bc8610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610c1e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c15906132c8565b60405180910390fd5b6000600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1647604051610c669061300f565b60006040518083038185875af1925050503d8060008114610ca3576040519150601f19603f3d011682016040523d82523d6000602084013e610ca8565b606091505b5050905080610cec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ce390613348565b60405180910390fd5b50565b610d0a83838360405180602001604052806000815250611503565b505050565b610d1761198a565b73ffffffffffffffffffffffffffffffffffffffff16610d35610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610d8b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d82906132c8565b60405180910390fd5b80600c9080519060200190610da1929190612597565b5050565b600f60009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e61576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5890613268565b60405180910390fd5b80915050919050565b60075481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610ee1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed890613248565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f3061198a565b73ffffffffffffffffffffffffffffffffffffffff16610f4e610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614610fa4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9b906132c8565b60405180910390fd5b610fae6000611d90565b565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b61100861198a565b73ffffffffffffffffffffffffffffffffffffffff16611026610fd6565b73ffffffffffffffffffffffffffffffffffffffff161461107c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611073906132c8565b60405180910390fd5b8060109080519060200190611092929190612597565b5050565b61109e61198a565b73ffffffffffffffffffffffffffffffffffffffff166110bc610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614611112576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611109906132c8565b60405180910390fd5b8181600b919061112392919061261d565b505050565b60606001805461113790613638565b80601f016020809104026020016040519081016040528092919081815260200182805461116390613638565b80156111b05780601f10611185576101008083540402835291602001916111b0565b820191906000526020600020905b81548152906001019060200180831161119357829003601f168201915b5050505050905090565b3373ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611228576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121f906130e8565b60405180910390fd5b600a60009054906101000a900460ff16611277576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126e90613128565b60405180910390fd5b6007548161128591906134f4565b3410156112c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112be906130c8565b60405180910390fd5b600954816008546112d8919061346d565b1115611319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161131090613208565b60405180910390fd5b60005b818110156113c25760006001600854611335919061346d565b9050600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008154809291906113879061369b565b91905055506008600081548092919061139f9061369b565b91905055506113ae3382611e56565b5080806113ba9061369b565b91505061131c565b5050565b6113d86113d161198a565b8383611e74565b5050565b600c80546113e990613638565b80601f016020809104026020016040519081016040528092919081815260200182805461141590613638565b80156114625780601f1061143757610100808354040283529160200191611462565b820191906000526020600020905b81548152906001019060200180831161144557829003601f168201915b505050505081565b61147261198a565b73ffffffffffffffffffffffffffffffffffffffff16611490610fd6565b73ffffffffffffffffffffffffffffffffffffffff16146114e6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114dd906132c8565b60405180910390fd5b6001600f60006101000a81548160ff021916908315150217905550565b61151461150e61198a565b83611a4b565b611553576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154a90613308565b60405180910390fd5b61155f84848484611fe1565b50505050565b606060001515600f60009054906101000a900460ff161515141561161557600c805461159090613638565b80601f01602080910402602001604051908101604052809291908181526020018280546115bc90613638565b80156116095780601f106115de57610100808354040283529160200191611609565b820191906000526020600020905b8154815290600101906020018083116115ec57829003601f168201915b5050505050905061168b565b61161e8261191e565b61165d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165490613328565b60405180910390fd5b600b6116688361203d565b604051602001611679929190612fe0565b60405160208183030381529060405290505b919050565b60095481565b6060601080546116a590613638565b80601f01602080910402602001604051908101604052809291908181526020018280546116d190613638565b801561171e5780601f106116f35761010080835404028352916020019161171e565b820191906000526020600020905b81548152906001019060200180831161170157829003601f168201915b5050505050905090565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6117c461198a565b73ffffffffffffffffffffffffffffffffffffffff166117e2610fd6565b73ffffffffffffffffffffffffffffffffffffffff1614611838576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182f906132c8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156118a8576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189f90613148565b60405180910390fd5b6118b181611d90565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611a0583610db8565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611a568261191e565b611a95576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a8c906131e8565b60405180910390fd5b6000611aa083610db8565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611b0f57508373ffffffffffffffffffffffffffffffffffffffff16611af7846108ee565b73ffffffffffffffffffffffffffffffffffffffff16145b80611b205750611b1f8185611728565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611b4982610db8565b73ffffffffffffffffffffffffffffffffffffffff1614611b9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b9690613168565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c06906131a8565b60405180910390fd5b611c1a83838361219e565b611c25600082611992565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611c75919061354e565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ccc919061346d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611d8b8383836121a3565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b611e708282604051806020016040528060008152506121a8565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611ee3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611eda906131c8565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611fd4919061308b565b60405180910390a3505050565b611fec848484611b29565b611ff884848484612203565b612037576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161202e90613108565b60405180910390fd5b50505050565b60606000821415612085576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612199565b600082905060005b600082146120b75780806120a09061369b565b915050600a826120b091906134c3565b915061208d565b60008167ffffffffffffffff8111156120d3576120d26137d1565b5b6040519080825280601f01601f1916602001820160405280156121055781602001600182028036833780820191505090505b5090505b600085146121925760018261211e919061354e565b9150600a8561212d91906136e4565b6030612139919061346d565b60f81b81838151811061214f5761214e6137a2565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561218b91906134c3565b9450612109565b8093505050505b919050565b505050565b505050565b6121b2838361239a565b6121bf6000848484612203565b6121fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121f590613108565b60405180910390fd5b505050565b60006122248473ffffffffffffffffffffffffffffffffffffffff16612574565b1561238d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261224d61198a565b8786866040518563ffffffff1660e01b815260040161226f949392919061303f565b602060405180830381600087803b15801561228957600080fd5b505af19250505080156122ba57506040513d601f19601f820116820180604052508101906122b79190612a7c565b60015b61233d573d80600081146122ea576040519150601f19603f3d011682016040523d82523d6000602084013e6122ef565b606091505b50600081511415612335576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161232c90613108565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612392565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561240a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161240190613288565b60405180910390fd5b6124138161191e565b15612453576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161244a90613188565b60405180910390fd5b61245f6000838361219e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124af919061346d565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612570600083836121a3565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b8280546125a390613638565b90600052602060002090601f0160209004810192826125c5576000855561260c565b82601f106125de57805160ff191683800117855561260c565b8280016001018555821561260c579182015b8281111561260b5782518255916020019190600101906125f0565b5b50905061261991906126a3565b5090565b82805461262990613638565b90600052602060002090601f01602090048101928261264b5760008555612692565b82601f1061266457803560ff1916838001178555612692565b82800160010185558215612692579182015b82811115612691578235825591602001919060010190612676565b5b50905061269f91906126a3565b5090565b5b808211156126bc5760008160009055506001016126a4565b5090565b60006126d36126ce846133a8565b613383565b9050828152602081018484840111156126ef576126ee61380f565b5b6126fa8482856135f6565b509392505050565b6000612715612710846133d9565b613383565b9050828152602081018484840111156127315761273061380f565b5b61273c8482856135f6565b509392505050565b60008135905061275381613d5a565b92915050565b60008135905061276881613d71565b92915050565b60008135905061277d81613d88565b92915050565b60008151905061279281613d88565b92915050565b600082601f8301126127ad576127ac613805565b5b81356127bd8482602086016126c0565b91505092915050565b60008083601f8401126127dc576127db613805565b5b8235905067ffffffffffffffff8111156127f9576127f8613800565b5b6020830191508360018202830111156128155761281461380a565b5b9250929050565b600082601f83011261283157612830613805565b5b8135612841848260208601612702565b91505092915050565b60008135905061285981613d9f565b92915050565b60006020828403121561287557612874613819565b5b600061288384828501612744565b91505092915050565b600080604083850312156128a3576128a2613819565b5b60006128b185828601612744565b92505060206128c285828601612744565b9150509250929050565b6000806000606084860312156128e5576128e4613819565b5b60006128f386828701612744565b935050602061290486828701612744565b92505060406129158682870161284a565b9150509250925092565b6000806000806080858703121561293957612938613819565b5b600061294787828801612744565b945050602061295887828801612744565b93505060406129698782880161284a565b925050606085013567ffffffffffffffff81111561298a57612989613814565b5b61299687828801612798565b91505092959194509250565b600080604083850312156129b9576129b8613819565b5b60006129c785828601612744565b92505060206129d885828601612759565b9150509250929050565b600080604083850312156129f9576129f8613819565b5b6000612a0785828601612744565b9250506020612a188582860161284a565b9150509250929050565b600060208284031215612a3857612a37613819565b5b6000612a4684828501612759565b91505092915050565b600060208284031215612a6557612a64613819565b5b6000612a738482850161276e565b91505092915050565b600060208284031215612a9257612a91613819565b5b6000612aa084828501612783565b91505092915050565b60008060208385031215612ac057612abf613819565b5b600083013567ffffffffffffffff811115612ade57612add613814565b5b612aea858286016127c6565b92509250509250929050565b600060208284031215612b0c57612b0b613819565b5b600082013567ffffffffffffffff811115612b2a57612b29613814565b5b612b368482850161281c565b91505092915050565b600060208284031215612b5557612b54613819565b5b6000612b638482850161284a565b91505092915050565b612b7581613582565b82525050565b612b8481613594565b82525050565b6000612b958261341f565b612b9f8185613435565b9350612baf818560208601613605565b612bb88161381e565b840191505092915050565b6000612bce8261342a565b612bd88185613451565b9350612be8818560208601613605565b612bf18161381e565b840191505092915050565b6000612c078261342a565b612c118185613462565b9350612c21818560208601613605565b80840191505092915050565b60008154612c3a81613638565b612c448186613462565b94506001821660008114612c5f5760018114612c7057612ca3565b60ff19831686528186019350612ca3565b612c798561340a565b60005b83811015612c9b57815481890152600182019150602081019050612c7c565b838801955050505b50505092915050565b6000612cb9601083613451565b9150612cc48261382f565b602082019050919050565b6000612cdc601983613451565b9150612ce782613858565b602082019050919050565b6000612cff603283613451565b9150612d0a82613881565b604082019050919050565b6000612d22601383613451565b9150612d2d826138d0565b602082019050919050565b6000612d45602683613451565b9150612d50826138f9565b604082019050919050565b6000612d68602583613451565b9150612d7382613948565b604082019050919050565b6000612d8b601c83613451565b9150612d9682613997565b602082019050919050565b6000612dae602483613451565b9150612db9826139c0565b604082019050919050565b6000612dd1601983613451565b9150612ddc82613a0f565b602082019050919050565b6000612df4602c83613451565b9150612dff82613a38565b604082019050919050565b6000612e17600883613451565b9150612e2282613a87565b602082019050919050565b6000612e3a603883613451565b9150612e4582613ab0565b604082019050919050565b6000612e5d602a83613451565b9150612e6882613aff565b604082019050919050565b6000612e80602983613451565b9150612e8b82613b4e565b604082019050919050565b6000612ea3602083613451565b9150612eae82613b9d565b602082019050919050565b6000612ec6602c83613451565b9150612ed182613bc6565b604082019050919050565b6000612ee9600583613462565b9150612ef482613c15565b600582019050919050565b6000612f0c602083613451565b9150612f1782613c3e565b602082019050919050565b6000612f2f602183613451565b9150612f3a82613c67565b604082019050919050565b6000612f52600083613446565b9150612f5d82613cb6565b600082019050919050565b6000612f75603183613451565b9150612f8082613cb9565b604082019050919050565b6000612f98601583613451565b9150612fa382613d08565b602082019050919050565b6000612fbb600f83613451565b9150612fc682613d31565b602082019050919050565b612fda816135ec565b82525050565b6000612fec8285612c2d565b9150612ff88284612bfc565b915061300382612edc565b91508190509392505050565b600061301a82612f45565b9150819050919050565b60006020820190506130396000830184612b6c565b92915050565b60006080820190506130546000830187612b6c565b6130616020830186612b6c565b61306e6040830185612fd1565b81810360608301526130808184612b8a565b905095945050505050565b60006020820190506130a06000830184612b7b565b92915050565b600060208201905081810360008301526130c08184612bc3565b905092915050565b600060208201905081810360008301526130e181612cac565b9050919050565b6000602082019050818103600083015261310181612ccf565b9050919050565b6000602082019050818103600083015261312181612cf2565b9050919050565b6000602082019050818103600083015261314181612d15565b9050919050565b6000602082019050818103600083015261316181612d38565b9050919050565b6000602082019050818103600083015261318181612d5b565b9050919050565b600060208201905081810360008301526131a181612d7e565b9050919050565b600060208201905081810360008301526131c181612da1565b9050919050565b600060208201905081810360008301526131e181612dc4565b9050919050565b6000602082019050818103600083015261320181612de7565b9050919050565b6000602082019050818103600083015261322181612e0a565b9050919050565b6000602082019050818103600083015261324181612e2d565b9050919050565b6000602082019050818103600083015261326181612e50565b9050919050565b6000602082019050818103600083015261328181612e73565b9050919050565b600060208201905081810360008301526132a181612e96565b9050919050565b600060208201905081810360008301526132c181612eb9565b9050919050565b600060208201905081810360008301526132e181612eff565b9050919050565b6000602082019050818103600083015261330181612f22565b9050919050565b6000602082019050818103600083015261332181612f68565b9050919050565b6000602082019050818103600083015261334181612f8b565b9050919050565b6000602082019050818103600083015261336181612fae565b9050919050565b600060208201905061337d6000830184612fd1565b92915050565b600061338d61339e565b9050613399828261366a565b919050565b6000604051905090565b600067ffffffffffffffff8211156133c3576133c26137d1565b5b6133cc8261381e565b9050602081019050919050565b600067ffffffffffffffff8211156133f4576133f36137d1565b5b6133fd8261381e565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613478826135ec565b9150613483836135ec565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156134b8576134b7613715565b5b828201905092915050565b60006134ce826135ec565b91506134d9836135ec565b9250826134e9576134e8613744565b5b828204905092915050565b60006134ff826135ec565b915061350a836135ec565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561354357613542613715565b5b828202905092915050565b6000613559826135ec565b9150613564836135ec565b92508282101561357757613576613715565b5b828203905092915050565b600061358d826135cc565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613623578082015181840152602081019050613608565b83811115613632576000848401525b50505050565b6000600282049050600182168061365057607f821691505b6020821081141561366457613663613773565b5b50919050565b6136738261381e565b810181811067ffffffffffffffff82111715613692576136916137d1565b5b80604052505050565b60006136a6826135ec565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8214156136d9576136d8613715565b5b600182019050919050565b60006136ef826135ec565b91506136fa836135ec565b92508261370a57613709613744565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f77726f6e67206d696e742076616c756500000000000000000000000000000000600082015250565b7f416e6f7468657220636f6e747261637420646574656374656400000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f6d696e74696e67206e6f7420656e61626c656400000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f736f6c64206f7574000000000000000000000000000000000000000000000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f546f6b656e20646f6573206e6f74206578697374210000000000000000000000600082015250565b7f7769746864726177206661696c65640000000000000000000000000000000000600082015250565b613d6381613582565b8114613d6e57600080fd5b50565b613d7a81613594565b8114613d8557600080fd5b50565b613d91816135a0565b8114613d9c57600080fd5b50565b613da8816135ec565b8114613db357600080fd5b5056fea2646970667358221220135f49fa54fd4f977e82afae5d87e0c4acce2872c32ea5305ff2ed264384bf8364736f6c63430008070033
Deployed Bytecode Sourcemap
42244:2723:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42387:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28796:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29741:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31300:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30823:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42323:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42534:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43068:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32050:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44270:178;;;;;;;;;;;;;:::i;:::-;;32460:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43296:138;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42589:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29435:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42292:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29165:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26167:103;;;;;;;;;;;;;:::i;:::-;;42498:29;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25516:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44018:134;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43442:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29910:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44456:506;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31593:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42460:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43215:73;;;;;;;;;;;;;:::i;:::-;;32716:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43572:338;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42356:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44160:102;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31819:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26425:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42387:31;;;;;;;;;;;;;:::o;28796:305::-;28898:4;28950:25;28935:40;;;:11;:40;;;;:105;;;;29007:33;28992:48;;;:11;:48;;;;28935:105;:158;;;;29057:36;29081:11;29057:23;:36::i;:::-;28935:158;28915:178;;28796:305;;;:::o;29741:100::-;29795:13;29828:5;29821:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29741:100;:::o;31300:221::-;31376:7;31404:16;31412:7;31404;:16::i;:::-;31396:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31489:15;:24;31505:7;31489:24;;;;;;;;;;;;;;;;;;;;;31482:31;;31300:221;;;:::o;30823:411::-;30904:13;30920:23;30935:7;30920:14;:23::i;:::-;30904:39;;30968:5;30962:11;;:2;:11;;;;30954:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31062:5;31046:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31071:37;31088:5;31095:12;:10;:12::i;:::-;31071:16;:37::i;:::-;31046:62;31024:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31205:21;31214:2;31218:7;31205:8;:21::i;:::-;30893:341;30823:411;;:::o;42323:26::-;;;;:::o;42534:46::-;;;;;;;;;;;;;;;;;:::o;43068:139::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43179:20:::1;43157:19;;:42;;;;;;;;;;;;;;;;;;43068:139:::0;:::o;32050:339::-;32245:41;32264:12;:10;:12::i;:::-;32278:7;32245:18;:41::i;:::-;32237:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32353:28;32363:4;32369:2;32373:7;32353:9;:28::i;:::-;32050:339;;;:::o;44270:178::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44321:12:::1;44339:14;;;;;;;;;;;:19;;44367:21;44339:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44320:74;;;44413:7;44405:35;;;;;;;;;;;;:::i;:::-;;;;;;;;;44309:139;44270:178::o:0;32460:185::-;32598:39;32615:4;32621:2;32625:7;32598:39;;;;;;;;;;;;:16;:39::i;:::-;32460:185;;;:::o;43296:138::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43408:18:::1;43388:17;:38;;;;;;;;;;;;:::i;:::-;;43296:138:::0;:::o;42589:22::-;;;;;;;;;;;;;:::o;29435:239::-;29507:7;29527:13;29543:7;:16;29551:7;29543:16;;;;;;;;;;;;;;;;;;;;;29527:32;;29595:1;29578:19;;:5;:19;;;;29570:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;29661:5;29654:12;;;29435:239;;;:::o;42292:24::-;;;;:::o;29165:208::-;29237:7;29282:1;29265:19;;:5;:19;;;;29257:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29349:9;:16;29359:5;29349:16;;;;;;;;;;;;;;;;29342:23;;29165:208;;;:::o;26167:103::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26232:30:::1;26259:1;26232:18;:30::i;:::-;26167:103::o:0;42498:29::-;;;;;;;;;;;;;:::o;25516:87::-;25562:7;25589:6;;;;;;;;;;;25582:13;;25516:87;:::o;44018:134::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44126:18:::1;44106:17;:38;;;;;;;;;;;;:::i;:::-;;44018:134:::0;:::o;43442:122::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43543:13:::1;;43528:12;:28;;;;;;;:::i;:::-;;43442:122:::0;;:::o;29910:104::-;29966:13;29999:7;29992:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29910:104;:::o;44456:506::-;43000:10;42988:22;;:9;:22;;;42980:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;44539:19:::1;;;;;;;;;;;44531:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;44626:9;;44614;:21;;;;:::i;:::-;44601:9;:34;;44593:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;44702:9;;44689;44675:11;;:23;;;;:::i;:::-;:36;;44667:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;44741:9;44737:218;44760:9;44756:1;:13;44737:218;;;44791:18;44826:1;44812:11;;:15;;;;:::i;:::-;44791:36;;44842:11;:23;44854:10;44842:23;;;;;;;;;;;;;;;;:25;;;;;;;;;:::i;:::-;;;;;;44882:11;;:13;;;;;;;;;:::i;:::-;;;;;;44910:33;44920:10;44932;44910:9;:33::i;:::-;44776:179;44771:3;;;;;:::i;:::-;;;;44737:218;;;;44456:506:::0;:::o;31593:155::-;31688:52;31707:12;:10;:12::i;:::-;31721:8;31731;31688:18;:52::i;:::-;31593:155;;:::o;42460:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43215:73::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43276:4:::1;43263:10;;:17;;;;;;;;;;;;;;;;;;43215:73::o:0;32716:328::-;32891:41;32910:12;:10;:12::i;:::-;32924:7;32891:18;:41::i;:::-;32883:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32997:39;33011:4;33017:2;33021:7;33030:5;32997:13;:39::i;:::-;32716:328;;;;:::o;43572:338::-;43638:13;43684:5;43670:19;;:10;;;;;;;;;;;:19;;;43666:80;;;43713:17;43706:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43666:80;43766:17;43774:8;43766:7;:17::i;:::-;43758:51;;;;;;;;;;;;:::i;:::-;;;;;;;;;43851:12;43865:26;43882:8;43865:16;:26::i;:::-;43834:67;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43820:82;;43572:338;;;;:::o;42356:24::-;;;;:::o;44160:102::-;44204:13;44237:17;44230:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44160:102;:::o;31819:164::-;31916:4;31940:18;:25;31959:5;31940:25;;;;;;;;;;;;;;;:35;31966:8;31940:35;;;;;;;;;;;;;;;;;;;;;;;;;31933:42;;31819:164;;;;:::o;26425:201::-;25747:12;:10;:12::i;:::-;25736:23;;:7;:5;:7::i;:::-;:23;;;25728:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;26534:1:::1;26514:22;;:8;:22;;;;26506:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26590:28;26609:8;26590:18;:28::i;:::-;26425:201:::0;:::o;11087:157::-;11172:4;11211:25;11196:40;;;:11;:40;;;;11189:47;;11087:157;;;:::o;34554:127::-;34619:4;34671:1;34643:30;;:7;:16;34651:7;34643:16;;;;;;;;;;;;;;;;;;;;;:30;;;;34636:37;;34554:127;;;:::o;3761:98::-;3814:7;3841:10;3834:17;;3761:98;:::o;38700:174::-;38802:2;38775:15;:24;38791:7;38775:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38858:7;38854:2;38820:46;;38829:23;38844:7;38829:14;:23::i;:::-;38820:46;;;;;;;;;;;;38700:174;;:::o;34848:348::-;34941:4;34966:16;34974:7;34966;:16::i;:::-;34958:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35042:13;35058:23;35073:7;35058:14;:23::i;:::-;35042:39;;35111:5;35100:16;;:7;:16;;;:51;;;;35144:7;35120:31;;:20;35132:7;35120:11;:20::i;:::-;:31;;;35100:51;:87;;;;35155:32;35172:5;35179:7;35155:16;:32::i;:::-;35100:87;35092:96;;;34848:348;;;;:::o;37957:625::-;38116:4;38089:31;;:23;38104:7;38089:14;:23::i;:::-;:31;;;38081:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38195:1;38181:16;;:2;:16;;;;38173:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38251:39;38272:4;38278:2;38282:7;38251:20;:39::i;:::-;38355:29;38372:1;38376:7;38355:8;:29::i;:::-;38416:1;38397:9;:15;38407:4;38397:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;38445:1;38428:9;:13;38438:2;38428:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38476:2;38457:7;:16;38465:7;38457:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38515:7;38511:2;38496:27;;38505:4;38496:27;;;;;;;;;;;;38536:38;38556:4;38562:2;38566:7;38536:19;:38::i;:::-;37957:625;;;:::o;26786:191::-;26860:16;26879:6;;;;;;;;;;;26860:25;;26905:8;26896:6;;:17;;;;;;;;;;;;;;;;;;26960:8;26929:40;;26950:8;26929:40;;;;;;;;;;;;26849:128;26786:191;:::o;35538:110::-;35614:26;35624:2;35628:7;35614:26;;;;;;;;;;;;:9;:26::i;:::-;35538:110;;:::o;39016:315::-;39171:8;39162:17;;:5;:17;;;;39154:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39258:8;39220:18;:25;39239:5;39220:25;;;;;;;;;;;;;;;:35;39246:8;39220:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39304:8;39282:41;;39297:5;39282:41;;;39314:8;39282:41;;;;;;:::i;:::-;;;;;;;;39016:315;;;:::o;33926:::-;34083:28;34093:4;34099:2;34103:7;34083:9;:28::i;:::-;34130:48;34153:4;34159:2;34163:7;34172:5;34130:22;:48::i;:::-;34122:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33926:315;;;;:::o;11756:723::-;11812:13;12042:1;12033:5;:10;12029:53;;;12060:10;;;;;;;;;;;;;;;;;;;;;12029:53;12092:12;12107:5;12092:20;;12123:14;12148:78;12163:1;12155:4;:9;12148:78;;12181:8;;;;;:::i;:::-;;;;12212:2;12204:10;;;;;:::i;:::-;;;12148:78;;;12236:19;12268:6;12258:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;12236:39;;12286:154;12302:1;12293:5;:10;12286:154;;12330:1;12320:11;;;;;:::i;:::-;;;12397:2;12389:5;:10;;;;:::i;:::-;12376:2;:24;;;;:::i;:::-;12363:39;;12346:6;12353;12346:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;12426:2;12417:11;;;;;:::i;:::-;;;12286:154;;;12464:6;12450:21;;;;;11756:723;;;;:::o;41267:126::-;;;;:::o;41778:125::-;;;;:::o;35875:321::-;36005:18;36011:2;36015:7;36005:5;:18::i;:::-;36056:54;36087:1;36091:2;36095:7;36104:5;36056:22;:54::i;:::-;36034:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35875:321;;;:::o;39896:799::-;40051:4;40072:15;:2;:13;;;:15::i;:::-;40068:620;;;40124:2;40108:36;;;40145:12;:10;:12::i;:::-;40159:4;40165:7;40174:5;40108:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40104:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40367:1;40350:6;:13;:18;40346:272;;;40393:60;;;;;;;;;;:::i;:::-;;;;;;;;40346:272;40568:6;40562:13;40553:6;40549:2;40545:15;40538:38;40104:529;40241:41;;;40231:51;;;:6;:51;;;;40224:58;;;;;40068:620;40672:4;40665:11;;39896:799;;;;;;;:::o;36532:439::-;36626:1;36612:16;;:2;:16;;;;36604:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;36685:16;36693:7;36685;:16::i;:::-;36684:17;36676:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;36747:45;36776:1;36780:2;36784:7;36747:20;:45::i;:::-;36822:1;36805:9;:13;36815:2;36805:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36853:2;36834:7;:16;36842:7;36834:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36898:7;36894:2;36873:33;;36890:1;36873:33;;;;;;;;;;;;36919:44;36947:1;36951:2;36955:7;36919:19;:44::i;:::-;36532:439;;:::o;14892:326::-;14952:4;15209:1;15187:7;:19;;;:23;15180:30;;14892:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:553::-;1844:8;1854:6;1904:3;1897:4;1889:6;1885:17;1881:27;1871:122;;1912:79;;:::i;:::-;1871:122;2025:6;2012:20;2002:30;;2055:18;2047:6;2044:30;2041:117;;;2077:79;;:::i;:::-;2041:117;2191:4;2183:6;2179:17;2167:29;;2245:3;2237:4;2229:6;2225:17;2215:8;2211:32;2208:41;2205:128;;;2252:79;;:::i;:::-;2205:128;1786:553;;;;;:::o;2359:340::-;2415:5;2464:3;2457:4;2449:6;2445:17;2441:27;2431:122;;2472:79;;:::i;:::-;2431:122;2589:6;2576:20;2614:79;2689:3;2681:6;2674:4;2666:6;2662:17;2614:79;:::i;:::-;2605:88;;2421:278;2359:340;;;;:::o;2705:139::-;2751:5;2789:6;2776:20;2767:29;;2805:33;2832:5;2805:33;:::i;:::-;2705:139;;;;:::o;2850:329::-;2909:6;2958:2;2946:9;2937:7;2933:23;2929:32;2926:119;;;2964:79;;:::i;:::-;2926:119;3084:1;3109:53;3154:7;3145:6;3134:9;3130:22;3109:53;:::i;:::-;3099:63;;3055:117;2850:329;;;;:::o;3185:474::-;3253:6;3261;3310:2;3298:9;3289:7;3285:23;3281:32;3278:119;;;3316:79;;:::i;:::-;3278:119;3436:1;3461:53;3506:7;3497:6;3486:9;3482:22;3461:53;:::i;:::-;3451:63;;3407:117;3563:2;3589:53;3634:7;3625:6;3614:9;3610:22;3589:53;:::i;:::-;3579:63;;3534:118;3185:474;;;;;:::o;3665:619::-;3742:6;3750;3758;3807:2;3795:9;3786:7;3782:23;3778:32;3775:119;;;3813:79;;:::i;:::-;3775:119;3933:1;3958:53;4003:7;3994:6;3983:9;3979:22;3958:53;:::i;:::-;3948:63;;3904:117;4060:2;4086:53;4131:7;4122:6;4111:9;4107:22;4086:53;:::i;:::-;4076:63;;4031:118;4188:2;4214:53;4259:7;4250:6;4239:9;4235:22;4214:53;:::i;:::-;4204:63;;4159:118;3665:619;;;;;:::o;4290:943::-;4385:6;4393;4401;4409;4458:3;4446:9;4437:7;4433:23;4429:33;4426:120;;;4465:79;;:::i;:::-;4426:120;4585:1;4610:53;4655:7;4646:6;4635:9;4631:22;4610:53;:::i;:::-;4600:63;;4556:117;4712:2;4738:53;4783:7;4774:6;4763:9;4759:22;4738:53;:::i;:::-;4728:63;;4683:118;4840:2;4866:53;4911:7;4902:6;4891:9;4887:22;4866:53;:::i;:::-;4856:63;;4811:118;4996:2;4985:9;4981:18;4968:32;5027:18;5019:6;5016:30;5013:117;;;5049:79;;:::i;:::-;5013:117;5154:62;5208:7;5199:6;5188:9;5184:22;5154:62;:::i;:::-;5144:72;;4939:287;4290:943;;;;;;;:::o;5239:468::-;5304:6;5312;5361:2;5349:9;5340:7;5336:23;5332:32;5329:119;;;5367:79;;:::i;:::-;5329:119;5487:1;5512:53;5557:7;5548:6;5537:9;5533:22;5512:53;:::i;:::-;5502:63;;5458:117;5614:2;5640:50;5682:7;5673:6;5662:9;5658:22;5640:50;:::i;:::-;5630:60;;5585:115;5239:468;;;;;:::o;5713:474::-;5781:6;5789;5838:2;5826:9;5817:7;5813:23;5809:32;5806:119;;;5844:79;;:::i;:::-;5806:119;5964:1;5989:53;6034:7;6025:6;6014:9;6010:22;5989:53;:::i;:::-;5979:63;;5935:117;6091:2;6117:53;6162:7;6153:6;6142:9;6138:22;6117:53;:::i;:::-;6107:63;;6062:118;5713:474;;;;;:::o;6193:323::-;6249:6;6298:2;6286:9;6277:7;6273:23;6269:32;6266:119;;;6304:79;;:::i;:::-;6266:119;6424:1;6449:50;6491:7;6482:6;6471:9;6467:22;6449:50;:::i;:::-;6439:60;;6395:114;6193:323;;;;:::o;6522:327::-;6580:6;6629:2;6617:9;6608:7;6604:23;6600:32;6597:119;;;6635:79;;:::i;:::-;6597:119;6755:1;6780:52;6824:7;6815:6;6804:9;6800:22;6780:52;:::i;:::-;6770:62;;6726:116;6522:327;;;;:::o;6855:349::-;6924:6;6973:2;6961:9;6952:7;6948:23;6944:32;6941:119;;;6979:79;;:::i;:::-;6941:119;7099:1;7124:63;7179:7;7170:6;7159:9;7155:22;7124:63;:::i;:::-;7114:73;;7070:127;6855:349;;;;:::o;7210:529::-;7281:6;7289;7338:2;7326:9;7317:7;7313:23;7309:32;7306:119;;;7344:79;;:::i;:::-;7306:119;7492:1;7481:9;7477:17;7464:31;7522:18;7514:6;7511:30;7508:117;;;7544:79;;:::i;:::-;7508:117;7657:65;7714:7;7705:6;7694:9;7690:22;7657:65;:::i;:::-;7639:83;;;;7435:297;7210:529;;;;;:::o;7745:509::-;7814:6;7863:2;7851:9;7842:7;7838:23;7834:32;7831:119;;;7869:79;;:::i;:::-;7831:119;8017:1;8006:9;8002:17;7989:31;8047:18;8039:6;8036:30;8033:117;;;8069:79;;:::i;:::-;8033:117;8174:63;8229:7;8220:6;8209:9;8205:22;8174:63;:::i;:::-;8164:73;;7960:287;7745:509;;;;:::o;8260:329::-;8319:6;8368:2;8356:9;8347:7;8343:23;8339:32;8336:119;;;8374:79;;:::i;:::-;8336:119;8494:1;8519:53;8564:7;8555:6;8544:9;8540:22;8519:53;:::i;:::-;8509:63;;8465:117;8260:329;;;;:::o;8595:118::-;8682:24;8700:5;8682:24;:::i;:::-;8677:3;8670:37;8595:118;;:::o;8719:109::-;8800:21;8815:5;8800:21;:::i;:::-;8795:3;8788:34;8719:109;;:::o;8834:360::-;8920:3;8948:38;8980:5;8948:38;:::i;:::-;9002:70;9065:6;9060:3;9002:70;:::i;:::-;8995:77;;9081:52;9126:6;9121:3;9114:4;9107:5;9103:16;9081:52;:::i;:::-;9158:29;9180:6;9158:29;:::i;:::-;9153:3;9149:39;9142:46;;8924:270;8834:360;;;;:::o;9200:364::-;9288:3;9316:39;9349:5;9316:39;:::i;:::-;9371:71;9435:6;9430:3;9371:71;:::i;:::-;9364:78;;9451:52;9496:6;9491:3;9484:4;9477:5;9473:16;9451:52;:::i;:::-;9528:29;9550:6;9528:29;:::i;:::-;9523:3;9519:39;9512:46;;9292:272;9200:364;;;;:::o;9570:377::-;9676:3;9704:39;9737:5;9704:39;:::i;:::-;9759:89;9841:6;9836:3;9759:89;:::i;:::-;9752:96;;9857:52;9902:6;9897:3;9890:4;9883:5;9879:16;9857:52;:::i;:::-;9934:6;9929:3;9925:16;9918:23;;9680:267;9570:377;;;;:::o;9977:845::-;10080:3;10117:5;10111:12;10146:36;10172:9;10146:36;:::i;:::-;10198:89;10280:6;10275:3;10198:89;:::i;:::-;10191:96;;10318:1;10307:9;10303:17;10334:1;10329:137;;;;10480:1;10475:341;;;;10296:520;;10329:137;10413:4;10409:9;10398;10394:25;10389:3;10382:38;10449:6;10444:3;10440:16;10433:23;;10329:137;;10475:341;10542:38;10574:5;10542:38;:::i;:::-;10602:1;10616:154;10630:6;10627:1;10624:13;10616:154;;;10704:7;10698:14;10694:1;10689:3;10685:11;10678:35;10754:1;10745:7;10741:15;10730:26;;10652:4;10649:1;10645:12;10640:17;;10616:154;;;10799:6;10794:3;10790:16;10783:23;;10482:334;;10296:520;;10084:738;;9977:845;;;;:::o;10828:366::-;10970:3;10991:67;11055:2;11050:3;10991:67;:::i;:::-;10984:74;;11067:93;11156:3;11067:93;:::i;:::-;11185:2;11180:3;11176:12;11169:19;;10828:366;;;:::o;11200:::-;11342:3;11363:67;11427:2;11422:3;11363:67;:::i;:::-;11356:74;;11439:93;11528:3;11439:93;:::i;:::-;11557:2;11552:3;11548:12;11541:19;;11200:366;;;:::o;11572:::-;11714:3;11735:67;11799:2;11794:3;11735:67;:::i;:::-;11728:74;;11811:93;11900:3;11811:93;:::i;:::-;11929:2;11924:3;11920:12;11913:19;;11572:366;;;:::o;11944:::-;12086:3;12107:67;12171:2;12166:3;12107:67;:::i;:::-;12100:74;;12183:93;12272:3;12183:93;:::i;:::-;12301:2;12296:3;12292:12;12285:19;;11944:366;;;:::o;12316:::-;12458:3;12479:67;12543:2;12538:3;12479:67;:::i;:::-;12472:74;;12555:93;12644:3;12555:93;:::i;:::-;12673:2;12668:3;12664:12;12657:19;;12316:366;;;:::o;12688:::-;12830:3;12851:67;12915:2;12910:3;12851:67;:::i;:::-;12844:74;;12927:93;13016:3;12927:93;:::i;:::-;13045:2;13040:3;13036:12;13029:19;;12688:366;;;:::o;13060:::-;13202:3;13223:67;13287:2;13282:3;13223:67;:::i;:::-;13216:74;;13299:93;13388:3;13299:93;:::i;:::-;13417:2;13412:3;13408:12;13401:19;;13060:366;;;:::o;13432:::-;13574:3;13595:67;13659:2;13654:3;13595:67;:::i;:::-;13588:74;;13671:93;13760:3;13671:93;:::i;:::-;13789:2;13784:3;13780:12;13773:19;;13432:366;;;:::o;13804:::-;13946:3;13967:67;14031:2;14026:3;13967:67;:::i;:::-;13960:74;;14043:93;14132:3;14043:93;:::i;:::-;14161:2;14156:3;14152:12;14145:19;;13804:366;;;:::o;14176:::-;14318:3;14339:67;14403:2;14398:3;14339:67;:::i;:::-;14332:74;;14415:93;14504:3;14415:93;:::i;:::-;14533:2;14528:3;14524:12;14517:19;;14176:366;;;:::o;14548:365::-;14690:3;14711:66;14775:1;14770:3;14711:66;:::i;:::-;14704:73;;14786:93;14875:3;14786:93;:::i;:::-;14904:2;14899:3;14895:12;14888:19;;14548:365;;;:::o;14919:366::-;15061:3;15082:67;15146:2;15141:3;15082:67;:::i;:::-;15075:74;;15158:93;15247:3;15158:93;:::i;:::-;15276:2;15271:3;15267:12;15260:19;;14919:366;;;:::o;15291:::-;15433:3;15454:67;15518:2;15513:3;15454:67;:::i;:::-;15447:74;;15530:93;15619:3;15530:93;:::i;:::-;15648:2;15643:3;15639:12;15632:19;;15291:366;;;:::o;15663:::-;15805:3;15826:67;15890:2;15885:3;15826:67;:::i;:::-;15819:74;;15902:93;15991:3;15902:93;:::i;:::-;16020:2;16015:3;16011:12;16004:19;;15663:366;;;:::o;16035:::-;16177:3;16198:67;16262:2;16257:3;16198:67;:::i;:::-;16191:74;;16274:93;16363:3;16274:93;:::i;:::-;16392:2;16387:3;16383:12;16376:19;;16035:366;;;:::o;16407:::-;16549:3;16570:67;16634:2;16629:3;16570:67;:::i;:::-;16563:74;;16646:93;16735:3;16646:93;:::i;:::-;16764:2;16759:3;16755:12;16748:19;;16407:366;;;:::o;16779:400::-;16939:3;16960:84;17042:1;17037:3;16960:84;:::i;:::-;16953:91;;17053:93;17142:3;17053:93;:::i;:::-;17171:1;17166:3;17162:11;17155:18;;16779:400;;;:::o;17185:366::-;17327:3;17348:67;17412:2;17407:3;17348:67;:::i;:::-;17341:74;;17424:93;17513:3;17424:93;:::i;:::-;17542:2;17537:3;17533:12;17526:19;;17185:366;;;:::o;17557:::-;17699:3;17720:67;17784:2;17779:3;17720:67;:::i;:::-;17713:74;;17796:93;17885:3;17796:93;:::i;:::-;17914:2;17909:3;17905:12;17898:19;;17557:366;;;:::o;17929:398::-;18088:3;18109:83;18190:1;18185:3;18109:83;:::i;:::-;18102:90;;18201:93;18290:3;18201:93;:::i;:::-;18319:1;18314:3;18310:11;18303:18;;17929:398;;;:::o;18333:366::-;18475:3;18496:67;18560:2;18555:3;18496:67;:::i;:::-;18489:74;;18572:93;18661:3;18572:93;:::i;:::-;18690:2;18685:3;18681:12;18674:19;;18333:366;;;:::o;18705:::-;18847:3;18868:67;18932:2;18927:3;18868:67;:::i;:::-;18861:74;;18944:93;19033:3;18944:93;:::i;:::-;19062:2;19057:3;19053:12;19046:19;;18705:366;;;:::o;19077:::-;19219:3;19240:67;19304:2;19299:3;19240:67;:::i;:::-;19233:74;;19316:93;19405:3;19316:93;:::i;:::-;19434:2;19429:3;19425:12;19418:19;;19077:366;;;:::o;19449:118::-;19536:24;19554:5;19536:24;:::i;:::-;19531:3;19524:37;19449:118;;:::o;19573:695::-;19851:3;19873:92;19961:3;19952:6;19873:92;:::i;:::-;19866:99;;19982:95;20073:3;20064:6;19982:95;:::i;:::-;19975:102;;20094:148;20238:3;20094:148;:::i;:::-;20087:155;;20259:3;20252:10;;19573:695;;;;;:::o;20274:379::-;20458:3;20480:147;20623:3;20480:147;:::i;:::-;20473:154;;20644:3;20637:10;;20274:379;;;:::o;20659:222::-;20752:4;20790:2;20779:9;20775:18;20767:26;;20803:71;20871:1;20860:9;20856:17;20847:6;20803:71;:::i;:::-;20659:222;;;;:::o;20887:640::-;21082:4;21120:3;21109:9;21105:19;21097:27;;21134:71;21202:1;21191:9;21187:17;21178:6;21134:71;:::i;:::-;21215:72;21283:2;21272:9;21268:18;21259:6;21215:72;:::i;:::-;21297;21365:2;21354:9;21350:18;21341:6;21297:72;:::i;:::-;21416:9;21410:4;21406:20;21401:2;21390:9;21386:18;21379:48;21444:76;21515:4;21506:6;21444:76;:::i;:::-;21436:84;;20887:640;;;;;;;:::o;21533:210::-;21620:4;21658:2;21647:9;21643:18;21635:26;;21671:65;21733:1;21722:9;21718:17;21709:6;21671:65;:::i;:::-;21533:210;;;;:::o;21749:313::-;21862:4;21900:2;21889:9;21885:18;21877:26;;21949:9;21943:4;21939:20;21935:1;21924:9;21920:17;21913:47;21977:78;22050:4;22041:6;21977:78;:::i;:::-;21969:86;;21749:313;;;;:::o;22068:419::-;22234:4;22272:2;22261:9;22257:18;22249:26;;22321:9;22315:4;22311:20;22307:1;22296:9;22292:17;22285:47;22349:131;22475:4;22349:131;:::i;:::-;22341:139;;22068:419;;;:::o;22493:::-;22659:4;22697:2;22686:9;22682:18;22674:26;;22746:9;22740:4;22736:20;22732:1;22721:9;22717:17;22710:47;22774:131;22900:4;22774:131;:::i;:::-;22766:139;;22493:419;;;:::o;22918:::-;23084:4;23122:2;23111:9;23107:18;23099:26;;23171:9;23165:4;23161:20;23157:1;23146:9;23142:17;23135:47;23199:131;23325:4;23199:131;:::i;:::-;23191:139;;22918:419;;;:::o;23343:::-;23509:4;23547:2;23536:9;23532:18;23524:26;;23596:9;23590:4;23586:20;23582:1;23571:9;23567:17;23560:47;23624:131;23750:4;23624:131;:::i;:::-;23616:139;;23343:419;;;:::o;23768:::-;23934:4;23972:2;23961:9;23957:18;23949:26;;24021:9;24015:4;24011:20;24007:1;23996:9;23992:17;23985:47;24049:131;24175:4;24049:131;:::i;:::-;24041:139;;23768:419;;;:::o;24193:::-;24359:4;24397:2;24386:9;24382:18;24374:26;;24446:9;24440:4;24436:20;24432:1;24421:9;24417:17;24410:47;24474:131;24600:4;24474:131;:::i;:::-;24466:139;;24193:419;;;:::o;24618:::-;24784:4;24822:2;24811:9;24807:18;24799:26;;24871:9;24865:4;24861:20;24857:1;24846:9;24842:17;24835:47;24899:131;25025:4;24899:131;:::i;:::-;24891:139;;24618:419;;;:::o;25043:::-;25209:4;25247:2;25236:9;25232:18;25224:26;;25296:9;25290:4;25286:20;25282:1;25271:9;25267:17;25260:47;25324:131;25450:4;25324:131;:::i;:::-;25316:139;;25043:419;;;:::o;25468:::-;25634:4;25672:2;25661:9;25657:18;25649:26;;25721:9;25715:4;25711:20;25707:1;25696:9;25692:17;25685:47;25749:131;25875:4;25749:131;:::i;:::-;25741:139;;25468:419;;;:::o;25893:::-;26059:4;26097:2;26086:9;26082:18;26074:26;;26146:9;26140:4;26136:20;26132:1;26121:9;26117:17;26110:47;26174:131;26300:4;26174:131;:::i;:::-;26166:139;;25893:419;;;:::o;26318:::-;26484:4;26522:2;26511:9;26507:18;26499:26;;26571:9;26565:4;26561:20;26557:1;26546:9;26542:17;26535:47;26599:131;26725:4;26599:131;:::i;:::-;26591:139;;26318:419;;;:::o;26743:::-;26909:4;26947:2;26936:9;26932:18;26924:26;;26996:9;26990:4;26986:20;26982:1;26971:9;26967:17;26960:47;27024:131;27150:4;27024:131;:::i;:::-;27016:139;;26743:419;;;:::o;27168:::-;27334:4;27372:2;27361:9;27357:18;27349:26;;27421:9;27415:4;27411:20;27407:1;27396:9;27392:17;27385:47;27449:131;27575:4;27449:131;:::i;:::-;27441:139;;27168:419;;;:::o;27593:::-;27759:4;27797:2;27786:9;27782:18;27774:26;;27846:9;27840:4;27836:20;27832:1;27821:9;27817:17;27810:47;27874:131;28000:4;27874:131;:::i;:::-;27866:139;;27593:419;;;:::o;28018:::-;28184:4;28222:2;28211:9;28207:18;28199:26;;28271:9;28265:4;28261:20;28257:1;28246:9;28242:17;28235:47;28299:131;28425:4;28299:131;:::i;:::-;28291:139;;28018:419;;;:::o;28443:::-;28609:4;28647:2;28636:9;28632:18;28624:26;;28696:9;28690:4;28686:20;28682:1;28671:9;28667:17;28660:47;28724:131;28850:4;28724:131;:::i;:::-;28716:139;;28443:419;;;:::o;28868:::-;29034:4;29072:2;29061:9;29057:18;29049:26;;29121:9;29115:4;29111:20;29107:1;29096:9;29092:17;29085:47;29149:131;29275:4;29149:131;:::i;:::-;29141:139;;28868:419;;;:::o;29293:::-;29459:4;29497:2;29486:9;29482:18;29474:26;;29546:9;29540:4;29536:20;29532:1;29521:9;29517:17;29510:47;29574:131;29700:4;29574:131;:::i;:::-;29566:139;;29293:419;;;:::o;29718:::-;29884:4;29922:2;29911:9;29907:18;29899:26;;29971:9;29965:4;29961:20;29957:1;29946:9;29942:17;29935:47;29999:131;30125:4;29999:131;:::i;:::-;29991:139;;29718:419;;;:::o;30143:::-;30309:4;30347:2;30336:9;30332:18;30324:26;;30396:9;30390:4;30386:20;30382:1;30371:9;30367:17;30360:47;30424:131;30550:4;30424:131;:::i;:::-;30416:139;;30143:419;;;:::o;30568:::-;30734:4;30772:2;30761:9;30757:18;30749:26;;30821:9;30815:4;30811:20;30807:1;30796:9;30792:17;30785:47;30849:131;30975:4;30849:131;:::i;:::-;30841:139;;30568:419;;;:::o;30993:222::-;31086:4;31124:2;31113:9;31109:18;31101:26;;31137:71;31205:1;31194:9;31190:17;31181:6;31137:71;:::i;:::-;30993:222;;;;:::o;31221:129::-;31255:6;31282:20;;:::i;:::-;31272:30;;31311:33;31339:4;31331:6;31311:33;:::i;:::-;31221:129;;;:::o;31356:75::-;31389:6;31422:2;31416:9;31406:19;;31356:75;:::o;31437:307::-;31498:4;31588:18;31580:6;31577:30;31574:56;;;31610:18;;:::i;:::-;31574:56;31648:29;31670:6;31648:29;:::i;:::-;31640:37;;31732:4;31726;31722:15;31714:23;;31437:307;;;:::o;31750:308::-;31812:4;31902:18;31894:6;31891:30;31888:56;;;31924:18;;:::i;:::-;31888:56;31962:29;31984:6;31962:29;:::i;:::-;31954:37;;32046:4;32040;32036:15;32028:23;;31750:308;;;:::o;32064:141::-;32113:4;32136:3;32128:11;;32159:3;32156:1;32149:14;32193:4;32190:1;32180:18;32172:26;;32064:141;;;:::o;32211:98::-;32262:6;32296:5;32290:12;32280:22;;32211:98;;;:::o;32315:99::-;32367:6;32401:5;32395:12;32385:22;;32315:99;;;:::o;32420:168::-;32503:11;32537:6;32532:3;32525:19;32577:4;32572:3;32568:14;32553:29;;32420:168;;;;:::o;32594:147::-;32695:11;32732:3;32717:18;;32594:147;;;;:::o;32747:169::-;32831:11;32865:6;32860:3;32853:19;32905:4;32900:3;32896:14;32881:29;;32747:169;;;;:::o;32922:148::-;33024:11;33061:3;33046:18;;32922:148;;;;:::o;33076:305::-;33116:3;33135:20;33153:1;33135:20;:::i;:::-;33130:25;;33169:20;33187:1;33169:20;:::i;:::-;33164:25;;33323:1;33255:66;33251:74;33248:1;33245:81;33242:107;;;33329:18;;:::i;:::-;33242:107;33373:1;33370;33366:9;33359:16;;33076:305;;;;:::o;33387:185::-;33427:1;33444:20;33462:1;33444:20;:::i;:::-;33439:25;;33478:20;33496:1;33478:20;:::i;:::-;33473:25;;33517:1;33507:35;;33522:18;;:::i;:::-;33507:35;33564:1;33561;33557:9;33552:14;;33387:185;;;;:::o;33578:348::-;33618:7;33641:20;33659:1;33641:20;:::i;:::-;33636:25;;33675:20;33693:1;33675:20;:::i;:::-;33670:25;;33863:1;33795:66;33791:74;33788:1;33785:81;33780:1;33773:9;33766:17;33762:105;33759:131;;;33870:18;;:::i;:::-;33759:131;33918:1;33915;33911:9;33900:20;;33578:348;;;;:::o;33932:191::-;33972:4;33992:20;34010:1;33992:20;:::i;:::-;33987:25;;34026:20;34044:1;34026:20;:::i;:::-;34021:25;;34065:1;34062;34059:8;34056:34;;;34070:18;;:::i;:::-;34056:34;34115:1;34112;34108:9;34100:17;;33932:191;;;;:::o;34129:96::-;34166:7;34195:24;34213:5;34195:24;:::i;:::-;34184:35;;34129:96;;;:::o;34231:90::-;34265:7;34308:5;34301:13;34294:21;34283:32;;34231:90;;;:::o;34327:149::-;34363:7;34403:66;34396:5;34392:78;34381:89;;34327:149;;;:::o;34482:126::-;34519:7;34559:42;34552:5;34548:54;34537:65;;34482:126;;;:::o;34614:77::-;34651:7;34680:5;34669:16;;34614:77;;;:::o;34697:154::-;34781:6;34776:3;34771;34758:30;34843:1;34834:6;34829:3;34825:16;34818:27;34697:154;;;:::o;34857:307::-;34925:1;34935:113;34949:6;34946:1;34943:13;34935:113;;;35034:1;35029:3;35025:11;35019:18;35015:1;35010:3;35006:11;34999:39;34971:2;34968:1;34964:10;34959:15;;34935:113;;;35066:6;35063:1;35060:13;35057:101;;;35146:1;35137:6;35132:3;35128:16;35121:27;35057:101;34906:258;34857:307;;;:::o;35170:320::-;35214:6;35251:1;35245:4;35241:12;35231:22;;35298:1;35292:4;35288:12;35319:18;35309:81;;35375:4;35367:6;35363:17;35353:27;;35309:81;35437:2;35429:6;35426:14;35406:18;35403:38;35400:84;;;35456:18;;:::i;:::-;35400:84;35221:269;35170:320;;;:::o;35496:281::-;35579:27;35601:4;35579:27;:::i;:::-;35571:6;35567:40;35709:6;35697:10;35694:22;35673:18;35661:10;35658:34;35655:62;35652:88;;;35720:18;;:::i;:::-;35652:88;35760:10;35756:2;35749:22;35539:238;35496:281;;:::o;35783:233::-;35822:3;35845:24;35863:5;35845:24;:::i;:::-;35836:33;;35891:66;35884:5;35881:77;35878:103;;;35961:18;;:::i;:::-;35878:103;36008:1;36001:5;35997:13;35990:20;;35783:233;;;:::o;36022:176::-;36054:1;36071:20;36089:1;36071:20;:::i;:::-;36066:25;;36105:20;36123:1;36105:20;:::i;:::-;36100:25;;36144:1;36134:35;;36149:18;;:::i;:::-;36134:35;36190:1;36187;36183:9;36178:14;;36022:176;;;;:::o;36204:180::-;36252:77;36249:1;36242:88;36349:4;36346:1;36339:15;36373:4;36370:1;36363:15;36390:180;36438:77;36435:1;36428:88;36535:4;36532:1;36525:15;36559:4;36556:1;36549:15;36576:180;36624:77;36621:1;36614:88;36721:4;36718:1;36711:15;36745:4;36742:1;36735:15;36762:180;36810:77;36807:1;36800:88;36907:4;36904:1;36897:15;36931:4;36928:1;36921:15;36948:180;36996:77;36993:1;36986:88;37093:4;37090:1;37083:15;37117:4;37114:1;37107:15;37134:117;37243:1;37240;37233:12;37257:117;37366:1;37363;37356:12;37380:117;37489:1;37486;37479:12;37503:117;37612:1;37609;37602:12;37626:117;37735:1;37732;37725:12;37749:117;37858:1;37855;37848:12;37872:102;37913:6;37964:2;37960:7;37955:2;37948:5;37944:14;37940:28;37930:38;;37872:102;;;:::o;37980:166::-;38120:18;38116:1;38108:6;38104:14;38097:42;37980:166;:::o;38152:175::-;38292:27;38288:1;38280:6;38276:14;38269:51;38152:175;:::o;38333:237::-;38473:34;38469:1;38461:6;38457:14;38450:58;38542:20;38537:2;38529:6;38525:15;38518:45;38333:237;:::o;38576:169::-;38716:21;38712:1;38704:6;38700:14;38693:45;38576:169;:::o;38751:225::-;38891:34;38887:1;38879:6;38875:14;38868:58;38960:8;38955:2;38947:6;38943:15;38936:33;38751:225;:::o;38982:224::-;39122:34;39118:1;39110:6;39106:14;39099:58;39191:7;39186:2;39178:6;39174:15;39167:32;38982:224;:::o;39212:178::-;39352:30;39348:1;39340:6;39336:14;39329:54;39212:178;:::o;39396:223::-;39536:34;39532:1;39524:6;39520:14;39513:58;39605:6;39600:2;39592:6;39588:15;39581:31;39396:223;:::o;39625:175::-;39765:27;39761:1;39753:6;39749:14;39742:51;39625:175;:::o;39806:231::-;39946:34;39942:1;39934:6;39930:14;39923:58;40015:14;40010:2;40002:6;39998:15;39991:39;39806:231;:::o;40043:158::-;40183:10;40179:1;40171:6;40167:14;40160:34;40043:158;:::o;40207:243::-;40347:34;40343:1;40335:6;40331:14;40324:58;40416:26;40411:2;40403:6;40399:15;40392:51;40207:243;:::o;40456:229::-;40596:34;40592:1;40584:6;40580:14;40573:58;40665:12;40660:2;40652:6;40648:15;40641:37;40456:229;:::o;40691:228::-;40831:34;40827:1;40819:6;40815:14;40808:58;40900:11;40895:2;40887:6;40883:15;40876:36;40691:228;:::o;40925:182::-;41065:34;41061:1;41053:6;41049:14;41042:58;40925:182;:::o;41113:231::-;41253:34;41249:1;41241:6;41237:14;41230:58;41322:14;41317:2;41309:6;41305:15;41298:39;41113:231;:::o;41350:155::-;41490:7;41486:1;41478:6;41474:14;41467:31;41350:155;:::o;41511:182::-;41651:34;41647:1;41639:6;41635:14;41628:58;41511:182;:::o;41699:220::-;41839:34;41835:1;41827:6;41823:14;41816:58;41908:3;41903:2;41895:6;41891:15;41884:28;41699:220;:::o;41925:114::-;;:::o;42045:236::-;42185:34;42181:1;42173:6;42169:14;42162:58;42254:19;42249:2;42241:6;42237:15;42230:44;42045:236;:::o;42287:171::-;42427:23;42423:1;42415:6;42411:14;42404:47;42287:171;:::o;42464:165::-;42604:17;42600:1;42592:6;42588:14;42581:41;42464:165;:::o;42635:122::-;42708:24;42726:5;42708:24;:::i;:::-;42701:5;42698:35;42688:63;;42747:1;42744;42737:12;42688:63;42635:122;:::o;42763:116::-;42833:21;42848:5;42833:21;:::i;:::-;42826:5;42823:32;42813:60;;42869:1;42866;42859:12;42813:60;42763:116;:::o;42885:120::-;42957:23;42974:5;42957:23;:::i;:::-;42950:5;42947:34;42937:62;;42995:1;42992;42985:12;42937:62;42885:120;:::o;43011:122::-;43084:24;43102:5;43084:24;:::i;:::-;43077:5;43074:35;43064:63;;43123:1;43120;43113:12;43064:63;43011:122;:::o
Swarm Source
ipfs://135f49fa54fd4f977e82afae5d87e0c4acce2872c32ea5305ff2ed264384bf83
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.