Feature Tip: Add private address tag to any address under My Name Tag !
ERC-721
Overview
Max Total Supply
1,000 MANDELNFT
Holders
222
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
90 MANDELNFTLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
MandelNFT
Compiler Version
v0.8.4+commit.c7e474f2
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2021-08-24 */ // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom(address from, address to, uint256 tokenId) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes calldata data) external; } // File: @openzeppelin/contracts/token/ERC721/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); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; // solhint-disable-next-line no-inline-assembly assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (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"); // solhint-disable-next-line avoid-low-level-calls (bool success, bytes memory returndata) = target.delegatecall(data); return _verifyCallResult(success, returndata, errorMessage); } function _verifyCallResult(bool success, bytes memory returndata, string memory errorMessage) private 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 // solhint-disable-next-line no-inline-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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) { this; // silence state mutability warning without generating bytecode - see https://github.com/ethereum/solidity/issues/2691 return msg.data; } } // File: @openzeppelin/contracts/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant alphabet = "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] = alphabet[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; uint256 public NFT_PRICE = 30000000000000000; // 0.03 ETH string public PROVENANCE_HASH = ""; uint256 public ROUND = 1; // price doubles each round bool public saleStarted = true; // 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(), '.json')) : ''; } /** * @dev Base URI for computing {tokenURI}. Empty by default, can be overriden * in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require(_msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom(address from, address to, uint256 tokenId) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom(address from, address to, uint256 tokenId, bytes memory _data) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer(address from, address to, uint256 tokenId, bytes memory _data) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint(address to, uint256 tokenId, bytes memory _data) internal virtual { _mint(to, tokenId); require(_checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); // solhint-disable-next-line avoid-low-level-calls, avoid-call-value (bool success, ) = recipient.call{ value: amount }(""); require(success, "Address: unable to send value, recipient may have reverted"); } 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"); change this to accommodate autosell if (_exists(tokenId)) { //autosell uint256 payment = 95 * ROUND * NFT_PRICE / 100; address previousOwner = _owners[tokenId]; address payable wallet = payable(previousOwner); sendValue(wallet, payment); // pay old owner _transfer2(_owners[tokenId], to, tokenId); // transfer to new owner } else { //original minting _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer(address from, address to, uint256 tokenId) internal virtual { require(saleStarted==false, "Main website sale not finished yet"); require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } function _transfer2(address from, address to, uint256 tokenId) internal virtual { // for main website buy from previous buyer who autosells at same position _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received(address from, address to, uint256 tokenId, bytes memory _data) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver(to).onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { // solhint-disable-next-line no-inline-assembly 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` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual { } } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor () { address msgSender = _msgSender(); _owner = msgSender; emit OwnershipTransferred(address(0), 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 { emit OwnershipTransferred(_owner, address(0)); _owner = 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"); emit OwnershipTransferred(_owner, newOwner); _owner = newOwner; } } // File: contracts/MandelNFT.sol pragma solidity ^0.8.0; contract MandelNFT is ERC721Enumerable, Ownable { uint256 public constant MAX_NFT_SUPPLY = 1000; uint public constant MAX_PURCHASABLE = 30; uint256 public mintIndex = 0; constructor() ERC721("MandelNFT", "MANDELNFT") { } function contractURI() public view returns (string memory) { return "https://mandelnft.onrender.com/collection.json"; } function _baseURI() internal view virtual override returns (string memory) { return "https://mandelnft.onrender.com/"; } function getTokenURI(uint256 tokenId) public view returns (string memory) { return tokenURI(tokenId); } function mint(uint256 amountToMint) public payable { require(saleStarted == true, "This sale has not started."); require(amountToMint > 0, "You must mint at least one."); require(amountToMint <= MAX_PURCHASABLE, "You cannot mint more than 30 at a time."); require(mintIndex + amountToMint <= MAX_NFT_SUPPLY, "The amount you are trying to mint exceeds the MAX_NFT_SUPPLY."); require(NFT_PRICE * amountToMint * ROUND == msg.value, "Incorrect Ether value."); for (uint256 i = 0; i < amountToMint; i++) { mintIndex++; _safeMint(msg.sender, mintIndex); } if (mintIndex == MAX_NFT_SUPPLY) {ROUND++; mintIndex=0;} } function startSale() public onlyOwner { saleStarted = true; } function pauseSale() public onlyOwner { saleStarted = false; } function setProvenanceHash(string memory _hash) public onlyOwner { PROVENANCE_HASH = _hash; } function withdraw() public payable onlyOwner { require(payable(msg.sender).send(address(this).balance)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_NFT_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PURCHASABLE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"NFT_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PROVENANCE_HASH","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"ROUND","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":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getTokenURI","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":[{"internalType":"uint256","name":"amountToMint","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintIndex","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":"pauseSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleStarted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hash","type":"string"}],"name":"setProvenanceHash","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startSale","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"payable","type":"function"}]
Contract Creation Code
6080604052666a94d74f430000600055604051806020016040528060008152506001908051906020019062000036929190620001c9565b5060016002556001600360006101000a81548160ff0219169083151502179055506000600f553480156200006957600080fd5b506040518060400160405280600981526020017f4d616e64656c4e465400000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f4d414e44454c4e465400000000000000000000000000000000000000000000008152508160049080519060200190620000ee929190620001c9565b50806005908051906020019062000107929190620001c9565b50505060006200011c620001c160201b60201c565b905080600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508073ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a350620002de565b600033905090565b828054620001d79062000279565b90600052602060002090601f016020900481019282620001fb576000855562000247565b82601f106200021657805160ff191683800117855562000247565b8280016001018555821562000247579182015b828111156200024657825182559160200191906001019062000229565b5b5090506200025691906200025a565b5090565b5b80821115620002755760008160009055506001016200025b565b5090565b600060028204905060018216806200029257607f821691505b60208210811415620002a957620002a8620002af565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61463780620002ee6000396000f3fe6080604052600436106101ee5760003560e01c8063676dd5631161010d578063b5077f44116100a0578063e8a3d4851161006f578063e8a3d485146106bf578063e985e9c5146106ea578063f2fde38b14610727578063f74f9bfd14610750578063ff1b65561461077b576101ee565b8063b5077f4414610617578063b66a0e5d14610642578063b88d4fde14610659578063c87b56dd14610682576101ee565b806395d89b41116100dc57806395d89b411461057c578063a0712d68146105a7578063a22cb465146105c3578063b24ae1f8146105ec576101ee565b8063676dd563146104d257806370a08231146104fd578063715018a61461053a5780638da5cb5b14610551576101ee565b80632f745c59116101855780634f6ccce7116101545780634f6ccce71461041657806355367ba9146104535780635c474f9e1461046a5780636352211e14610495576101ee565b80632f745c59146103695780633bb3a24d146103a65780633ccfd60b146103e357806342842e0e146103ed576101ee565b806310969523116101c157806310969523146102c1578063119e4398146102ea57806318160ddd1461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906130f4565b6107a6565b60405161022791906136dc565b60405180910390f35b34801561023c57600080fd5b50610245610820565b60405161025291906136f7565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613187565b6108b2565b60405161028f9190613675565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906130b8565b610937565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613146565b610a4f565b005b3480156102f657600080fd5b506102ff610ae5565b60405161030c9190613a39565b60405180910390f35b34801561032157600080fd5b5061032a610aea565b6040516103379190613a39565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190612fb2565b610af7565b005b34801561037557600080fd5b50610390600480360381019061038b91906130b8565b610b57565b60405161039d9190613a39565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613187565b610bfc565b6040516103da91906136f7565b60405180910390f35b6103eb610c0e565b005b3480156103f957600080fd5b50610414600480360381019061040f9190612fb2565b610cca565b005b34801561042257600080fd5b5061043d60048036038101906104389190613187565b610cea565b60405161044a9190613a39565b60405180910390f35b34801561045f57600080fd5b50610468610d81565b005b34801561047657600080fd5b5061047f610e1a565b60405161048c91906136dc565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613187565b610e2d565b6040516104c99190613675565b60405180910390f35b3480156104de57600080fd5b506104e7610edf565b6040516104f49190613a39565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612f4d565b610ee5565b6040516105319190613a39565b60405180910390f35b34801561054657600080fd5b5061054f610f9d565b005b34801561055d57600080fd5b506105666110da565b6040516105739190613675565b60405180910390f35b34801561058857600080fd5b50610591611104565b60405161059e91906136f7565b60405180910390f35b6105c160048036038101906105bc9190613187565b611196565b005b3480156105cf57600080fd5b506105ea60048036038101906105e5919061307c565b611394565b005b3480156105f857600080fd5b50610601611515565b60405161060e9190613a39565b60405180910390f35b34801561062357600080fd5b5061062c61151b565b6040516106399190613a39565b60405180910390f35b34801561064e57600080fd5b50610657611521565b005b34801561066557600080fd5b50610680600480360381019061067b9190613001565b6115ba565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613187565b61161c565b6040516106b691906136f7565b60405180910390f35b3480156106cb57600080fd5b506106d46116c3565b6040516106e191906136f7565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190612f76565b6116e3565b60405161071e91906136dc565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612f4d565b611777565b005b34801561075c57600080fd5b50610765611923565b6040516107729190613a39565b60405180910390f35b34801561078757600080fd5b50610790611929565b60405161079d91906136f7565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108195750610818826119b7565b5b9050919050565b60606004805461082f90613cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90613cf4565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050505050905090565b60006108bd82611a99565b6108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f3906138f9565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094282610e2d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613979565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d2611b05565b73ffffffffffffffffffffffffffffffffffffffff161480610a015750610a00816109fb611b05565b6116e3565b5b610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790613859565b60405180910390fd5b610a4a8383611b0d565b505050565b610a57611b05565b73ffffffffffffffffffffffffffffffffffffffff16610a756110da565b73ffffffffffffffffffffffffffffffffffffffff1614610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613919565b60405180910390fd5b8060019080519060200190610ae1929190612d71565b5050565b601e81565b6000600c80549050905090565b610b08610b02611b05565b82611bc6565b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90613999565b60405180910390fd5b610b52838383611ca4565b505050565b6000610b6283610ee5565b8210610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613739565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6060610c078261161c565b9050919050565b610c16611b05565b73ffffffffffffffffffffffffffffffffffffffff16610c346110da565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613919565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610cc857600080fd5b565b610ce5838383604051806020016040528060008152506115ba565b505050565b6000610cf4610aea565b8210610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c906139b9565b60405180910390fd5b600c8281548110610d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d89611b05565b73ffffffffffffffffffffffffffffffffffffffff16610da76110da565b73ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613919565b60405180910390fd5b6000600360006101000a81548160ff021916908315150217905550565b600360009054906101000a900460ff1681565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613899565b60405180910390fd5b80915050919050565b60005481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613879565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fa5611b05565b73ffffffffffffffffffffffffffffffffffffffff16610fc36110da565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613919565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461111390613cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461113f90613cf4565b801561118c5780601f106111615761010080835404028352916020019161118c565b820191906000526020600020905b81548152906001019060200180831161116f57829003601f168201915b5050505050905090565b60011515600360009054906101000a900460ff161515146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390613719565b60405180910390fd5b6000811161122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906139d9565b60405180910390fd5b601e811115611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90613a19565b60405180910390fd5b6103e881600f546112849190613b29565b11156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906139f9565b60405180910390fd5b34600254826000546112d79190613bb0565b6112e19190613bb0565b14611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906138b9565b60405180910390fd5b60005b8181101561136357600f600081548092919061133f90613d57565b919050555061135033600f54611f56565b808061135b90613d57565b915050611324565b506103e8600f541415611391576002600081548092919061138390613d57565b91905055506000600f819055505b50565b61139c611b05565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906137b9565b60405180910390fd5b8060096000611417611b05565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114c4611b05565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161150991906136dc565b60405180910390a35050565b60025481565b6103e881565b611529611b05565b73ffffffffffffffffffffffffffffffffffffffff166115476110da565b73ffffffffffffffffffffffffffffffffffffffff161461159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613919565b60405180910390fd5b6001600360006101000a81548160ff021916908315150217905550565b6115cb6115c5611b05565b83611bc6565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190613999565b60405180910390fd5b61161684848484611f74565b50505050565b606061162782611a99565b611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613959565b60405180910390fd5b6000611670611fd0565b9050600081511161169057604051806020016040528060008152506116bb565b8061169a8461200d565b6040516020016116ab929190613631565b6040516020818303038152906040525b915050919050565b60606040518060600160405280602e81526020016145d4602e9139905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61177f611b05565b73ffffffffffffffffffffffffffffffffffffffff1661179d6110da565b73ffffffffffffffffffffffffffffffffffffffff16146117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613919565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a90613779565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6001805461193690613cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461196290613cf4565b80156119af5780601f10611984576101008083540402835291602001916119af565b820191906000526020600020905b81548152906001019060200180831161199257829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a925750611a91826121ba565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8083610e2d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bd182611a99565b611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613839565b60405180910390fd5b6000611c1b83610e2d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c8a57508373ffffffffffffffffffffffffffffffffffffffff16611c72846108b2565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c9b5750611c9a81856116e3565b5b91505092915050565b60001515600360009054906101000a900460ff16151514611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906137f9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16611d1a82610e2d565b73ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790613799565b60405180910390fd5b611deb838383612224565b611df6600082611b0d565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e469190613c0a565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e9d9190613b29565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f70828260405180602001604052806000815250612338565b5050565b611f7f848484611ca4565b611f8b84848484612393565b611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190613759565b60405180910390fd5b50505050565b60606040518060400160405280601f81526020017f68747470733a2f2f6d616e64656c6e66742e6f6e72656e6465722e636f6d2f00815250905090565b60606000821415612055576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121b5565b600082905060005b6000821461208757808061207090613d57565b915050600a826120809190613b7f565b915061205d565b60008167ffffffffffffffff8111156120c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120fb5781602001600182028036833780820191505090505b5090505b600085146121ae576001826121149190613c0a565b9150600a856121239190613da0565b603061212f9190613b29565b60f81b81838151811061216b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121a79190613b7f565b94506120ff565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61222f83838361252a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122725761226d8161252f565b6122b1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122b0576122af8382612578565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f4576122ef816126e5565b612333565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612332576123318282612828565b5b5b505050565b61234283836128a7565b61234f6000848484612393565b61238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613759565b60405180910390fd5b505050565b60006123b48473ffffffffffffffffffffffffffffffffffffffff16612af4565b1561251d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123dd611b05565b8786866040518563ffffffff1660e01b81526004016123ff9493929190613690565b602060405180830381600087803b15801561241957600080fd5b505af192505050801561244a57506040513d601f19601f82011682018060405250810190612447919061311d565b60015b6124cd573d806000811461247a576040519150601f19603f3d011682016040523d82523d6000602084013e61247f565b606091505b506000815114156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90613759565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612522565b600190505b949350505050565b505050565b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161258584610ee5565b61258f9190613c0a565b90506000600b6000848152602001908152602001600020549050818114612674576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555081600b600083815260200190815260200160002081905550505b600b600084815260200190815260200160002060009055600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600c805490506126f99190613c0a565b90506000600d60008481526020019081526020016000205490506000600c838154811061274f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600c8381548110612797577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600d600083815260200190815260200160002081905550600d600085815260200190815260200160002060009055600c80548061280c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061283383610ee5565b905081600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080600b600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e906138d9565b60405180910390fd5b61292081611a99565b156129de5760006064600054600254605f61293b9190613bb0565b6129459190613bb0565b61294f9190613b7f565b905060006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190506129988184612b07565b6129d66006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168686612bfb565b505050612af0565b6129ea60008383612224565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3a9190613b29565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050565b600080823b905060008111915050919050565b80471015612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4190613819565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612b7090613660565b60006040518083038185875af1925050503d8060008114612bad576040519150601f19603f3d011682016040523d82523d6000602084013e612bb2565b606091505b5050905080612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed906137d9565b60405180910390fd5b505050565b612c06838383612224565b612c11600082611b0d565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c619190613c0a565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb89190613b29565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b828054612d7d90613cf4565b90600052602060002090601f016020900481019282612d9f5760008555612de6565b82601f10612db857805160ff1916838001178555612de6565b82800160010185558215612de6579182015b82811115612de5578251825591602001919060010190612dca565b5b509050612df39190612df7565b5090565b5b80821115612e10576000816000905550600101612df8565b5090565b6000612e27612e2284613a79565b613a54565b905082815260208101848484011115612e3f57600080fd5b612e4a848285613cb2565b509392505050565b6000612e65612e6084613aaa565b613a54565b905082815260208101848484011115612e7d57600080fd5b612e88848285613cb2565b509392505050565b600081359050612e9f81614577565b92915050565b600081359050612eb48161458e565b92915050565b600081359050612ec9816145a5565b92915050565b600081519050612ede816145a5565b92915050565b600082601f830112612ef557600080fd5b8135612f05848260208601612e14565b91505092915050565b600082601f830112612f1f57600080fd5b8135612f2f848260208601612e52565b91505092915050565b600081359050612f47816145bc565b92915050565b600060208284031215612f5f57600080fd5b6000612f6d84828501612e90565b91505092915050565b60008060408385031215612f8957600080fd5b6000612f9785828601612e90565b9250506020612fa885828601612e90565b9150509250929050565b600080600060608486031215612fc757600080fd5b6000612fd586828701612e90565b9350506020612fe686828701612e90565b9250506040612ff786828701612f38565b9150509250925092565b6000806000806080858703121561301757600080fd5b600061302587828801612e90565b945050602061303687828801612e90565b935050604061304787828801612f38565b925050606085013567ffffffffffffffff81111561306457600080fd5b61307087828801612ee4565b91505092959194509250565b6000806040838503121561308f57600080fd5b600061309d85828601612e90565b92505060206130ae85828601612ea5565b9150509250929050565b600080604083850312156130cb57600080fd5b60006130d985828601612e90565b92505060206130ea85828601612f38565b9150509250929050565b60006020828403121561310657600080fd5b600061311484828501612eba565b91505092915050565b60006020828403121561312f57600080fd5b600061313d84828501612ecf565b91505092915050565b60006020828403121561315857600080fd5b600082013567ffffffffffffffff81111561317257600080fd5b61317e84828501612f0e565b91505092915050565b60006020828403121561319957600080fd5b60006131a784828501612f38565b91505092915050565b6131b981613c3e565b82525050565b6131c881613c50565b82525050565b60006131d982613adb565b6131e38185613af1565b93506131f3818560208601613cc1565b6131fc81613e8d565b840191505092915050565b600061321282613ae6565b61321c8185613b0d565b935061322c818560208601613cc1565b61323581613e8d565b840191505092915050565b600061324b82613ae6565b6132558185613b1e565b9350613265818560208601613cc1565b80840191505092915050565b600061327e601a83613b0d565b915061328982613e9e565b602082019050919050565b60006132a1602b83613b0d565b91506132ac82613ec7565b604082019050919050565b60006132c4603283613b0d565b91506132cf82613f16565b604082019050919050565b60006132e7602683613b0d565b91506132f282613f65565b604082019050919050565b600061330a602483613b0d565b915061331582613fb4565b604082019050919050565b600061332d601983613b0d565b915061333882614003565b602082019050919050565b6000613350603a83613b0d565b915061335b8261402c565b604082019050919050565b6000613373602283613b0d565b915061337e8261407b565b604082019050919050565b6000613396601d83613b0d565b91506133a1826140ca565b602082019050919050565b60006133b9602c83613b0d565b91506133c4826140f3565b604082019050919050565b60006133dc603883613b0d565b91506133e782614142565b604082019050919050565b60006133ff602a83613b0d565b915061340a82614191565b604082019050919050565b6000613422602983613b0d565b915061342d826141e0565b604082019050919050565b6000613445601683613b0d565b91506134508261422f565b602082019050919050565b6000613468602083613b0d565b915061347382614258565b602082019050919050565b600061348b602c83613b0d565b915061349682614281565b604082019050919050565b60006134ae600583613b1e565b91506134b9826142d0565b600582019050919050565b60006134d1602083613b0d565b91506134dc826142f9565b602082019050919050565b60006134f4602983613b0d565b91506134ff82614322565b604082019050919050565b6000613517602f83613b0d565b915061352282614371565b604082019050919050565b600061353a602183613b0d565b9150613545826143c0565b604082019050919050565b600061355d600083613b02565b91506135688261440f565b600082019050919050565b6000613580603183613b0d565b915061358b82614412565b604082019050919050565b60006135a3602c83613b0d565b91506135ae82614461565b604082019050919050565b60006135c6601b83613b0d565b91506135d1826144b0565b602082019050919050565b60006135e9603d83613b0d565b91506135f4826144d9565b604082019050919050565b600061360c602783613b0d565b915061361782614528565b604082019050919050565b61362b81613ca8565b82525050565b600061363d8285613240565b91506136498284613240565b9150613654826134a1565b91508190509392505050565b600061366b82613550565b9150819050919050565b600060208201905061368a60008301846131b0565b92915050565b60006080820190506136a560008301876131b0565b6136b260208301866131b0565b6136bf6040830185613622565b81810360608301526136d181846131ce565b905095945050505050565b60006020820190506136f160008301846131bf565b92915050565b600060208201905081810360008301526137118184613207565b905092915050565b6000602082019050818103600083015261373281613271565b9050919050565b6000602082019050818103600083015261375281613294565b9050919050565b60006020820190508181036000830152613772816132b7565b9050919050565b60006020820190508181036000830152613792816132da565b9050919050565b600060208201905081810360008301526137b2816132fd565b9050919050565b600060208201905081810360008301526137d281613320565b9050919050565b600060208201905081810360008301526137f281613343565b9050919050565b6000602082019050818103600083015261381281613366565b9050919050565b6000602082019050818103600083015261383281613389565b9050919050565b60006020820190508181036000830152613852816133ac565b9050919050565b60006020820190508181036000830152613872816133cf565b9050919050565b60006020820190508181036000830152613892816133f2565b9050919050565b600060208201905081810360008301526138b281613415565b9050919050565b600060208201905081810360008301526138d281613438565b9050919050565b600060208201905081810360008301526138f28161345b565b9050919050565b600060208201905081810360008301526139128161347e565b9050919050565b60006020820190508181036000830152613932816134c4565b9050919050565b60006020820190508181036000830152613952816134e7565b9050919050565b600060208201905081810360008301526139728161350a565b9050919050565b600060208201905081810360008301526139928161352d565b9050919050565b600060208201905081810360008301526139b281613573565b9050919050565b600060208201905081810360008301526139d281613596565b9050919050565b600060208201905081810360008301526139f2816135b9565b9050919050565b60006020820190508181036000830152613a12816135dc565b9050919050565b60006020820190508181036000830152613a32816135ff565b9050919050565b6000602082019050613a4e6000830184613622565b92915050565b6000613a5e613a6f565b9050613a6a8282613d26565b919050565b6000604051905090565b600067ffffffffffffffff821115613a9457613a93613e5e565b5b613a9d82613e8d565b9050602081019050919050565b600067ffffffffffffffff821115613ac557613ac4613e5e565b5b613ace82613e8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b3482613ca8565b9150613b3f83613ca8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b7457613b73613dd1565b5b828201905092915050565b6000613b8a82613ca8565b9150613b9583613ca8565b925082613ba557613ba4613e00565b5b828204905092915050565b6000613bbb82613ca8565b9150613bc683613ca8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bff57613bfe613dd1565b5b828202905092915050565b6000613c1582613ca8565b9150613c2083613ca8565b925082821015613c3357613c32613dd1565b5b828203905092915050565b6000613c4982613c88565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cdf578082015181840152602081019050613cc4565b83811115613cee576000848401525b50505050565b60006002820490506001821680613d0c57607f821691505b60208210811415613d2057613d1f613e2f565b5b50919050565b613d2f82613e8d565b810181811067ffffffffffffffff82111715613d4e57613d4d613e5e565b5b80604052505050565b6000613d6282613ca8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9557613d94613dd1565b5b600182019050919050565b6000613dab82613ca8565b9150613db683613ca8565b925082613dc657613dc5613e00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f546869732073616c6520686173206e6f7420737461727465642e000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f4d61696e20776562736974652073616c65206e6f742066696e6973686564207960008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742045746865722076616c75652e00000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f75206d757374206d696e74206174206c65617374206f6e652e0000000000600082015250565b7f54686520616d6f756e7420796f752061726520747279696e6720746f206d696e60008201527f74206578636565647320746865204d41585f4e46545f535550504c592e000000602082015250565b7f596f752063616e6e6f74206d696e74206d6f7265207468616e2033302061742060008201527f612074696d652e00000000000000000000000000000000000000000000000000602082015250565b61458081613c3e565b811461458b57600080fd5b50565b61459781613c50565b81146145a257600080fd5b50565b6145ae81613c5c565b81146145b957600080fd5b50565b6145c581613ca8565b81146145d057600080fd5b5056fe68747470733a2f2f6d616e64656c6e66742e6f6e72656e6465722e636f6d2f636f6c6c656374696f6e2e6a736f6ea264697066735822122037cbb6e415336b6be1e66b145692874d37dc701989ddb3a06cade578c8f4414364736f6c63430008040033
Deployed Bytecode
0x6080604052600436106101ee5760003560e01c8063676dd5631161010d578063b5077f44116100a0578063e8a3d4851161006f578063e8a3d485146106bf578063e985e9c5146106ea578063f2fde38b14610727578063f74f9bfd14610750578063ff1b65561461077b576101ee565b8063b5077f4414610617578063b66a0e5d14610642578063b88d4fde14610659578063c87b56dd14610682576101ee565b806395d89b41116100dc57806395d89b411461057c578063a0712d68146105a7578063a22cb465146105c3578063b24ae1f8146105ec576101ee565b8063676dd563146104d257806370a08231146104fd578063715018a61461053a5780638da5cb5b14610551576101ee565b80632f745c59116101855780634f6ccce7116101545780634f6ccce71461041657806355367ba9146104535780635c474f9e1461046a5780636352211e14610495576101ee565b80632f745c59146103695780633bb3a24d146103a65780633ccfd60b146103e357806342842e0e146103ed576101ee565b806310969523116101c157806310969523146102c1578063119e4398146102ea57806318160ddd1461031557806323b872dd14610340576101ee565b806301ffc9a7146101f357806306fdde0314610230578063081812fc1461025b578063095ea7b314610298575b600080fd5b3480156101ff57600080fd5b5061021a600480360381019061021591906130f4565b6107a6565b60405161022791906136dc565b60405180910390f35b34801561023c57600080fd5b50610245610820565b60405161025291906136f7565b60405180910390f35b34801561026757600080fd5b50610282600480360381019061027d9190613187565b6108b2565b60405161028f9190613675565b60405180910390f35b3480156102a457600080fd5b506102bf60048036038101906102ba91906130b8565b610937565b005b3480156102cd57600080fd5b506102e860048036038101906102e39190613146565b610a4f565b005b3480156102f657600080fd5b506102ff610ae5565b60405161030c9190613a39565b60405180910390f35b34801561032157600080fd5b5061032a610aea565b6040516103379190613a39565b60405180910390f35b34801561034c57600080fd5b5061036760048036038101906103629190612fb2565b610af7565b005b34801561037557600080fd5b50610390600480360381019061038b91906130b8565b610b57565b60405161039d9190613a39565b60405180910390f35b3480156103b257600080fd5b506103cd60048036038101906103c89190613187565b610bfc565b6040516103da91906136f7565b60405180910390f35b6103eb610c0e565b005b3480156103f957600080fd5b50610414600480360381019061040f9190612fb2565b610cca565b005b34801561042257600080fd5b5061043d60048036038101906104389190613187565b610cea565b60405161044a9190613a39565b60405180910390f35b34801561045f57600080fd5b50610468610d81565b005b34801561047657600080fd5b5061047f610e1a565b60405161048c91906136dc565b60405180910390f35b3480156104a157600080fd5b506104bc60048036038101906104b79190613187565b610e2d565b6040516104c99190613675565b60405180910390f35b3480156104de57600080fd5b506104e7610edf565b6040516104f49190613a39565b60405180910390f35b34801561050957600080fd5b50610524600480360381019061051f9190612f4d565b610ee5565b6040516105319190613a39565b60405180910390f35b34801561054657600080fd5b5061054f610f9d565b005b34801561055d57600080fd5b506105666110da565b6040516105739190613675565b60405180910390f35b34801561058857600080fd5b50610591611104565b60405161059e91906136f7565b60405180910390f35b6105c160048036038101906105bc9190613187565b611196565b005b3480156105cf57600080fd5b506105ea60048036038101906105e5919061307c565b611394565b005b3480156105f857600080fd5b50610601611515565b60405161060e9190613a39565b60405180910390f35b34801561062357600080fd5b5061062c61151b565b6040516106399190613a39565b60405180910390f35b34801561064e57600080fd5b50610657611521565b005b34801561066557600080fd5b50610680600480360381019061067b9190613001565b6115ba565b005b34801561068e57600080fd5b506106a960048036038101906106a49190613187565b61161c565b6040516106b691906136f7565b60405180910390f35b3480156106cb57600080fd5b506106d46116c3565b6040516106e191906136f7565b60405180910390f35b3480156106f657600080fd5b50610711600480360381019061070c9190612f76565b6116e3565b60405161071e91906136dc565b60405180910390f35b34801561073357600080fd5b5061074e60048036038101906107499190612f4d565b611777565b005b34801561075c57600080fd5b50610765611923565b6040516107729190613a39565b60405180910390f35b34801561078757600080fd5b50610790611929565b60405161079d91906136f7565b60405180910390f35b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806108195750610818826119b7565b5b9050919050565b60606004805461082f90613cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461085b90613cf4565b80156108a85780601f1061087d576101008083540402835291602001916108a8565b820191906000526020600020905b81548152906001019060200180831161088b57829003601f168201915b5050505050905090565b60006108bd82611a99565b6108fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108f3906138f9565b60405180910390fd5b6008600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061094282610e2d565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156109b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109aa90613979565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166109d2611b05565b73ffffffffffffffffffffffffffffffffffffffff161480610a015750610a00816109fb611b05565b6116e3565b5b610a40576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3790613859565b60405180910390fd5b610a4a8383611b0d565b505050565b610a57611b05565b73ffffffffffffffffffffffffffffffffffffffff16610a756110da565b73ffffffffffffffffffffffffffffffffffffffff1614610acb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ac290613919565b60405180910390fd5b8060019080519060200190610ae1929190612d71565b5050565b601e81565b6000600c80549050905090565b610b08610b02611b05565b82611bc6565b610b47576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b3e90613999565b60405180910390fd5b610b52838383611ca4565b505050565b6000610b6283610ee5565b8210610ba3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b9a90613739565b60405180910390fd5b600a60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b6060610c078261161c565b9050919050565b610c16611b05565b73ffffffffffffffffffffffffffffffffffffffff16610c346110da565b73ffffffffffffffffffffffffffffffffffffffff1614610c8a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c8190613919565b60405180910390fd5b3373ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050610cc857600080fd5b565b610ce5838383604051806020016040528060008152506115ba565b505050565b6000610cf4610aea565b8210610d35576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2c906139b9565b60405180910390fd5b600c8281548110610d6f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b90600052602060002001549050919050565b610d89611b05565b73ffffffffffffffffffffffffffffffffffffffff16610da76110da565b73ffffffffffffffffffffffffffffffffffffffff1614610dfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610df490613919565b60405180910390fd5b6000600360006101000a81548160ff021916908315150217905550565b600360009054906101000a900460ff1681565b6000806006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610ed6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecd90613899565b60405180910390fd5b80915050919050565b60005481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610f56576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f4d90613879565b60405180910390fd5b600760008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610fa5611b05565b73ffffffffffffffffffffffffffffffffffffffff16610fc36110da565b73ffffffffffffffffffffffffffffffffffffffff1614611019576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161101090613919565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a36000600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550565b6000600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60606005805461111390613cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461113f90613cf4565b801561118c5780601f106111615761010080835404028352916020019161118c565b820191906000526020600020905b81548152906001019060200180831161116f57829003601f168201915b5050505050905090565b60011515600360009054906101000a900460ff161515146111ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e390613719565b60405180910390fd5b6000811161122f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611226906139d9565b60405180910390fd5b601e811115611273576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126a90613a19565b60405180910390fd5b6103e881600f546112849190613b29565b11156112c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112bc906139f9565b60405180910390fd5b34600254826000546112d79190613bb0565b6112e19190613bb0565b14611321576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611318906138b9565b60405180910390fd5b60005b8181101561136357600f600081548092919061133f90613d57565b919050555061135033600f54611f56565b808061135b90613d57565b915050611324565b506103e8600f541415611391576002600081548092919061138390613d57565b91905055506000600f819055505b50565b61139c611b05565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561140a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611401906137b9565b60405180910390fd5b8060096000611417611b05565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166114c4611b05565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161150991906136dc565b60405180910390a35050565b60025481565b6103e881565b611529611b05565b73ffffffffffffffffffffffffffffffffffffffff166115476110da565b73ffffffffffffffffffffffffffffffffffffffff161461159d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159490613919565b60405180910390fd5b6001600360006101000a81548160ff021916908315150217905550565b6115cb6115c5611b05565b83611bc6565b61160a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161160190613999565b60405180910390fd5b61161684848484611f74565b50505050565b606061162782611a99565b611666576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161165d90613959565b60405180910390fd5b6000611670611fd0565b9050600081511161169057604051806020016040528060008152506116bb565b8061169a8461200d565b6040516020016116ab929190613631565b6040516020818303038152906040525b915050919050565b60606040518060600160405280602e81526020016145d4602e9139905090565b6000600960008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b61177f611b05565b73ffffffffffffffffffffffffffffffffffffffff1661179d6110da565b73ffffffffffffffffffffffffffffffffffffffff16146117f3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ea90613919565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611863576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161185a90613779565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16600e60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a380600e60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555050565b600f5481565b6001805461193690613cf4565b80601f016020809104026020016040519081016040528092919081815260200182805461196290613cf4565b80156119af5780601f10611984576101008083540402835291602001916119af565b820191906000526020600020905b81548152906001019060200180831161199257829003601f168201915b505050505081565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480611a8257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80611a925750611a91826121ba565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816008600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611b8083610e2d565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b6000611bd182611a99565b611c10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c0790613839565b60405180910390fd5b6000611c1b83610e2d565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611c8a57508373ffffffffffffffffffffffffffffffffffffffff16611c72846108b2565b73ffffffffffffffffffffffffffffffffffffffff16145b80611c9b5750611c9a81856116e3565b5b91505092915050565b60001515600360009054906101000a900460ff16151514611cfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cf1906137f9565b60405180910390fd5b8273ffffffffffffffffffffffffffffffffffffffff16611d1a82610e2d565b73ffffffffffffffffffffffffffffffffffffffff1614611d70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d6790613939565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611de0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd790613799565b60405180910390fd5b611deb838383612224565b611df6600082611b0d565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e469190613c0a565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611e9d9190613b29565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b611f70828260405180602001604052806000815250612338565b5050565b611f7f848484611ca4565b611f8b84848484612393565b611fca576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fc190613759565b60405180910390fd5b50505050565b60606040518060400160405280601f81526020017f68747470733a2f2f6d616e64656c6e66742e6f6e72656e6465722e636f6d2f00815250905090565b60606000821415612055576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506121b5565b600082905060005b6000821461208757808061207090613d57565b915050600a826120809190613b7f565b915061205d565b60008167ffffffffffffffff8111156120c9577f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6040519080825280601f01601f1916602001820160405280156120fb5781602001600182028036833780820191505090505b5090505b600085146121ae576001826121149190613c0a565b9150600a856121239190613da0565b603061212f9190613b29565b60f81b81838151811061216b577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856121a79190613b7f565b94506120ff565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61222f83838361252a565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156122725761226d8161252f565b6122b1565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146122b0576122af8382612578565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156122f4576122ef816126e5565b612333565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612332576123318282612828565b5b5b505050565b61234283836128a7565b61234f6000848484612393565b61238e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238590613759565b60405180910390fd5b505050565b60006123b48473ffffffffffffffffffffffffffffffffffffffff16612af4565b1561251d578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026123dd611b05565b8786866040518563ffffffff1660e01b81526004016123ff9493929190613690565b602060405180830381600087803b15801561241957600080fd5b505af192505050801561244a57506040513d601f19601f82011682018060405250810190612447919061311d565b60015b6124cd573d806000811461247a576040519150601f19603f3d011682016040523d82523d6000602084013e61247f565b606091505b506000815114156124c5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124bc90613759565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612522565b600190505b949350505050565b505050565b600c80549050600d600083815260200190815260200160002081905550600c81908060018154018082558091505060019003906000526020600020016000909190919091505550565b6000600161258584610ee5565b61258f9190613c0a565b90506000600b6000848152602001908152602001600020549050818114612674576000600a60008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600a60008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008481526020019081526020016000208190555081600b600083815260200190815260200160002081905550505b600b600084815260200190815260200160002060009055600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600c805490506126f99190613c0a565b90506000600d60008481526020019081526020016000205490506000600c838154811061274f577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b9060005260206000200154905080600c8381548110612797577f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b906000526020600020018190555081600d600083815260200190815260200160002081905550600d600085815260200190815260200160002060009055600c80548061280c577f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b6001900381819060005260206000200160009055905550505050565b600061283383610ee5565b905081600a60008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000208190555080600b600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612917576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290e906138d9565b60405180910390fd5b61292081611a99565b156129de5760006064600054600254605f61293b9190613bb0565b6129459190613bb0565b61294f9190613b7f565b905060006006600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905060008190506129988184612b07565b6129d66006600086815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff168686612bfb565b505050612af0565b6129ea60008383612224565b6001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612a3a9190613b29565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45b5050565b600080823b905060008111915050919050565b80471015612b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612b4190613819565b60405180910390fd5b60008273ffffffffffffffffffffffffffffffffffffffff1682604051612b7090613660565b60006040518083038185875af1925050503d8060008114612bad576040519150601f19603f3d011682016040523d82523d6000602084013e612bb2565b606091505b5050905080612bf6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bed906137d9565b60405180910390fd5b505050565b612c06838383612224565b612c11600082611b0d565b6001600760008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612c619190613c0a565b925050819055506001600760008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612cb89190613b29565b92505081905550816006600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b828054612d7d90613cf4565b90600052602060002090601f016020900481019282612d9f5760008555612de6565b82601f10612db857805160ff1916838001178555612de6565b82800160010185558215612de6579182015b82811115612de5578251825591602001919060010190612dca565b5b509050612df39190612df7565b5090565b5b80821115612e10576000816000905550600101612df8565b5090565b6000612e27612e2284613a79565b613a54565b905082815260208101848484011115612e3f57600080fd5b612e4a848285613cb2565b509392505050565b6000612e65612e6084613aaa565b613a54565b905082815260208101848484011115612e7d57600080fd5b612e88848285613cb2565b509392505050565b600081359050612e9f81614577565b92915050565b600081359050612eb48161458e565b92915050565b600081359050612ec9816145a5565b92915050565b600081519050612ede816145a5565b92915050565b600082601f830112612ef557600080fd5b8135612f05848260208601612e14565b91505092915050565b600082601f830112612f1f57600080fd5b8135612f2f848260208601612e52565b91505092915050565b600081359050612f47816145bc565b92915050565b600060208284031215612f5f57600080fd5b6000612f6d84828501612e90565b91505092915050565b60008060408385031215612f8957600080fd5b6000612f9785828601612e90565b9250506020612fa885828601612e90565b9150509250929050565b600080600060608486031215612fc757600080fd5b6000612fd586828701612e90565b9350506020612fe686828701612e90565b9250506040612ff786828701612f38565b9150509250925092565b6000806000806080858703121561301757600080fd5b600061302587828801612e90565b945050602061303687828801612e90565b935050604061304787828801612f38565b925050606085013567ffffffffffffffff81111561306457600080fd5b61307087828801612ee4565b91505092959194509250565b6000806040838503121561308f57600080fd5b600061309d85828601612e90565b92505060206130ae85828601612ea5565b9150509250929050565b600080604083850312156130cb57600080fd5b60006130d985828601612e90565b92505060206130ea85828601612f38565b9150509250929050565b60006020828403121561310657600080fd5b600061311484828501612eba565b91505092915050565b60006020828403121561312f57600080fd5b600061313d84828501612ecf565b91505092915050565b60006020828403121561315857600080fd5b600082013567ffffffffffffffff81111561317257600080fd5b61317e84828501612f0e565b91505092915050565b60006020828403121561319957600080fd5b60006131a784828501612f38565b91505092915050565b6131b981613c3e565b82525050565b6131c881613c50565b82525050565b60006131d982613adb565b6131e38185613af1565b93506131f3818560208601613cc1565b6131fc81613e8d565b840191505092915050565b600061321282613ae6565b61321c8185613b0d565b935061322c818560208601613cc1565b61323581613e8d565b840191505092915050565b600061324b82613ae6565b6132558185613b1e565b9350613265818560208601613cc1565b80840191505092915050565b600061327e601a83613b0d565b915061328982613e9e565b602082019050919050565b60006132a1602b83613b0d565b91506132ac82613ec7565b604082019050919050565b60006132c4603283613b0d565b91506132cf82613f16565b604082019050919050565b60006132e7602683613b0d565b91506132f282613f65565b604082019050919050565b600061330a602483613b0d565b915061331582613fb4565b604082019050919050565b600061332d601983613b0d565b915061333882614003565b602082019050919050565b6000613350603a83613b0d565b915061335b8261402c565b604082019050919050565b6000613373602283613b0d565b915061337e8261407b565b604082019050919050565b6000613396601d83613b0d565b91506133a1826140ca565b602082019050919050565b60006133b9602c83613b0d565b91506133c4826140f3565b604082019050919050565b60006133dc603883613b0d565b91506133e782614142565b604082019050919050565b60006133ff602a83613b0d565b915061340a82614191565b604082019050919050565b6000613422602983613b0d565b915061342d826141e0565b604082019050919050565b6000613445601683613b0d565b91506134508261422f565b602082019050919050565b6000613468602083613b0d565b915061347382614258565b602082019050919050565b600061348b602c83613b0d565b915061349682614281565b604082019050919050565b60006134ae600583613b1e565b91506134b9826142d0565b600582019050919050565b60006134d1602083613b0d565b91506134dc826142f9565b602082019050919050565b60006134f4602983613b0d565b91506134ff82614322565b604082019050919050565b6000613517602f83613b0d565b915061352282614371565b604082019050919050565b600061353a602183613b0d565b9150613545826143c0565b604082019050919050565b600061355d600083613b02565b91506135688261440f565b600082019050919050565b6000613580603183613b0d565b915061358b82614412565b604082019050919050565b60006135a3602c83613b0d565b91506135ae82614461565b604082019050919050565b60006135c6601b83613b0d565b91506135d1826144b0565b602082019050919050565b60006135e9603d83613b0d565b91506135f4826144d9565b604082019050919050565b600061360c602783613b0d565b915061361782614528565b604082019050919050565b61362b81613ca8565b82525050565b600061363d8285613240565b91506136498284613240565b9150613654826134a1565b91508190509392505050565b600061366b82613550565b9150819050919050565b600060208201905061368a60008301846131b0565b92915050565b60006080820190506136a560008301876131b0565b6136b260208301866131b0565b6136bf6040830185613622565b81810360608301526136d181846131ce565b905095945050505050565b60006020820190506136f160008301846131bf565b92915050565b600060208201905081810360008301526137118184613207565b905092915050565b6000602082019050818103600083015261373281613271565b9050919050565b6000602082019050818103600083015261375281613294565b9050919050565b60006020820190508181036000830152613772816132b7565b9050919050565b60006020820190508181036000830152613792816132da565b9050919050565b600060208201905081810360008301526137b2816132fd565b9050919050565b600060208201905081810360008301526137d281613320565b9050919050565b600060208201905081810360008301526137f281613343565b9050919050565b6000602082019050818103600083015261381281613366565b9050919050565b6000602082019050818103600083015261383281613389565b9050919050565b60006020820190508181036000830152613852816133ac565b9050919050565b60006020820190508181036000830152613872816133cf565b9050919050565b60006020820190508181036000830152613892816133f2565b9050919050565b600060208201905081810360008301526138b281613415565b9050919050565b600060208201905081810360008301526138d281613438565b9050919050565b600060208201905081810360008301526138f28161345b565b9050919050565b600060208201905081810360008301526139128161347e565b9050919050565b60006020820190508181036000830152613932816134c4565b9050919050565b60006020820190508181036000830152613952816134e7565b9050919050565b600060208201905081810360008301526139728161350a565b9050919050565b600060208201905081810360008301526139928161352d565b9050919050565b600060208201905081810360008301526139b281613573565b9050919050565b600060208201905081810360008301526139d281613596565b9050919050565b600060208201905081810360008301526139f2816135b9565b9050919050565b60006020820190508181036000830152613a12816135dc565b9050919050565b60006020820190508181036000830152613a32816135ff565b9050919050565b6000602082019050613a4e6000830184613622565b92915050565b6000613a5e613a6f565b9050613a6a8282613d26565b919050565b6000604051905090565b600067ffffffffffffffff821115613a9457613a93613e5e565b5b613a9d82613e8d565b9050602081019050919050565b600067ffffffffffffffff821115613ac557613ac4613e5e565b5b613ace82613e8d565b9050602081019050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b6000613b3482613ca8565b9150613b3f83613ca8565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613b7457613b73613dd1565b5b828201905092915050565b6000613b8a82613ca8565b9150613b9583613ca8565b925082613ba557613ba4613e00565b5b828204905092915050565b6000613bbb82613ca8565b9150613bc683613ca8565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613bff57613bfe613dd1565b5b828202905092915050565b6000613c1582613ca8565b9150613c2083613ca8565b925082821015613c3357613c32613dd1565b5b828203905092915050565b6000613c4982613c88565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613cdf578082015181840152602081019050613cc4565b83811115613cee576000848401525b50505050565b60006002820490506001821680613d0c57607f821691505b60208210811415613d2057613d1f613e2f565b5b50919050565b613d2f82613e8d565b810181811067ffffffffffffffff82111715613d4e57613d4d613e5e565b5b80604052505050565b6000613d6282613ca8565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d9557613d94613dd1565b5b600182019050919050565b6000613dab82613ca8565b9150613db683613ca8565b925082613dc657613dc5613e00565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6000601f19601f8301169050919050565b7f546869732073616c6520686173206e6f7420737461727465642e000000000000600082015250565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f416464726573733a20756e61626c6520746f2073656e642076616c75652c207260008201527f6563697069656e74206d61792068617665207265766572746564000000000000602082015250565b7f4d61696e20776562736974652073616c65206e6f742066696e6973686564207960008201527f6574000000000000000000000000000000000000000000000000000000000000602082015250565b7f416464726573733a20696e73756666696369656e742062616c616e6365000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f496e636f72726563742045746865722076616c75652e00000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f2e6a736f6e000000000000000000000000000000000000000000000000000000600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b7f596f75206d757374206d696e74206174206c65617374206f6e652e0000000000600082015250565b7f54686520616d6f756e7420796f752061726520747279696e6720746f206d696e60008201527f74206578636565647320746865204d41585f4e46545f535550504c592e000000602082015250565b7f596f752063616e6e6f74206d696e74206d6f7265207468616e2033302061742060008201527f612074696d652e00000000000000000000000000000000000000000000000000602082015250565b61458081613c3e565b811461458b57600080fd5b50565b61459781613c50565b81146145a257600080fd5b50565b6145ae81613c5c565b81146145b957600080fd5b50565b6145c581613ca8565b81146145d057600080fd5b5056fe68747470733a2f2f6d616e64656c6e66742e6f6e72656e6465722e636f6d2f636f6c6c656374696f6e2e6a736f6ea264697066735822122037cbb6e415336b6be1e66b145692874d37dc701989ddb3a06cade578c8f4414364736f6c63430008040033
Deployed Bytecode Sourcemap
44469:1809:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;35980:237;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21725:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23194:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;22731:397;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46040:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44576:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36633:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24084:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36301:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45019:117;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46155:120;;;:::i;:::-;;24460:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36823:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45956:76;;;;;;;;;;;;;:::i;:::-;;19907:30;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21419:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19738:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21149:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43850:148;;;;;;;;;;;;;:::i;:::-;;43199:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;21894:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45143:722;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;23487:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;19842:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44524:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45873:75;;;;;;;;;;;;;:::i;:::-;;24682:285;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22069:369;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44736:133;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23853:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44153:244;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44630:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;19801:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35980:237;36082:4;36121:35;36106:50;;;:11;:50;;;;:103;;;;36173:36;36197:11;36173:23;:36::i;:::-;36106:103;36099:110;;35980:237;;;:::o;21725:100::-;21779:13;21812:5;21805:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21725:100;:::o;23194:221::-;23270:7;23298:16;23306:7;23298;:16::i;:::-;23290:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23383:15;:24;23399:7;23383:24;;;;;;;;;;;;;;;;;;;;;23376:31;;23194:221;;;:::o;22731:397::-;22812:13;22828:23;22843:7;22828:14;:23::i;:::-;22812:39;;22876:5;22870:11;;:2;:11;;;;22862:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;22956:5;22940:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;22965:37;22982:5;22989:12;:10;:12::i;:::-;22965:16;:37::i;:::-;22940:62;22932:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;23099:21;23108:2;23112:7;23099:8;:21::i;:::-;22731:397;;;:::o;46040:107::-;43430:12;:10;:12::i;:::-;43419:23;;:7;:5;:7::i;:::-;:23;;;43411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46134:5:::1;46116:15;:23;;;;;;;;;;;;:::i;:::-;;46040:107:::0;:::o;44576:41::-;44615:2;44576:41;:::o;36633:113::-;36694:7;36721:10;:17;;;;36714:24;;36633:113;:::o;24084:305::-;24245:41;24264:12;:10;:12::i;:::-;24278:7;24245:18;:41::i;:::-;24237:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24353:28;24363:4;24369:2;24373:7;24353:9;:28::i;:::-;24084:305;;;:::o;36301:256::-;36398:7;36434:23;36451:5;36434:16;:23::i;:::-;36426:5;:31;36418:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;36523:12;:19;36536:5;36523:19;;;;;;;;;;;;;;;:26;36543:5;36523:26;;;;;;;;;;;;36516:33;;36301:256;;;;:::o;45019:117::-;45078:13;45111:17;45120:7;45111:8;:17::i;:::-;45104:24;;45019:117;;;:::o;46155:120::-;43430:12;:10;:12::i;:::-;43419:23;;:7;:5;:7::i;:::-;:23;;;43411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46227:10:::1;46219:24;;:47;46244:21;46219:47;;;;;;;;;;;;;;;;;;;;;;;46211:56;;;::::0;::::1;;46155:120::o:0;24460:151::-;24564:39;24581:4;24587:2;24591:7;24564:39;;;;;;;;;;;;:16;:39::i;:::-;24460:151;;;:::o;36823:233::-;36898:7;36934:30;:28;:30::i;:::-;36926:5;:38;36918:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;37031:10;37042:5;37031:17;;;;;;;;;;;;;;;;;;;;;;;;37024:24;;36823:233;;;:::o;45956:76::-;43430:12;:10;:12::i;:::-;43419:23;;:7;:5;:7::i;:::-;:23;;;43411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46019:5:::1;46005:11;;:19;;;;;;;;;;;;;;;;;;45956:76::o:0;19907:30::-;;;;;;;;;;;;;:::o;21419:239::-;21491:7;21511:13;21527:7;:16;21535:7;21527:16;;;;;;;;;;;;;;;;;;;;;21511:32;;21579:1;21562:19;;:5;:19;;;;21554:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;21645:5;21638:12;;;21419:239;;;:::o;19738:44::-;;;;:::o;21149:208::-;21221:7;21266:1;21249:19;;:5;:19;;;;21241:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;21333:9;:16;21343:5;21333:16;;;;;;;;;;;;;;;;21326:23;;21149:208;;;:::o;43850:148::-;43430:12;:10;:12::i;:::-;43419:23;;:7;:5;:7::i;:::-;:23;;;43411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43957:1:::1;43920:40;;43941:6;;;;;;;;;;;43920:40;;;;;;;;;;;;43988:1;43971:6;;:19;;;;;;;;;;;;;;;;;;43850:148::o:0;43199:87::-;43245:7;43272:6;;;;;;;;;;;43265:13;;43199:87;:::o;21894:104::-;21950:13;21983:7;21976:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;21894:104;:::o;45143:722::-;45228:4;45213:19;;:11;;;;;;;;;;;:19;;;45205:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;45297:1;45282:12;:16;45274:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;44615:2;45349:12;:31;;45341:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;44565:4;45455:12;45443:9;;:24;;;;:::i;:::-;:42;;45435:116;;;;;;;;;;;;:::i;:::-;;;;;;;;;45616:9;45607:5;;45592:12;45580:9;;:24;;;;:::i;:::-;:32;;;;:::i;:::-;:45;45572:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;45670:9;45665:128;45689:12;45685:1;:16;45665:128;;;45723:9;;:11;;;;;;;;;:::i;:::-;;;;;;45749:32;45759:10;45771:9;;45749;:32::i;:::-;45703:3;;;;;:::i;:::-;;;;45665:128;;;;44565:4;45807:9;;:27;45803:56;;;45837:5;;:7;;;;;;;;;:::i;:::-;;;;;;45856:1;45846:9;:11;;;;45803:56;45143:722;:::o;23487:295::-;23602:12;:10;:12::i;:::-;23590:24;;:8;:24;;;;23582:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;23702:8;23657:18;:32;23676:12;:10;:12::i;:::-;23657:32;;;;;;;;;;;;;;;:42;23690:8;23657:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;23755:8;23726:48;;23741:12;:10;:12::i;:::-;23726:48;;;23765:8;23726:48;;;;;;:::i;:::-;;;;;;;;23487:295;;:::o;19842:24::-;;;;:::o;44524:45::-;44565:4;44524:45;:::o;45873:75::-;43430:12;:10;:12::i;:::-;43419:23;;:7;:5;:7::i;:::-;:23;;;43411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45936:4:::1;45922:11;;:18;;;;;;;;;;;;;;;;;;45873:75::o:0;24682:285::-;24814:41;24833:12;:10;:12::i;:::-;24847:7;24814:18;:41::i;:::-;24806:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;24920:39;24934:4;24940:2;24944:7;24953:5;24920:13;:39::i;:::-;24682:285;;;;:::o;22069:369::-;22142:13;22176:16;22184:7;22176;:16::i;:::-;22168:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;22257:21;22281:10;:8;:10::i;:::-;22257:34;;22333:1;22315:7;22309:21;:25;:121;;;;;;;;;;;;;;;;;22374:7;22383:18;:7;:16;:18::i;:::-;22357:54;;;;;;;;;:::i;:::-;;;;;;;;;;;;;22309:121;22302:128;;;22069:369;;;:::o;44736:133::-;44780:13;44806:55;;;;;;;;;;;;;;;;;;;44736:133;:::o;23853:164::-;23950:4;23974:18;:25;23993:5;23974:25;;;;;;;;;;;;;;;:35;24000:8;23974:35;;;;;;;;;;;;;;;;;;;;;;;;;23967:42;;23853:164;;;;:::o;44153:244::-;43430:12;:10;:12::i;:::-;43419:23;;:7;:5;:7::i;:::-;:23;;;43411:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44262:1:::1;44242:22;;:8;:22;;;;44234:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44352:8;44323:38;;44344:6;;;;;;;;;;;44323:38;;;;;;;;;;;;44381:8;44372:6;;:17;;;;;;;;;;;;;;;;;;44153:244:::0;:::o;44630:28::-;;;;:::o;19801:34::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;20793:292::-;20895:4;20934:25;20919:40;;;:11;:40;;;;:105;;;;20991:33;20976:48;;;:11;:48;;;;20919:105;:158;;;;21041:36;21065:11;21041:23;:36::i;:::-;20919:158;20912:165;;20793:292;;;:::o;26434:127::-;26499:4;26551:1;26523:30;;:7;:16;26531:7;26523:16;;;;;;;;;;;;;;;;;;;;;:30;;;;26516:37;;26434:127;;;:::o;15875:98::-;15928:7;15955:10;15948:17;;15875:98;:::o;31766:174::-;31868:2;31841:15;:24;31857:7;31841:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;31924:7;31920:2;31886:46;;31895:23;31910:7;31895:14;:23::i;:::-;31886:46;;;;;;;;;;;;31766:174;;:::o;26728:348::-;26821:4;26846:16;26854:7;26846;:16::i;:::-;26838:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26922:13;26938:23;26953:7;26938:14;:23::i;:::-;26922:39;;26991:5;26980:16;;:7;:16;;;:51;;;;27024:7;27000:31;;:20;27012:7;27000:11;:20::i;:::-;:31;;;26980:51;:87;;;;27035:32;27052:5;27059:7;27035:16;:32::i;:::-;26980:87;26972:96;;;26728:348;;;;:::o;30569:620::-;30680:5;30667:18;;:11;;;;;;;;;;;:18;;;30659:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30770:4;30743:31;;:23;30758:7;30743:14;:23::i;:::-;:31;;;30735:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;30853:1;30839:16;;:2;:16;;;;30831:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;30909:39;30930:4;30936:2;30940:7;30909:20;:39::i;:::-;31013:29;31030:1;31034:7;31013:8;:29::i;:::-;31074:1;31055:9;:15;31065:4;31055:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31103:1;31086:9;:13;31096:2;31086:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31134:2;31115:7;:16;31123:7;31115:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31173:7;31169:2;31154:27;;31163:4;31154:27;;;;;;;;;;;;30569:620;;;:::o;27418:110::-;27494:26;27504:2;27508:7;27494:26;;;;;;;;;;;;:9;:26::i;:::-;27418:110;;:::o;25849:272::-;25963:28;25973:4;25979:2;25983:7;25963:9;:28::i;:::-;26010:48;26033:4;26039:2;26043:7;26052:5;26010:22;:48::i;:::-;26002:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25849:272;;;;:::o;44877:134::-;44937:13;44963:40;;;;;;;;;;;;;;;;;;;44877:134;:::o;16528:723::-;16584:13;16814:1;16805:5;:10;16801:53;;;16832:10;;;;;;;;;;;;;;;;;;;;;16801:53;16864:12;16879:5;16864:20;;16895:14;16920:78;16935:1;16927:4;:9;16920:78;;16953:8;;;;;:::i;:::-;;;;16984:2;16976:10;;;;;:::i;:::-;;;16920:78;;;17008:19;17040:6;17030:17;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;17008:39;;17058:154;17074:1;17065:5;:10;17058:154;;17102:1;17092:11;;;;;:::i;:::-;;;17169:2;17161:5;:10;;;;:::i;:::-;17148:2;:24;;;;:::i;:::-;17135:39;;17118:6;17125;17118:14;;;;;;;;;;;;;;;;;;;:56;;;;;;;;;;;17198:2;17189:11;;;;;:::i;:::-;;;17058:154;;;17236:6;17222:21;;;;;16528:723;;;;:::o;19081:157::-;19166:4;19205:25;19190:40;;;:11;:40;;;;19183:47;;19081:157;;;:::o;37669:555::-;37779:45;37806:4;37812:2;37816:7;37779:26;:45::i;:::-;37857:1;37841:18;;:4;:18;;;37837:187;;;37876:40;37908:7;37876:31;:40::i;:::-;37837:187;;;37946:2;37938:10;;:4;:10;;;37934:90;;37965:47;37998:4;38004:7;37965:32;:47::i;:::-;37934:90;37837:187;38052:1;38038:16;;:2;:16;;;38034:183;;;38071:45;38108:7;38071:36;:45::i;:::-;38034:183;;;38144:4;38138:10;;:2;:10;;;38134:83;;38165:40;38193:2;38197:7;38165:27;:40::i;:::-;38134:83;38034:183;37669:555;;;:::o;27755:250::-;27851:18;27857:2;27861:7;27851:5;:18::i;:::-;27888:54;27919:1;27923:2;27927:7;27936:5;27888:22;:54::i;:::-;27880:117;;;;;;;;;;;;:::i;:::-;;;;;;;;;27755:250;;;:::o;32505:843::-;32626:4;32652:15;:2;:13;;;:15::i;:::-;32648:693;;;32704:2;32688:36;;;32725:12;:10;:12::i;:::-;32739:4;32745:7;32754:5;32688:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;32684:602;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32951:1;32934:6;:13;:18;32930:341;;;32977:60;;;;;;;;;;:::i;:::-;;;;;;;;32930:341;33221:6;33215:13;33206:6;33202:2;33198:15;33191:38;32684:602;32821:45;;;32811:55;;;:6;:55;;;;32804:62;;;;;32648:693;33325:4;33318:11;;32505:843;;;;;;;:::o;33961:93::-;;;;:::o;38947:164::-;39051:10;:17;;;;39024:15;:24;39040:7;39024:24;;;;;;;;;;;:44;;;;39079:10;39095:7;39079:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;38947:164;:::o;39738:988::-;40004:22;40054:1;40029:22;40046:4;40029:16;:22::i;:::-;:26;;;;:::i;:::-;40004:51;;40066:18;40087:17;:26;40105:7;40087:26;;;;;;;;;;;;40066:47;;40234:14;40220:10;:28;40216:328;;40265:19;40287:12;:18;40300:4;40287:18;;;;;;;;;;;;;;;:34;40306:14;40287:34;;;;;;;;;;;;40265:56;;40371:11;40338:12;:18;40351:4;40338:18;;;;;;;;;;;;;;;:30;40357:10;40338:30;;;;;;;;;;;:44;;;;40488:10;40455:17;:30;40473:11;40455:30;;;;;;;;;;;:43;;;;40216:328;;40640:17;:26;40658:7;40640:26;;;;;;;;;;;40633:33;;;40684:12;:18;40697:4;40684:18;;;;;;;;;;;;;;;:34;40703:14;40684:34;;;;;;;;;;;40677:41;;;39738:988;;;;:::o;41021:1079::-;41274:22;41319:1;41299:10;:17;;;;:21;;;;:::i;:::-;41274:46;;41331:18;41352:15;:24;41368:7;41352:24;;;;;;;;;;;;41331:45;;41703:19;41725:10;41736:14;41725:26;;;;;;;;;;;;;;;;;;;;;;;;41703:48;;41789:11;41764:10;41775;41764:22;;;;;;;;;;;;;;;;;;;;;;;:36;;;;41900:10;41869:15;:28;41885:11;41869:28;;;;;;;;;;;:41;;;;42041:15;:24;42057:7;42041:24;;;;;;;;;;;42034:31;;;42076:10;:16;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41021:1079;;;;:::o;38525:221::-;38610:14;38627:20;38644:2;38627:16;:20::i;:::-;38610:37;;38685:7;38658:12;:16;38671:2;38658:16;;;;;;;;;;;;;;;:24;38675:6;38658:24;;;;;;;;;;;:34;;;;38732:6;38703:17;:26;38721:7;38703:26;;;;;;;;;;;:35;;;;38525:221;;;:::o;28756:887::-;28849:1;28835:16;;:2;:16;;;;28827:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;29011:16;29019:7;29011;:16::i;:::-;29007:629;;;29060:15;29103:3;29091:9;;29083:5;;29078:2;:10;;;;:::i;:::-;:22;;;;:::i;:::-;:28;;;;:::i;:::-;29060:46;;29125:21;29149:7;:16;29157:7;29149:16;;;;;;;;;;;;;;;;;;;;;29125:40;;29184:22;29217:13;29184:47;;29250:26;29260:6;29268:7;29250:9;:26::i;:::-;29315:41;29326:7;:16;29334:7;29326:16;;;;;;;;;;;;;;;;;;;;;29344:2;29348:7;29315:10;:41::i;:::-;29007:629;;;;;;29465:45;29494:1;29498:2;29502:7;29465:20;:45::i;:::-;29540:1;29523:9;:13;29533:2;29523:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;29571:2;29552:7;:16;29560:7;29552:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;29616:7;29612:2;29591:33;;29608:1;29591:33;;;;;;;;;;;;29007:629;28756:887;;:::o;7994:422::-;8054:4;8262:12;8373:7;8361:20;8353:28;;8407:1;8400:4;:8;8393:15;;;7994:422;;;:::o;28347:397::-;28462:6;28437:21;:31;;28429:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28594:12;28612:9;:14;;28635:6;28612:35;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28593:54;;;28666:7;28658:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;28347:397;;;:::o;31200:448::-;31368:39;31389:4;31395:2;31399:7;31368:20;:39::i;:::-;31472:29;31489:1;31493:7;31472:8;:29::i;:::-;31533:1;31514:9;:15;31524:4;31514:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;31562:1;31545:9;:13;31555:2;31545:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;31593:2;31574:7;:16;31582:7;31574:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;31632:7;31628:2;31613:27;;31622:4;31613:27;;;;;;;;;;;;31200:448;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:343:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:2;;;290:1;287;280:12;249:2;303:41;337:6;332:3;327;303:41;:::i;:::-;90:260;;;;;;:::o;356:345::-;434:5;459:66;475:49;517:6;475:49;:::i;:::-;459:66;:::i;:::-;450:75;;548:6;541:5;534:21;586:4;579:5;575:16;624:3;615:6;610:3;606:16;603:25;600:2;;;641:1;638;631:12;600:2;654:41;688:6;683:3;678;654:41;:::i;:::-;440:261;;;;;;:::o;707:139::-;753:5;791:6;778:20;769:29;;807:33;834:5;807:33;:::i;:::-;759:87;;;;:::o;852:133::-;895:5;933:6;920:20;911:29;;949:30;973:5;949:30;:::i;:::-;901:84;;;;:::o;991:137::-;1036:5;1074:6;1061:20;1052:29;;1090:32;1116:5;1090:32;:::i;:::-;1042:86;;;;:::o;1134:141::-;1190:5;1221:6;1215:13;1206:22;;1237:32;1263:5;1237:32;:::i;:::-;1196:79;;;;:::o;1294:271::-;1349:5;1398:3;1391:4;1383:6;1379:17;1375:27;1365:2;;1416:1;1413;1406:12;1365:2;1456:6;1443:20;1481:78;1555:3;1547:6;1540:4;1532:6;1528:17;1481:78;:::i;:::-;1472:87;;1355:210;;;;;:::o;1585:273::-;1641:5;1690:3;1683:4;1675:6;1671:17;1667:27;1657:2;;1708:1;1705;1698:12;1657:2;1748:6;1735:20;1773:79;1848:3;1840:6;1833:4;1825:6;1821:17;1773:79;:::i;:::-;1764:88;;1647:211;;;;;:::o;1864:139::-;1910:5;1948:6;1935:20;1926:29;;1964:33;1991:5;1964:33;:::i;:::-;1916:87;;;;:::o;2009:262::-;2068:6;2117:2;2105:9;2096:7;2092:23;2088:32;2085:2;;;2133:1;2130;2123:12;2085:2;2176:1;2201:53;2246:7;2237:6;2226:9;2222:22;2201:53;:::i;:::-;2191:63;;2147:117;2075:196;;;;:::o;2277:407::-;2345:6;2353;2402:2;2390:9;2381:7;2377:23;2373:32;2370:2;;;2418:1;2415;2408:12;2370:2;2461:1;2486:53;2531:7;2522:6;2511:9;2507:22;2486:53;:::i;:::-;2476:63;;2432:117;2588:2;2614:53;2659:7;2650:6;2639:9;2635:22;2614:53;:::i;:::-;2604:63;;2559:118;2360:324;;;;;:::o;2690:552::-;2767:6;2775;2783;2832:2;2820:9;2811:7;2807:23;2803:32;2800:2;;;2848:1;2845;2838:12;2800:2;2891:1;2916:53;2961:7;2952:6;2941:9;2937:22;2916:53;:::i;:::-;2906:63;;2862:117;3018:2;3044:53;3089:7;3080:6;3069:9;3065:22;3044:53;:::i;:::-;3034:63;;2989:118;3146:2;3172:53;3217:7;3208:6;3197:9;3193:22;3172:53;:::i;:::-;3162:63;;3117:118;2790:452;;;;;:::o;3248:809::-;3343:6;3351;3359;3367;3416:3;3404:9;3395:7;3391:23;3387:33;3384:2;;;3433:1;3430;3423:12;3384:2;3476:1;3501:53;3546:7;3537:6;3526:9;3522:22;3501:53;:::i;:::-;3491:63;;3447:117;3603:2;3629:53;3674:7;3665:6;3654:9;3650:22;3629:53;:::i;:::-;3619:63;;3574:118;3731:2;3757:53;3802:7;3793:6;3782:9;3778:22;3757:53;:::i;:::-;3747:63;;3702:118;3887:2;3876:9;3872:18;3859:32;3918:18;3910:6;3907:30;3904:2;;;3950:1;3947;3940:12;3904:2;3978:62;4032:7;4023:6;4012:9;4008:22;3978:62;:::i;:::-;3968:72;;3830:220;3374:683;;;;;;;:::o;4063:401::-;4128:6;4136;4185:2;4173:9;4164:7;4160:23;4156:32;4153:2;;;4201:1;4198;4191:12;4153:2;4244:1;4269:53;4314:7;4305:6;4294:9;4290:22;4269:53;:::i;:::-;4259:63;;4215:117;4371:2;4397:50;4439:7;4430:6;4419:9;4415:22;4397:50;:::i;:::-;4387:60;;4342:115;4143:321;;;;;:::o;4470:407::-;4538:6;4546;4595:2;4583:9;4574:7;4570:23;4566:32;4563:2;;;4611:1;4608;4601:12;4563:2;4654:1;4679:53;4724:7;4715:6;4704:9;4700:22;4679:53;:::i;:::-;4669:63;;4625:117;4781:2;4807:53;4852:7;4843:6;4832:9;4828:22;4807:53;:::i;:::-;4797:63;;4752:118;4553:324;;;;;:::o;4883:260::-;4941:6;4990:2;4978:9;4969:7;4965:23;4961:32;4958:2;;;5006:1;5003;4996:12;4958:2;5049:1;5074:52;5118:7;5109:6;5098:9;5094:22;5074:52;:::i;:::-;5064:62;;5020:116;4948:195;;;;:::o;5149:282::-;5218:6;5267:2;5255:9;5246:7;5242:23;5238:32;5235:2;;;5283:1;5280;5273:12;5235:2;5326:1;5351:63;5406:7;5397:6;5386:9;5382:22;5351:63;:::i;:::-;5341:73;;5297:127;5225:206;;;;:::o;5437:375::-;5506:6;5555:2;5543:9;5534:7;5530:23;5526:32;5523:2;;;5571:1;5568;5561:12;5523:2;5642:1;5631:9;5627:17;5614:31;5672:18;5664:6;5661:30;5658:2;;;5704:1;5701;5694:12;5658:2;5732:63;5787:7;5778:6;5767:9;5763:22;5732:63;:::i;:::-;5722:73;;5585:220;5513:299;;;;:::o;5818:262::-;5877:6;5926:2;5914:9;5905:7;5901:23;5897:32;5894:2;;;5942:1;5939;5932:12;5894:2;5985:1;6010:53;6055:7;6046:6;6035:9;6031:22;6010:53;:::i;:::-;6000:63;;5956:117;5884:196;;;;:::o;6086:118::-;6173:24;6191:5;6173:24;:::i;:::-;6168:3;6161:37;6151:53;;:::o;6210:109::-;6291:21;6306:5;6291:21;:::i;:::-;6286:3;6279:34;6269:50;;:::o;6325:360::-;6411:3;6439:38;6471:5;6439:38;:::i;:::-;6493:70;6556:6;6551:3;6493:70;:::i;:::-;6486:77;;6572:52;6617:6;6612:3;6605:4;6598:5;6594:16;6572:52;:::i;:::-;6649:29;6671:6;6649:29;:::i;:::-;6644:3;6640:39;6633:46;;6415:270;;;;;:::o;6691:364::-;6779:3;6807:39;6840:5;6807:39;:::i;:::-;6862:71;6926:6;6921:3;6862:71;:::i;:::-;6855:78;;6942:52;6987:6;6982:3;6975:4;6968:5;6964:16;6942:52;:::i;:::-;7019:29;7041:6;7019:29;:::i;:::-;7014:3;7010:39;7003:46;;6783:272;;;;;:::o;7061:377::-;7167:3;7195:39;7228:5;7195:39;:::i;:::-;7250:89;7332:6;7327:3;7250:89;:::i;:::-;7243:96;;7348:52;7393:6;7388:3;7381:4;7374:5;7370:16;7348:52;:::i;:::-;7425:6;7420:3;7416:16;7409:23;;7171:267;;;;;:::o;7444:366::-;7586:3;7607:67;7671:2;7666:3;7607:67;:::i;:::-;7600:74;;7683:93;7772:3;7683:93;:::i;:::-;7801:2;7796:3;7792:12;7785:19;;7590:220;;;:::o;7816:366::-;7958:3;7979:67;8043:2;8038:3;7979:67;:::i;:::-;7972:74;;8055:93;8144:3;8055:93;:::i;:::-;8173:2;8168:3;8164:12;8157:19;;7962:220;;;:::o;8188:366::-;8330:3;8351:67;8415:2;8410:3;8351:67;:::i;:::-;8344:74;;8427:93;8516:3;8427:93;:::i;:::-;8545:2;8540:3;8536:12;8529:19;;8334:220;;;:::o;8560:366::-;8702:3;8723:67;8787:2;8782:3;8723:67;:::i;:::-;8716:74;;8799:93;8888:3;8799:93;:::i;:::-;8917:2;8912:3;8908:12;8901:19;;8706:220;;;:::o;8932:366::-;9074:3;9095:67;9159:2;9154:3;9095:67;:::i;:::-;9088:74;;9171:93;9260:3;9171:93;:::i;:::-;9289:2;9284:3;9280:12;9273:19;;9078:220;;;:::o;9304:366::-;9446:3;9467:67;9531:2;9526:3;9467:67;:::i;:::-;9460:74;;9543:93;9632:3;9543:93;:::i;:::-;9661:2;9656:3;9652:12;9645:19;;9450:220;;;:::o;9676:366::-;9818:3;9839:67;9903:2;9898:3;9839:67;:::i;:::-;9832:74;;9915:93;10004:3;9915:93;:::i;:::-;10033:2;10028:3;10024:12;10017:19;;9822:220;;;:::o;10048:366::-;10190:3;10211:67;10275:2;10270:3;10211:67;:::i;:::-;10204:74;;10287:93;10376:3;10287:93;:::i;:::-;10405:2;10400:3;10396:12;10389:19;;10194:220;;;:::o;10420:366::-;10562:3;10583:67;10647:2;10642:3;10583:67;:::i;:::-;10576:74;;10659:93;10748:3;10659:93;:::i;:::-;10777:2;10772:3;10768:12;10761:19;;10566:220;;;:::o;10792:366::-;10934:3;10955:67;11019:2;11014:3;10955:67;:::i;:::-;10948:74;;11031:93;11120:3;11031:93;:::i;:::-;11149:2;11144:3;11140:12;11133:19;;10938:220;;;:::o;11164:366::-;11306:3;11327:67;11391:2;11386:3;11327:67;:::i;:::-;11320:74;;11403:93;11492:3;11403:93;:::i;:::-;11521:2;11516:3;11512:12;11505:19;;11310:220;;;:::o;11536:366::-;11678:3;11699:67;11763:2;11758:3;11699:67;:::i;:::-;11692:74;;11775:93;11864:3;11775:93;:::i;:::-;11893:2;11888:3;11884:12;11877:19;;11682:220;;;:::o;11908:366::-;12050:3;12071:67;12135:2;12130:3;12071:67;:::i;:::-;12064:74;;12147:93;12236:3;12147:93;:::i;:::-;12265:2;12260:3;12256:12;12249:19;;12054:220;;;:::o;12280:366::-;12422:3;12443:67;12507:2;12502:3;12443:67;:::i;:::-;12436:74;;12519:93;12608:3;12519:93;:::i;:::-;12637:2;12632:3;12628:12;12621:19;;12426:220;;;:::o;12652:366::-;12794:3;12815:67;12879:2;12874:3;12815:67;:::i;:::-;12808:74;;12891:93;12980:3;12891:93;:::i;:::-;13009:2;13004:3;13000:12;12993:19;;12798:220;;;:::o;13024:366::-;13166:3;13187:67;13251:2;13246:3;13187:67;:::i;:::-;13180:74;;13263:93;13352:3;13263:93;:::i;:::-;13381:2;13376:3;13372:12;13365:19;;13170:220;;;:::o;13396:400::-;13556:3;13577:84;13659:1;13654:3;13577:84;:::i;:::-;13570:91;;13670:93;13759:3;13670:93;:::i;:::-;13788:1;13783:3;13779:11;13772:18;;13560:236;;;:::o;13802:366::-;13944:3;13965:67;14029:2;14024:3;13965:67;:::i;:::-;13958:74;;14041:93;14130:3;14041:93;:::i;:::-;14159:2;14154:3;14150:12;14143:19;;13948:220;;;:::o;14174:366::-;14316:3;14337:67;14401:2;14396:3;14337:67;:::i;:::-;14330:74;;14413:93;14502:3;14413:93;:::i;:::-;14531:2;14526:3;14522:12;14515:19;;14320:220;;;:::o;14546:366::-;14688:3;14709:67;14773:2;14768:3;14709:67;:::i;:::-;14702:74;;14785:93;14874:3;14785:93;:::i;:::-;14903:2;14898:3;14894:12;14887:19;;14692:220;;;:::o;14918:366::-;15060:3;15081:67;15145:2;15140:3;15081:67;:::i;:::-;15074:74;;15157:93;15246:3;15157:93;:::i;:::-;15275:2;15270:3;15266:12;15259:19;;15064:220;;;:::o;15290:398::-;15449:3;15470:83;15551:1;15546:3;15470:83;:::i;:::-;15463:90;;15562:93;15651:3;15562:93;:::i;:::-;15680:1;15675:3;15671:11;15664:18;;15453:235;;;:::o;15694:366::-;15836:3;15857:67;15921:2;15916:3;15857:67;:::i;:::-;15850:74;;15933:93;16022:3;15933:93;:::i;:::-;16051:2;16046:3;16042:12;16035:19;;15840:220;;;:::o;16066:366::-;16208:3;16229:67;16293:2;16288:3;16229:67;:::i;:::-;16222:74;;16305:93;16394:3;16305:93;:::i;:::-;16423:2;16418:3;16414:12;16407:19;;16212:220;;;:::o;16438:366::-;16580:3;16601:67;16665:2;16660:3;16601:67;:::i;:::-;16594:74;;16677:93;16766:3;16677:93;:::i;:::-;16795:2;16790:3;16786:12;16779:19;;16584:220;;;:::o;16810:366::-;16952:3;16973:67;17037:2;17032:3;16973:67;:::i;:::-;16966:74;;17049:93;17138:3;17049:93;:::i;:::-;17167:2;17162:3;17158:12;17151:19;;16956:220;;;:::o;17182:366::-;17324:3;17345:67;17409:2;17404:3;17345:67;:::i;:::-;17338:74;;17421:93;17510:3;17421:93;:::i;:::-;17539:2;17534:3;17530:12;17523:19;;17328:220;;;:::o;17554:118::-;17641:24;17659:5;17641:24;:::i;:::-;17636:3;17629:37;17619:53;;:::o;17678:701::-;17959:3;17981:95;18072:3;18063:6;17981:95;:::i;:::-;17974:102;;18093:95;18184:3;18175:6;18093:95;:::i;:::-;18086:102;;18205:148;18349:3;18205:148;:::i;:::-;18198:155;;18370:3;18363:10;;17963:416;;;;;:::o;18385:379::-;18569:3;18591:147;18734:3;18591:147;:::i;:::-;18584:154;;18755:3;18748:10;;18573:191;;;:::o;18770:222::-;18863:4;18901:2;18890:9;18886:18;18878:26;;18914:71;18982:1;18971:9;18967:17;18958:6;18914:71;:::i;:::-;18868:124;;;;:::o;18998:640::-;19193:4;19231:3;19220:9;19216:19;19208:27;;19245:71;19313:1;19302:9;19298:17;19289:6;19245:71;:::i;:::-;19326:72;19394:2;19383:9;19379:18;19370:6;19326:72;:::i;:::-;19408;19476:2;19465:9;19461:18;19452:6;19408:72;:::i;:::-;19527:9;19521:4;19517:20;19512:2;19501:9;19497:18;19490:48;19555:76;19626:4;19617:6;19555:76;:::i;:::-;19547:84;;19198:440;;;;;;;:::o;19644:210::-;19731:4;19769:2;19758:9;19754:18;19746:26;;19782:65;19844:1;19833:9;19829:17;19820:6;19782:65;:::i;:::-;19736:118;;;;:::o;19860:313::-;19973:4;20011:2;20000:9;19996:18;19988:26;;20060:9;20054:4;20050:20;20046:1;20035:9;20031:17;20024:47;20088:78;20161:4;20152:6;20088:78;:::i;:::-;20080:86;;19978:195;;;;:::o;20179:419::-;20345:4;20383:2;20372:9;20368:18;20360:26;;20432:9;20426:4;20422:20;20418:1;20407:9;20403:17;20396:47;20460:131;20586:4;20460:131;:::i;:::-;20452:139;;20350:248;;;:::o;20604:419::-;20770:4;20808:2;20797:9;20793:18;20785:26;;20857:9;20851:4;20847:20;20843:1;20832:9;20828:17;20821:47;20885:131;21011:4;20885:131;:::i;:::-;20877:139;;20775:248;;;:::o;21029:419::-;21195:4;21233:2;21222:9;21218:18;21210:26;;21282:9;21276:4;21272:20;21268:1;21257:9;21253:17;21246:47;21310:131;21436:4;21310:131;:::i;:::-;21302:139;;21200:248;;;:::o;21454:419::-;21620:4;21658:2;21647:9;21643:18;21635:26;;21707:9;21701:4;21697:20;21693:1;21682:9;21678:17;21671:47;21735:131;21861:4;21735:131;:::i;:::-;21727:139;;21625:248;;;:::o;21879:419::-;22045:4;22083:2;22072:9;22068:18;22060:26;;22132:9;22126:4;22122:20;22118:1;22107:9;22103:17;22096:47;22160:131;22286:4;22160:131;:::i;:::-;22152:139;;22050:248;;;:::o;22304:419::-;22470:4;22508:2;22497:9;22493:18;22485:26;;22557:9;22551:4;22547:20;22543:1;22532:9;22528:17;22521:47;22585:131;22711:4;22585:131;:::i;:::-;22577:139;;22475:248;;;:::o;22729:419::-;22895:4;22933:2;22922:9;22918:18;22910:26;;22982:9;22976:4;22972:20;22968:1;22957:9;22953:17;22946:47;23010:131;23136:4;23010:131;:::i;:::-;23002:139;;22900:248;;;:::o;23154:419::-;23320:4;23358:2;23347:9;23343:18;23335:26;;23407:9;23401:4;23397:20;23393:1;23382:9;23378:17;23371:47;23435:131;23561:4;23435:131;:::i;:::-;23427:139;;23325:248;;;:::o;23579:419::-;23745:4;23783:2;23772:9;23768:18;23760:26;;23832:9;23826:4;23822:20;23818:1;23807:9;23803:17;23796:47;23860:131;23986:4;23860:131;:::i;:::-;23852:139;;23750:248;;;:::o;24004:419::-;24170:4;24208:2;24197:9;24193:18;24185:26;;24257:9;24251:4;24247:20;24243:1;24232:9;24228:17;24221:47;24285:131;24411:4;24285:131;:::i;:::-;24277:139;;24175:248;;;:::o;24429:419::-;24595:4;24633:2;24622:9;24618:18;24610:26;;24682:9;24676:4;24672:20;24668:1;24657:9;24653:17;24646:47;24710:131;24836:4;24710:131;:::i;:::-;24702:139;;24600:248;;;:::o;24854:419::-;25020:4;25058:2;25047:9;25043:18;25035:26;;25107:9;25101:4;25097:20;25093:1;25082:9;25078:17;25071:47;25135:131;25261:4;25135:131;:::i;:::-;25127:139;;25025:248;;;:::o;25279:419::-;25445:4;25483:2;25472:9;25468:18;25460:26;;25532:9;25526:4;25522:20;25518:1;25507:9;25503:17;25496:47;25560:131;25686:4;25560:131;:::i;:::-;25552:139;;25450:248;;;:::o;25704:419::-;25870:4;25908:2;25897:9;25893:18;25885:26;;25957:9;25951:4;25947:20;25943:1;25932:9;25928:17;25921:47;25985:131;26111:4;25985:131;:::i;:::-;25977:139;;25875:248;;;:::o;26129:419::-;26295:4;26333:2;26322:9;26318:18;26310:26;;26382:9;26376:4;26372:20;26368:1;26357:9;26353:17;26346:47;26410:131;26536:4;26410:131;:::i;:::-;26402:139;;26300:248;;;:::o;26554:419::-;26720:4;26758:2;26747:9;26743:18;26735:26;;26807:9;26801:4;26797:20;26793:1;26782:9;26778:17;26771:47;26835:131;26961:4;26835:131;:::i;:::-;26827:139;;26725:248;;;:::o;26979:419::-;27145:4;27183:2;27172:9;27168:18;27160:26;;27232:9;27226:4;27222:20;27218:1;27207:9;27203:17;27196:47;27260:131;27386:4;27260:131;:::i;:::-;27252:139;;27150:248;;;:::o;27404:419::-;27570:4;27608:2;27597:9;27593:18;27585:26;;27657:9;27651:4;27647:20;27643:1;27632:9;27628:17;27621:47;27685:131;27811:4;27685:131;:::i;:::-;27677:139;;27575:248;;;:::o;27829:419::-;27995:4;28033:2;28022:9;28018:18;28010:26;;28082:9;28076:4;28072:20;28068:1;28057:9;28053:17;28046:47;28110:131;28236:4;28110:131;:::i;:::-;28102:139;;28000:248;;;:::o;28254:419::-;28420:4;28458:2;28447:9;28443:18;28435:26;;28507:9;28501:4;28497:20;28493:1;28482:9;28478:17;28471:47;28535:131;28661:4;28535:131;:::i;:::-;28527:139;;28425:248;;;:::o;28679:419::-;28845:4;28883:2;28872:9;28868:18;28860:26;;28932:9;28926:4;28922:20;28918:1;28907:9;28903:17;28896:47;28960:131;29086:4;28960:131;:::i;:::-;28952:139;;28850:248;;;:::o;29104:419::-;29270:4;29308:2;29297:9;29293:18;29285:26;;29357:9;29351:4;29347:20;29343:1;29332:9;29328:17;29321:47;29385:131;29511:4;29385:131;:::i;:::-;29377:139;;29275:248;;;:::o;29529:419::-;29695:4;29733:2;29722:9;29718:18;29710:26;;29782:9;29776:4;29772:20;29768:1;29757:9;29753:17;29746:47;29810:131;29936:4;29810:131;:::i;:::-;29802:139;;29700:248;;;:::o;29954:419::-;30120:4;30158:2;30147:9;30143:18;30135:26;;30207:9;30201:4;30197:20;30193:1;30182:9;30178:17;30171:47;30235:131;30361:4;30235:131;:::i;:::-;30227:139;;30125:248;;;:::o;30379:419::-;30545:4;30583:2;30572:9;30568:18;30560:26;;30632:9;30626:4;30622:20;30618:1;30607:9;30603:17;30596:47;30660:131;30786:4;30660:131;:::i;:::-;30652:139;;30550:248;;;:::o;30804:222::-;30897:4;30935:2;30924:9;30920:18;30912:26;;30948:71;31016:1;31005:9;31001:17;30992:6;30948:71;:::i;:::-;30902:124;;;;:::o;31032:129::-;31066:6;31093:20;;:::i;:::-;31083:30;;31122:33;31150:4;31142:6;31122:33;:::i;:::-;31073:88;;;:::o;31167:75::-;31200:6;31233:2;31227:9;31217:19;;31207:35;:::o;31248:307::-;31309:4;31399:18;31391:6;31388:30;31385:2;;;31421:18;;:::i;:::-;31385:2;31459:29;31481:6;31459:29;:::i;:::-;31451:37;;31543:4;31537;31533:15;31525:23;;31314:241;;;:::o;31561:308::-;31623:4;31713:18;31705:6;31702:30;31699:2;;;31735:18;;:::i;:::-;31699:2;31773:29;31795:6;31773:29;:::i;:::-;31765:37;;31857:4;31851;31847:15;31839:23;;31628:241;;;:::o;31875:98::-;31926:6;31960:5;31954:12;31944:22;;31933:40;;;:::o;31979:99::-;32031:6;32065:5;32059:12;32049:22;;32038:40;;;:::o;32084:168::-;32167:11;32201:6;32196:3;32189:19;32241:4;32236:3;32232:14;32217:29;;32179:73;;;;:::o;32258:147::-;32359:11;32396:3;32381:18;;32371:34;;;;:::o;32411:169::-;32495:11;32529:6;32524:3;32517:19;32569:4;32564:3;32560:14;32545:29;;32507:73;;;;:::o;32586:148::-;32688:11;32725:3;32710:18;;32700:34;;;;:::o;32740:305::-;32780:3;32799:20;32817:1;32799:20;:::i;:::-;32794:25;;32833:20;32851:1;32833:20;:::i;:::-;32828:25;;32987:1;32919:66;32915:74;32912:1;32909:81;32906:2;;;32993:18;;:::i;:::-;32906:2;33037:1;33034;33030:9;33023:16;;32784:261;;;;:::o;33051:185::-;33091:1;33108:20;33126:1;33108:20;:::i;:::-;33103:25;;33142:20;33160:1;33142:20;:::i;:::-;33137:25;;33181:1;33171:2;;33186:18;;:::i;:::-;33171:2;33228:1;33225;33221:9;33216:14;;33093:143;;;;:::o;33242:348::-;33282:7;33305:20;33323:1;33305:20;:::i;:::-;33300:25;;33339:20;33357:1;33339:20;:::i;:::-;33334:25;;33527:1;33459:66;33455:74;33452:1;33449:81;33444:1;33437:9;33430:17;33426:105;33423:2;;;33534:18;;:::i;:::-;33423:2;33582:1;33579;33575:9;33564:20;;33290:300;;;;:::o;33596:191::-;33636:4;33656:20;33674:1;33656:20;:::i;:::-;33651:25;;33690:20;33708:1;33690:20;:::i;:::-;33685:25;;33729:1;33726;33723:8;33720:2;;;33734:18;;:::i;:::-;33720:2;33779:1;33776;33772:9;33764:17;;33641:146;;;;:::o;33793:96::-;33830:7;33859:24;33877:5;33859:24;:::i;:::-;33848:35;;33838:51;;;:::o;33895:90::-;33929:7;33972:5;33965:13;33958:21;33947:32;;33937:48;;;:::o;33991:149::-;34027:7;34067:66;34060:5;34056:78;34045:89;;34035:105;;;:::o;34146:126::-;34183:7;34223:42;34216:5;34212:54;34201:65;;34191:81;;;:::o;34278:77::-;34315:7;34344:5;34333:16;;34323:32;;;:::o;34361:154::-;34445:6;34440:3;34435;34422:30;34507:1;34498:6;34493:3;34489:16;34482:27;34412:103;;;:::o;34521:307::-;34589:1;34599:113;34613:6;34610:1;34607:13;34599:113;;;34698:1;34693:3;34689:11;34683:18;34679:1;34674:3;34670:11;34663:39;34635:2;34632:1;34628:10;34623:15;;34599:113;;;34730:6;34727:1;34724:13;34721:2;;;34810:1;34801:6;34796:3;34792:16;34785:27;34721:2;34570:258;;;;:::o;34834:320::-;34878:6;34915:1;34909:4;34905:12;34895:22;;34962:1;34956:4;34952:12;34983:18;34973:2;;35039:4;35031:6;35027:17;35017:27;;34973:2;35101;35093:6;35090:14;35070:18;35067:38;35064:2;;;35120:18;;:::i;:::-;35064:2;34885:269;;;;:::o;35160:281::-;35243:27;35265:4;35243:27;:::i;:::-;35235:6;35231:40;35373:6;35361:10;35358:22;35337:18;35325:10;35322:34;35319:62;35316:2;;;35384:18;;:::i;:::-;35316:2;35424:10;35420:2;35413:22;35203:238;;;:::o;35447:233::-;35486:3;35509:24;35527:5;35509:24;:::i;:::-;35500:33;;35555:66;35548:5;35545:77;35542:2;;;35625:18;;:::i;:::-;35542:2;35672:1;35665:5;35661:13;35654:20;;35490:190;;;:::o;35686:176::-;35718:1;35735:20;35753:1;35735:20;:::i;:::-;35730:25;;35769:20;35787:1;35769:20;:::i;:::-;35764:25;;35808:1;35798:2;;35813:18;;:::i;:::-;35798:2;35854:1;35851;35847:9;35842:14;;35720:142;;;;:::o;35868:180::-;35916:77;35913:1;35906:88;36013:4;36010:1;36003:15;36037:4;36034:1;36027:15;36054:180;36102:77;36099:1;36092:88;36199:4;36196:1;36189:15;36223:4;36220:1;36213:15;36240:180;36288:77;36285:1;36278:88;36385:4;36382:1;36375:15;36409:4;36406:1;36399:15;36426:180;36474:77;36471:1;36464:88;36571:4;36568:1;36561:15;36595:4;36592:1;36585:15;36612:102;36653:6;36704:2;36700:7;36695:2;36688:5;36684:14;36680:28;36670:38;;36660:54;;;:::o;36720:176::-;36860:28;36856:1;36848:6;36844:14;36837:52;36826:70;:::o;36902:230::-;37042:34;37038:1;37030:6;37026:14;37019:58;37111:13;37106:2;37098:6;37094:15;37087:38;37008:124;:::o;37138:237::-;37278:34;37274:1;37266:6;37262:14;37255:58;37347:20;37342:2;37334:6;37330:15;37323:45;37244:131;:::o;37381:225::-;37521:34;37517:1;37509:6;37505:14;37498:58;37590:8;37585:2;37577:6;37573:15;37566:33;37487:119;:::o;37612:223::-;37752:34;37748:1;37740:6;37736:14;37729:58;37821:6;37816:2;37808:6;37804:15;37797:31;37718:117;:::o;37841:175::-;37981:27;37977:1;37969:6;37965:14;37958:51;37947:69;:::o;38022:245::-;38162:34;38158:1;38150:6;38146:14;38139:58;38231:28;38226:2;38218:6;38214:15;38207:53;38128:139;:::o;38273:221::-;38413:34;38409:1;38401:6;38397:14;38390:58;38482:4;38477:2;38469:6;38465:15;38458:29;38379:115;:::o;38500:179::-;38640:31;38636:1;38628:6;38624:14;38617:55;38606:73;:::o;38685:231::-;38825:34;38821:1;38813:6;38809:14;38802:58;38894:14;38889:2;38881:6;38877:15;38870:39;38791:125;:::o;38922:243::-;39062:34;39058:1;39050:6;39046:14;39039:58;39131:26;39126:2;39118:6;39114:15;39107:51;39028:137;:::o;39171:229::-;39311:34;39307:1;39299:6;39295:14;39288:58;39380:12;39375:2;39367:6;39363:15;39356:37;39277:123;:::o;39406:228::-;39546:34;39542:1;39534:6;39530:14;39523:58;39615:11;39610:2;39602:6;39598:15;39591:36;39512:122;:::o;39640:172::-;39780:24;39776:1;39768:6;39764:14;39757:48;39746:66;:::o;39818:182::-;39958:34;39954:1;39946:6;39942:14;39935:58;39924:76;:::o;40006:231::-;40146:34;40142:1;40134:6;40130:14;40123:58;40215:14;40210:2;40202:6;40198:15;40191:39;40112:125;:::o;40243:155::-;40383:7;40379:1;40371:6;40367:14;40360:31;40349:49;:::o;40404:182::-;40544:34;40540:1;40532:6;40528:14;40521:58;40510:76;:::o;40592:228::-;40732:34;40728:1;40720:6;40716:14;40709:58;40801:11;40796:2;40788:6;40784:15;40777:36;40698:122;:::o;40826:234::-;40966:34;40962:1;40954:6;40950:14;40943:58;41035:17;41030:2;41022:6;41018:15;41011:42;40932:128;:::o;41066:220::-;41206:34;41202:1;41194:6;41190:14;41183:58;41275:3;41270:2;41262:6;41258:15;41251:28;41172:114;:::o;41292:::-;41398:8;:::o;41412:236::-;41552:34;41548:1;41540:6;41536:14;41529:58;41621:19;41616:2;41608:6;41604:15;41597:44;41518:130;:::o;41654:231::-;41794:34;41790:1;41782:6;41778:14;41771:58;41863:14;41858:2;41850:6;41846:15;41839:39;41760:125;:::o;41891:177::-;42031:29;42027:1;42019:6;42015:14;42008:53;41997:71;:::o;42074:248::-;42214:34;42210:1;42202:6;42198:14;42191:58;42283:31;42278:2;42270:6;42266:15;42259:56;42180:142;:::o;42328:226::-;42468:34;42464:1;42456:6;42452:14;42445:58;42537:9;42532:2;42524:6;42520:15;42513:34;42434:120;:::o;42560:122::-;42633:24;42651:5;42633:24;:::i;:::-;42626:5;42623:35;42613:2;;42672:1;42669;42662:12;42613:2;42603:79;:::o;42688:116::-;42758:21;42773:5;42758:21;:::i;:::-;42751:5;42748:32;42738:2;;42794:1;42791;42784:12;42738:2;42728:76;:::o;42810:120::-;42882:23;42899:5;42882:23;:::i;:::-;42875:5;42872:34;42862:2;;42920:1;42917;42910:12;42862:2;42852:78;:::o;42936:122::-;43009:24;43027:5;43009:24;:::i;:::-;43002:5;42999:35;42989:2;;43048:1;43045;43038:12;42989:2;42979:79;:::o
Swarm Source
ipfs://37cbb6e415336b6be1e66b145692874d37dc701989ddb3a06cade578c8f44143
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.