Token
GentleDogggiesSerum (GDS)
ERC-721
Overview
Max Total Supply
0 GDS
Holders
0
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Balance
0 GDSLoading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
GentleDoggiesSerum
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at testnet.ftmscan.com on 2022-04-25 */ // File: contracts/interfaces/ILayerZeroReceiver.sol pragma solidity >=0.5.0; interface ILayerZeroReceiver { // @notice LayerZero endpoint will invoke this function to deliver the message on the destination // @param _srcChainId - the source endpoint identifier // @param _srcAddress - the source sending contract address from the source chain // @param _nonce - the ordered message nonce // @param _payload - the signed payload is the UA bytes has encoded to be sent function lzReceive(uint16 _srcChainId, bytes calldata _srcAddress, uint64 _nonce, bytes calldata _payload) external; } // File: contracts/interfaces/ILayerZeroUserApplicationConfig.sol pragma solidity >=0.5.0; interface ILayerZeroUserApplicationConfig { // @notice set the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _configType - type of configuration. every messaging library has its own convention. // @param _config - configuration in the bytes. can encode arbitrary content. function setConfig(uint16 _version, uint16 _chainId, uint _configType, bytes calldata _config) external; // @notice set the send() LayerZero messaging library version to _version // @param _version - new messaging library version function setSendVersion(uint16 _version) external; // @notice set the lzReceive() LayerZero messaging library version to _version // @param _version - new messaging library version function setReceiveVersion(uint16 _version) external; // @notice Only when the UA needs to resume the message flow in blocking mode and clear the stored payload // @param _srcChainId - the chainId of the source chain // @param _srcAddress - the contract address of the source contract at the source chain function forceResumeReceive(uint16 _srcChainId, bytes calldata _srcAddress) external; } // File: contracts/interfaces/ILayerZeroEndpoint.sol pragma solidity >=0.5.0; interface ILayerZeroEndpoint is ILayerZeroUserApplicationConfig { // @notice send a LayerZero message to the specified address at a LayerZero endpoint. // @param _dstChainId - the destination chain identifier // @param _destination - the address on destination chain (in bytes). address length/format may vary by chains // @param _payload - a custom bytes payload to send to the destination contract // @param _refundAddress - if the source transaction is cheaper than the amount of value passed, refund the additional amount to this address // @param _zroPaymentAddress - the address of the ZRO token holder who would pay for the transaction // @param _adapterParams - parameters for custom functionality. e.g. receive airdropped native gas from the relayer on destination function send(uint16 _dstChainId, bytes calldata _destination, bytes calldata _payload, address payable _refundAddress, address _zroPaymentAddress, bytes calldata _adapterParams) external payable; // @notice used by the messaging library to publish verified payload // @param _srcChainId - the source chain identifier // @param _srcAddress - the source contract (as bytes) at the source chain // @param _dstAddress - the address on destination chain // @param _nonce - the unbound message ordering nonce // @param _gasLimit - the gas limit for external contract execution // @param _payload - verified payload to send to the destination contract function receivePayload(uint16 _srcChainId, bytes calldata _srcAddress, address _dstAddress, uint64 _nonce, uint _gasLimit, bytes calldata _payload) external; // @notice get the inboundNonce of a lzApp from a source chain which could be EVM or non-EVM chain // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function getInboundNonce(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (uint64); // @notice get the outboundNonce from this source chain which, consequently, is always an EVM // @param _srcAddress - the source chain contract address function getOutboundNonce(uint16 _dstChainId, address _srcAddress) external view returns (uint64); // @notice gets a quote in source native gas, for the amount that send() requires to pay for message delivery // @param _dstChainId - the destination chain identifier // @param _userApplication - the user app address on this EVM chain // @param _payload - the custom message to send over LayerZero // @param _payInZRO - if false, user app pays the protocol fee in native token // @param _adapterParam - parameters for the adapter service, e.g. send some dust native token to dstChain function estimateFees(uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParam) external view returns (uint nativeFee, uint zroFee); // @notice get this Endpoint's immutable source identifier function getChainId() external view returns (uint16); // @notice the interface to retry failed message on this Endpoint destination // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address // @param _payload - the payload to be retried function retryPayload(uint16 _srcChainId, bytes calldata _srcAddress, bytes calldata _payload) external; // @notice query if any STORED payload (message blocking) at the endpoint. // @param _srcChainId - the source chain identifier // @param _srcAddress - the source chain contract address function hasStoredPayload(uint16 _srcChainId, bytes calldata _srcAddress) external view returns (bool); // @notice query if the _libraryAddress is valid for sending msgs. // @param _userApplication - the user app address on this EVM chain function getSendLibraryAddress(address _userApplication) external view returns (address); // @notice query if the _libraryAddress is valid for receiving msgs. // @param _userApplication - the user app address on this EVM chain function getReceiveLibraryAddress(address _userApplication) external view returns (address); // @notice query if the non-reentrancy guard for send() is on // @return true if the guard is on. false otherwise function isSendingPayload() external view returns (bool); // @notice query if the non-reentrancy guard for receive() is on // @return true if the guard is on. false otherwise function isReceivingPayload() external view returns (bool); // @notice get the configuration of the LayerZero messaging library of the specified version // @param _version - messaging library version // @param _chainId - the chainId for the pending config change // @param _userApplication - the contract address of the user application // @param _configType - type of configuration. every messaging library has its own convention. function getConfig(uint16 _version, uint16 _chainId, address _userApplication, uint _configType) external view returns (bytes memory); // @notice get the send() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getSendVersion(address _userApplication) external view returns (uint16); // @notice get the lzReceive() LayerZero messaging library version // @param _userApplication - the contract address of the user application function getReceiveVersion(address _userApplication) external view returns (uint16); } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (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/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (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; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (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() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: contracts/token/onft/gentledoggies.sol //SPDX-License-Identifier: MIT pragma solidity ^0.8.9; contract GentleDoggiesSerum is Ownable, ERC721, ILayerZeroReceiver { address public _owner; string private baseURI; uint256 counter = 0; uint256 nextId = 0; uint256 MAX = 1000; uint256 gas = 350000; bool public paused = false; mapping(address => bool) public whitelisted; ILayerZeroEndpoint public endpoint; event ReceiveNFT( uint16 _srcChainId, address _from, uint256 _tokenId, uint256 counter ); constructor( address _endpoint, uint256 startId, uint256 _max ) ERC721("GentleDogggiesSerum", "GDS") { endpoint = ILayerZeroEndpoint(_endpoint); nextId = startId; MAX = _max; } function mint() external payable { require(nextId + 1 <= MAX, "Exceeds supply"); nextId += 1; _safeMint(msg.sender, nextId); counter += 1; } function setBaseURI(string memory URI) external onlyOwner { baseURI = URI; } function crossChain( uint16 _dstChainId, bytes calldata _destination, uint256 tokenId ) public payable { require(msg.sender == ownerOf(tokenId), "Not the owner"); // burn NFT _burn(tokenId); counter -= 1; bytes memory payload = abi.encode(msg.sender, tokenId); // encode adapterParams to specify more gas for the destination uint16 version = 1; bytes memory adapterParams = abi.encodePacked(version, gas); (uint256 messageFee, ) = endpoint.estimateFees( _dstChainId, address(this), payload, false, adapterParams ); require( msg.value >= messageFee, "Must send enough value to cover messageFee" ); endpoint.send{value: msg.value}( _dstChainId, _destination, payload, payable(msg.sender), address(0x0), adapterParams ); } function lzReceive( uint16 _srcChainId, bytes memory _from, uint64, bytes memory _payload ) external override { require(msg.sender == address(endpoint)); address from; assembly { from := mload(add(_from, 20)) } (address toAddress, uint256 tokenId) = abi.decode( _payload, (address, uint256) ); // mint the tokens _safeMint(toAddress, tokenId); counter += 1; emit ReceiveNFT(_srcChainId, toAddress, tokenId, counter); } // Endpoint.sol estimateFees() returns the fees for the message function estimateFees( uint16 _dstChainId, address _userApplication, bytes calldata _payload, bool _payInZRO, bytes calldata _adapterParams ) external view returns (uint256 nativeFee, uint256 zroFee) { return endpoint.estimateFees( _dstChainId, _userApplication, _payload, _payInZRO, _adapterParams ); } function whitelistUser(address _user) public onlyOwner { whitelisted[_user] = true; } function _baseURI() override internal view returns (string memory) { return baseURI; } }
[{"inputs":[{"internalType":"address","name":"_endpoint","type":"address"},{"internalType":"uint256","name":"startId","type":"uint256"},{"internalType":"uint256","name":"_max","type":"uint256"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"address","name":"_from","type":"address"},{"indexed":false,"internalType":"uint256","name":"_tokenId","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"counter","type":"uint256"}],"name":"ReceiveNFT","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":"_owner","outputs":[{"internalType":"address","name":"","type":"address"}],"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":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"bytes","name":"_destination","type":"bytes"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"crossChain","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"endpoint","outputs":[{"internalType":"contract ILayerZeroEndpoint","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_dstChainId","type":"uint16"},{"internalType":"address","name":"_userApplication","type":"address"},{"internalType":"bytes","name":"_payload","type":"bytes"},{"internalType":"bool","name":"_payInZRO","type":"bool"},{"internalType":"bytes","name":"_adapterParams","type":"bytes"}],"name":"estimateFees","outputs":[{"internalType":"uint256","name":"nativeFee","type":"uint256"},{"internalType":"uint256","name":"zroFee","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_from","type":"bytes"},{"internalType":"uint64","name":"","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"URI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"whitelistUser","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
608060405260006009556000600a556103e8600b5562055730600c556000600d60006101000a81548160ff0219169083151502179055503480156200004357600080fd5b5060405162004415380380620044158339818101604052810190620000699190620003a2565b6040518060400160405280601381526020017f47656e746c65446f676767696573536572756d000000000000000000000000008152506040518060400160405280600381526020017f4744530000000000000000000000000000000000000000000000000000000000815250620000f5620000e96200018160201b60201c565b6200018960201b60201c565b81600190805190602001906200010d9291906200024d565b508060029080519060200190620001269291906200024d565b50505082600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600a8190555080600b8190555050505062000463565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200025b906200042d565b90600052602060002090601f0160209004810192826200027f5760008555620002cb565b82601f106200029a57805160ff1916838001178555620002cb565b82800160010185558215620002cb579182015b82811115620002ca578251825591602001919060010190620002ad565b5b509050620002da9190620002de565b5090565b5b80821115620002f9576000816000905550600101620002df565b5090565b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b60006200032f8262000302565b9050919050565b620003418162000322565b81146200034d57600080fd5b50565b600081519050620003618162000336565b92915050565b6000819050919050565b6200037c8162000367565b81146200038857600080fd5b50565b6000815190506200039c8162000371565b92915050565b600080600060608486031215620003be57620003bd620002fd565b5b6000620003ce8682870162000350565b9350506020620003e1868287016200038b565b9250506040620003f4868287016200038b565b9150509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200044657607f821691505b602082108114156200045d576200045c620003fe565b5b50919050565b613fa280620004736000396000f3fe6080604052600436106101805760003560e01c80636352211e116100d1578063b2bdfa7b1161008a578063c87b56dd11610064578063c87b56dd1461053e578063d936547e1461057b578063e985e9c5146105b8578063f2fde38b146105f557610180565b8063b2bdfa7b146104ce578063b88d4fde146104f9578063baf1639e1461052257610180565b80636352211e146103be57806370a08231146103fb578063715018a6146104385780638da5cb5b1461044f57806395d89b411461047a578063a22cb465146104a557610180565b806323b872dd1161013e5780634a4c560d116101185780634a4c560d1461031657806355f804b31461033f5780635c975abb146103685780635e280f111461039357610180565b806323b872dd1461028657806340a7bb10146102af57806342842e0e146102ed57610180565b80621d35671461018557806301ffc9a7146101ae57806306fdde03146101eb578063081812fc14610216578063095ea7b3146102535780631249c58b1461027c575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a791906126a2565b61061e565b005b3480156101ba57600080fd5b506101d560048036038101906101d09190612799565b610708565b6040516101e291906127e1565b60405180910390f35b3480156101f757600080fd5b506102006107ea565b60405161020d9190612884565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906128dc565b61087c565b60405161024a919061294a565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190612991565b610901565b005b610284610a19565b005b34801561029257600080fd5b506102ad60048036038101906102a891906129d1565b610aae565b005b3480156102bb57600080fd5b506102d660048036038101906102d19190612ab0565b610b0e565b6040516102e4929190612b7b565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906129d1565b610bc8565b005b34801561032257600080fd5b5061033d60048036038101906103389190612ba4565b610be8565b005b34801561034b57600080fd5b5061036660048036038101906103619190612c72565b610cbf565b005b34801561037457600080fd5b5061037d610d55565b60405161038a91906127e1565b60405180910390f35b34801561039f57600080fd5b506103a8610d68565b6040516103b59190612d1a565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906128dc565b610d8e565b6040516103f2919061294a565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612ba4565b610e40565b60405161042f9190612d35565b60405180910390f35b34801561044457600080fd5b5061044d610ef8565b005b34801561045b57600080fd5b50610464610f80565b604051610471919061294a565b60405180910390f35b34801561048657600080fd5b5061048f610fa9565b60405161049c9190612884565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190612d50565b61103b565b005b3480156104da57600080fd5b506104e3611051565b6040516104f0919061294a565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190612d90565b611077565b005b61053c60048036038101906105379190612e13565b6110d9565b005b34801561054a57600080fd5b50610565600480360381019061056091906128dc565b611357565b6040516105729190612884565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612ba4565b6113fe565b6040516105af91906127e1565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190612e87565b61141e565b6040516105ec91906127e1565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612ba4565b6114b2565b005b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067857600080fd5b600060148401519050600080838060200190518101906106989190612f1a565b915091506106a682826115aa565b6001600960008282546106b99190612f89565b925050819055507fec16668a9529c4fc256054f3e18620ef50c89aec357376cce821207ff1e656f08783836009546040516106f79493929190612fee565b60405180910390a150505050505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107d357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107e357506107e2826115c8565b5b9050919050565b6060600180546107f990613062565b80601f016020809104026020016040519081016040528092919081815260200182805461082590613062565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050905090565b600061088782611632565b6108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd90613106565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090c82610d8e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490613198565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661099c61169e565b73ffffffffffffffffffffffffffffffffffffffff1614806109cb57506109ca816109c561169e565b61141e565b5b610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019061322a565b60405180910390fd5b610a1483836116a6565b505050565b600b546001600a54610a2b9190612f89565b1115610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613296565b60405180910390fd5b6001600a6000828254610a7f9190612f89565b92505081905550610a9233600a546115aa565b600160096000828254610aa59190612f89565b92505081905550565b610abf610ab961169e565b8261175f565b610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613328565b60405180910390fd5b610b0983838361183d565b505050565b600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108a8a8a8a8a8a8a6040518863ffffffff1660e01b8152600401610b789796959493929190613386565b6040805180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb891906133eb565b9150915097509795505050505050565b610be383838360405180602001604052806000815250611077565b505050565b610bf061169e565b73ffffffffffffffffffffffffffffffffffffffff16610c0e610f80565b73ffffffffffffffffffffffffffffffffffffffff1614610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613477565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610cc761169e565b73ffffffffffffffffffffffffffffffffffffffff16610ce5610f80565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290613477565b60405180910390fd5b8060089080519060200190610d5192919061242b565b5050565b600d60009054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613509565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea89061359b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f0061169e565b73ffffffffffffffffffffffffffffffffffffffff16610f1e610f80565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b90613477565b60405180910390fd5b610f7e6000611aa4565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610fb890613062565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe490613062565b80156110315780601f1061100657610100808354040283529160200191611031565b820191906000526020600020905b81548152906001019060200180831161101457829003601f168201915b5050505050905090565b61104d61104661169e565b8383611b68565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61108861108261169e565b8361175f565b6110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613328565b60405180910390fd5b6110d384848484611cd5565b50505050565b6110e281610d8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690613607565b60405180910390fd5b61115881611d31565b60016009600082825461116b9190613627565b925050819055506000338260405160200161118792919061365b565b6040516020818303038152906040529050600060019050600081600c546040516020016111b59291906136db565b60405160208183030381529060405290506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108930876000876040518663ffffffff1660e01b815260040161122c95949392919061374b565b6040805180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c91906133eb565b509050803410156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a99061381e565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5803100348a8a8a893360008a6040518963ffffffff1660e01b815260040161131b979695949392919061384d565b6000604051808303818588803b15801561133457600080fd5b505af1158015611348573d6000803e3d6000fd5b50505050505050505050505050565b606061136282611632565b6113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613937565b60405180910390fd5b60006113ab611e4e565b905060008151116113cb57604051806020016040528060008152506113f6565b806113d584611ee0565b6040516020016113e6929190613993565b6040516020818303038152906040525b915050919050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114ba61169e565b73ffffffffffffffffffffffffffffffffffffffff166114d8610f80565b73ffffffffffffffffffffffffffffffffffffffff161461152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613477565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590613a29565b60405180910390fd5b6115a781611aa4565b50565b6115c4828260405180602001604052806000815250612041565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661171983610d8e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061176a82611632565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613abb565b60405180910390fd5b60006117b483610d8e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061182357508373ffffffffffffffffffffffffffffffffffffffff1661180b8461087c565b73ffffffffffffffffffffffffffffffffffffffff16145b806118345750611833818561141e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185d82610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613b4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613bdf565b60405180910390fd5b61192e83838361209c565b6119396000826116a6565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119899190613627565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e09190612f89565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a9f8383836120a1565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90613c4b565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc891906127e1565b60405180910390a3505050565b611ce084848461183d565b611cec848484846120a6565b611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613cdd565b60405180910390fd5b50505050565b6000611d3c82610d8e565b9050611d4a8160008461209c565b611d556000836116a6565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da59190613627565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e4a816000846120a1565b5050565b606060088054611e5d90613062565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8990613062565b8015611ed65780601f10611eab57610100808354040283529160200191611ed6565b820191906000526020600020905b815481529060010190602001808311611eb957829003601f168201915b5050505050905090565b60606000821415611f28576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203c565b600082905060005b60008214611f5a578080611f4390613cfd565b915050600a82611f539190613d75565b9150611f30565b60008167ffffffffffffffff811115611f7657611f75612537565b5b6040519080825280601f01601f191660200182016040528015611fa85781602001600182028036833780820191505090505b5090505b6000851461203557600182611fc19190613627565b9150600a85611fd09190613da6565b6030611fdc9190612f89565b60f81b818381518110611ff257611ff1613dd7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561202e9190613d75565b9450611fac565b8093505050505b919050565b61204b838361222e565b61205860008484846120a6565b612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e90613cdd565b60405180910390fd5b505050565b505050565b505050565b60006120c78473ffffffffffffffffffffffffffffffffffffffff16612408565b15612221578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120f061169e565b8786866040518563ffffffff1660e01b81526004016121129493929190613e06565b6020604051808303816000875af192505050801561214e57506040513d601f19601f8201168201806040525081019061214b9190613e67565b60015b6121d1573d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b506000815114156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090613cdd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612226565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561229e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229590613ee0565b60405180910390fd5b6122a781611632565b156122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de90613f4c565b60405180910390fd5b6122f36000838361209c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123439190612f89565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612404600083836120a1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461243790613062565b90600052602060002090601f01602090048101928261245957600085556124a0565b82601f1061247257805160ff19168380011785556124a0565b828001600101855582156124a0579182015b8281111561249f578251825591602001919060010190612484565b5b5090506124ad91906124b1565b5090565b5b808211156124ca5760008160009055506001016124b2565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b6124f9816124e2565b811461250457600080fd5b50565b600081359050612516816124f0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61256f82612526565b810181811067ffffffffffffffff8211171561258e5761258d612537565b5b80604052505050565b60006125a16124ce565b90506125ad8282612566565b919050565b600067ffffffffffffffff8211156125cd576125cc612537565b5b6125d682612526565b9050602081019050919050565b82818337600083830152505050565b6000612605612600846125b2565b612597565b90508281526020810184848401111561262157612620612521565b5b61262c8482856125e3565b509392505050565b600082601f8301126126495761264861251c565b5b81356126598482602086016125f2565b91505092915050565b600067ffffffffffffffff82169050919050565b61267f81612662565b811461268a57600080fd5b50565b60008135905061269c81612676565b92915050565b600080600080608085870312156126bc576126bb6124d8565b5b60006126ca87828801612507565b945050602085013567ffffffffffffffff8111156126eb576126ea6124dd565b5b6126f787828801612634565b93505060406127088782880161268d565b925050606085013567ffffffffffffffff811115612729576127286124dd565b5b61273587828801612634565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61277681612741565b811461278157600080fd5b50565b6000813590506127938161276d565b92915050565b6000602082840312156127af576127ae6124d8565b5b60006127bd84828501612784565b91505092915050565b60008115159050919050565b6127db816127c6565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561283657808201518184015260208101905061281b565b83811115612845576000848401525b50505050565b6000612856826127fc565b6128608185612807565b9350612870818560208601612818565b61287981612526565b840191505092915050565b6000602082019050818103600083015261289e818461284b565b905092915050565b6000819050919050565b6128b9816128a6565b81146128c457600080fd5b50565b6000813590506128d6816128b0565b92915050565b6000602082840312156128f2576128f16124d8565b5b6000612900848285016128c7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061293482612909565b9050919050565b61294481612929565b82525050565b600060208201905061295f600083018461293b565b92915050565b61296e81612929565b811461297957600080fd5b50565b60008135905061298b81612965565b92915050565b600080604083850312156129a8576129a76124d8565b5b60006129b68582860161297c565b92505060206129c7858286016128c7565b9150509250929050565b6000806000606084860312156129ea576129e96124d8565b5b60006129f88682870161297c565b9350506020612a098682870161297c565b9250506040612a1a868287016128c7565b9150509250925092565b600080fd5b600080fd5b60008083601f840112612a4457612a4361251c565b5b8235905067ffffffffffffffff811115612a6157612a60612a24565b5b602083019150836001820283011115612a7d57612a7c612a29565b5b9250929050565b612a8d816127c6565b8114612a9857600080fd5b50565b600081359050612aaa81612a84565b92915050565b600080600080600080600060a0888a031215612acf57612ace6124d8565b5b6000612add8a828b01612507565b9750506020612aee8a828b0161297c565b965050604088013567ffffffffffffffff811115612b0f57612b0e6124dd565b5b612b1b8a828b01612a2e565b95509550506060612b2e8a828b01612a9b565b935050608088013567ffffffffffffffff811115612b4f57612b4e6124dd565b5b612b5b8a828b01612a2e565b925092505092959891949750929550565b612b75816128a6565b82525050565b6000604082019050612b906000830185612b6c565b612b9d6020830184612b6c565b9392505050565b600060208284031215612bba57612bb96124d8565b5b6000612bc88482850161297c565b91505092915050565b600067ffffffffffffffff821115612bec57612beb612537565b5b612bf582612526565b9050602081019050919050565b6000612c15612c1084612bd1565b612597565b905082815260208101848484011115612c3157612c30612521565b5b612c3c8482856125e3565b509392505050565b600082601f830112612c5957612c5861251c565b5b8135612c69848260208601612c02565b91505092915050565b600060208284031215612c8857612c876124d8565b5b600082013567ffffffffffffffff811115612ca657612ca56124dd565b5b612cb284828501612c44565b91505092915050565b6000819050919050565b6000612ce0612cdb612cd684612909565b612cbb565b612909565b9050919050565b6000612cf282612cc5565b9050919050565b6000612d0482612ce7565b9050919050565b612d1481612cf9565b82525050565b6000602082019050612d2f6000830184612d0b565b92915050565b6000602082019050612d4a6000830184612b6c565b92915050565b60008060408385031215612d6757612d666124d8565b5b6000612d758582860161297c565b9250506020612d8685828601612a9b565b9150509250929050565b60008060008060808587031215612daa57612da96124d8565b5b6000612db88782880161297c565b9450506020612dc98782880161297c565b9350506040612dda878288016128c7565b925050606085013567ffffffffffffffff811115612dfb57612dfa6124dd565b5b612e0787828801612634565b91505092959194509250565b60008060008060608587031215612e2d57612e2c6124d8565b5b6000612e3b87828801612507565b945050602085013567ffffffffffffffff811115612e5c57612e5b6124dd565b5b612e6887828801612a2e565b93509350506040612e7b878288016128c7565b91505092959194509250565b60008060408385031215612e9e57612e9d6124d8565b5b6000612eac8582860161297c565b9250506020612ebd8582860161297c565b9150509250929050565b6000612ed282612909565b9050919050565b612ee281612ec7565b8114612eed57600080fd5b50565b600081519050612eff81612ed9565b92915050565b600081519050612f14816128b0565b92915050565b60008060408385031215612f3157612f306124d8565b5b6000612f3f85828601612ef0565b9250506020612f5085828601612f05565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f94826128a6565b9150612f9f836128a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fd457612fd3612f5a565b5b828201905092915050565b612fe8816124e2565b82525050565b60006080820190506130036000830187612fdf565b613010602083018661293b565b61301d6040830185612b6c565b61302a6060830184612b6c565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307a57607f821691505b6020821081141561308e5761308d613033565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006130f0602c83612807565b91506130fb82613094565b604082019050919050565b6000602082019050818103600083015261311f816130e3565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613182602183612807565b915061318d82613126565b604082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613214603883612807565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b7f4578636565647320737570706c79000000000000000000000000000000000000600082015250565b6000613280600e83612807565b915061328b8261324a565b602082019050919050565b600060208201905081810360008301526132af81613273565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613312603183612807565b915061331d826132b6565b604082019050919050565b6000602082019050818103600083015261334181613305565b9050919050565b600082825260208201905092915050565b60006133658385613348565b93506133728385846125e3565b61337b83612526565b840190509392505050565b600060a08201905061339b600083018a612fdf565b6133a8602083018961293b565b81810360408301526133bb818789613359565b90506133ca60608301866127d2565b81810360808301526133dd818486613359565b905098975050505050505050565b60008060408385031215613402576134016124d8565b5b600061341085828601612f05565b925050602061342185828601612f05565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613461602083612807565b915061346c8261342b565b602082019050919050565b6000602082019050818103600083015261349081613454565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006134f3602983612807565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613585602a83612807565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b60006135f1600d83612807565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b9050919050565b6000613632826128a6565b915061363d836128a6565b9250828210156136505761364f612f5a565b5b828203905092915050565b6000604082019050613670600083018561293b565b61367d6020830184612b6c565b9392505050565b60008160f01b9050919050565b600061369c82613684565b9050919050565b6136b46136af826124e2565b613691565b82525050565b6000819050919050565b6136d56136d0826128a6565b6136ba565b82525050565b60006136e782856136a3565b6002820191506136f782846136c4565b6020820191508190509392505050565b600081519050919050565b600061371d82613707565b6137278185613348565b9350613737818560208601612818565b61374081612526565b840191505092915050565b600060a0820190506137606000830188612fdf565b61376d602083018761293b565b818103604083015261377f8186613712565b905061378e60608301856127d2565b81810360808301526137a08184613712565b90509695505050505050565b7f4d7573742073656e6420656e6f7567682076616c756520746f20636f7665722060008201527f6d65737361676546656500000000000000000000000000000000000000000000602082015250565b6000613808602a83612807565b9150613813826137ac565b604082019050919050565b60006020820190508181036000830152613837816137fb565b9050919050565b61384781612ec7565b82525050565b600060c082019050613862600083018a612fdf565b818103602083015261387581888a613359565b905081810360408301526138898187613712565b9050613898606083018661383e565b6138a5608083018561293b565b81810360a08301526138b78184613712565b905098975050505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613921602f83612807565b915061392c826138c5565b604082019050919050565b6000602082019050818103600083015261395081613914565b9050919050565b600081905092915050565b600061396d826127fc565b6139778185613957565b9350613987818560208601612818565b80840191505092915050565b600061399f8285613962565b91506139ab8284613962565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a13602683612807565b9150613a1e826139b7565b604082019050919050565b60006020820190508181036000830152613a4281613a06565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613aa5602c83612807565b9150613ab082613a49565b604082019050919050565b60006020820190508181036000830152613ad481613a98565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b37602583612807565b9150613b4282613adb565b604082019050919050565b60006020820190508181036000830152613b6681613b2a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bc9602483612807565b9150613bd482613b6d565b604082019050919050565b60006020820190508181036000830152613bf881613bbc565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c35601983612807565b9150613c4082613bff565b602082019050919050565b60006020820190508181036000830152613c6481613c28565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613cc7603283612807565b9150613cd282613c6b565b604082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b6000613d08826128a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d3b57613d3a612f5a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d80826128a6565b9150613d8b836128a6565b925082613d9b57613d9a613d46565b5b828204905092915050565b6000613db1826128a6565b9150613dbc836128a6565b925082613dcc57613dcb613d46565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000608082019050613e1b600083018761293b565b613e28602083018661293b565b613e356040830185612b6c565b8181036060830152613e478184613712565b905095945050505050565b600081519050613e618161276d565b92915050565b600060208284031215613e7d57613e7c6124d8565b5b6000613e8b84828501613e52565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613eca602083612807565b9150613ed582613e94565b602082019050919050565b60006020820190508181036000830152613ef981613ebd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613f36601c83612807565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b905091905056fea2646970667358221220c52f825f23b7a0a6cb7bd290c2df69afd64b37bc2ec2169334c0b6c55713f95d64736f6c634300080b00330000000000000000000000007dcad72640f835b0fa36efd3d6d3ec902c7e5acf00000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000007d2
Deployed Bytecode
0x6080604052600436106101805760003560e01c80636352211e116100d1578063b2bdfa7b1161008a578063c87b56dd11610064578063c87b56dd1461053e578063d936547e1461057b578063e985e9c5146105b8578063f2fde38b146105f557610180565b8063b2bdfa7b146104ce578063b88d4fde146104f9578063baf1639e1461052257610180565b80636352211e146103be57806370a08231146103fb578063715018a6146104385780638da5cb5b1461044f57806395d89b411461047a578063a22cb465146104a557610180565b806323b872dd1161013e5780634a4c560d116101185780634a4c560d1461031657806355f804b31461033f5780635c975abb146103685780635e280f111461039357610180565b806323b872dd1461028657806340a7bb10146102af57806342842e0e146102ed57610180565b80621d35671461018557806301ffc9a7146101ae57806306fdde03146101eb578063081812fc14610216578063095ea7b3146102535780631249c58b1461027c575b600080fd5b34801561019157600080fd5b506101ac60048036038101906101a791906126a2565b61061e565b005b3480156101ba57600080fd5b506101d560048036038101906101d09190612799565b610708565b6040516101e291906127e1565b60405180910390f35b3480156101f757600080fd5b506102006107ea565b60405161020d9190612884565b60405180910390f35b34801561022257600080fd5b5061023d600480360381019061023891906128dc565b61087c565b60405161024a919061294a565b60405180910390f35b34801561025f57600080fd5b5061027a60048036038101906102759190612991565b610901565b005b610284610a19565b005b34801561029257600080fd5b506102ad60048036038101906102a891906129d1565b610aae565b005b3480156102bb57600080fd5b506102d660048036038101906102d19190612ab0565b610b0e565b6040516102e4929190612b7b565b60405180910390f35b3480156102f957600080fd5b50610314600480360381019061030f91906129d1565b610bc8565b005b34801561032257600080fd5b5061033d60048036038101906103389190612ba4565b610be8565b005b34801561034b57600080fd5b5061036660048036038101906103619190612c72565b610cbf565b005b34801561037457600080fd5b5061037d610d55565b60405161038a91906127e1565b60405180910390f35b34801561039f57600080fd5b506103a8610d68565b6040516103b59190612d1a565b60405180910390f35b3480156103ca57600080fd5b506103e560048036038101906103e091906128dc565b610d8e565b6040516103f2919061294a565b60405180910390f35b34801561040757600080fd5b50610422600480360381019061041d9190612ba4565b610e40565b60405161042f9190612d35565b60405180910390f35b34801561044457600080fd5b5061044d610ef8565b005b34801561045b57600080fd5b50610464610f80565b604051610471919061294a565b60405180910390f35b34801561048657600080fd5b5061048f610fa9565b60405161049c9190612884565b60405180910390f35b3480156104b157600080fd5b506104cc60048036038101906104c79190612d50565b61103b565b005b3480156104da57600080fd5b506104e3611051565b6040516104f0919061294a565b60405180910390f35b34801561050557600080fd5b50610520600480360381019061051b9190612d90565b611077565b005b61053c60048036038101906105379190612e13565b6110d9565b005b34801561054a57600080fd5b50610565600480360381019061056091906128dc565b611357565b6040516105729190612884565b60405180910390f35b34801561058757600080fd5b506105a2600480360381019061059d9190612ba4565b6113fe565b6040516105af91906127e1565b60405180910390f35b3480156105c457600080fd5b506105df60048036038101906105da9190612e87565b61141e565b6040516105ec91906127e1565b60405180910390f35b34801561060157600080fd5b5061061c60048036038101906106179190612ba4565b6114b2565b005b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461067857600080fd5b600060148401519050600080838060200190518101906106989190612f1a565b915091506106a682826115aa565b6001600960008282546106b99190612f89565b925050819055507fec16668a9529c4fc256054f3e18620ef50c89aec357376cce821207ff1e656f08783836009546040516106f79493929190612fee565b60405180910390a150505050505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806107d357507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806107e357506107e2826115c8565b5b9050919050565b6060600180546107f990613062565b80601f016020809104026020016040519081016040528092919081815260200182805461082590613062565b80156108725780601f1061084757610100808354040283529160200191610872565b820191906000526020600020905b81548152906001019060200180831161085557829003601f168201915b5050505050905090565b600061088782611632565b6108c6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016108bd90613106565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b600061090c82610d8e565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561097d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161097490613198565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661099c61169e565b73ffffffffffffffffffffffffffffffffffffffff1614806109cb57506109ca816109c561169e565b61141e565b5b610a0a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a019061322a565b60405180910390fd5b610a1483836116a6565b505050565b600b546001600a54610a2b9190612f89565b1115610a6c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a6390613296565b60405180910390fd5b6001600a6000828254610a7f9190612f89565b92505081905550610a9233600a546115aa565b600160096000828254610aa59190612f89565b92505081905550565b610abf610ab961169e565b8261175f565b610afe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610af590613328565b60405180910390fd5b610b0983838361183d565b505050565b600080600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108a8a8a8a8a8a8a6040518863ffffffff1660e01b8152600401610b789796959493929190613386565b6040805180830381865afa158015610b94573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190610bb891906133eb565b9150915097509795505050505050565b610be383838360405180602001604052806000815250611077565b505050565b610bf061169e565b73ffffffffffffffffffffffffffffffffffffffff16610c0e610f80565b73ffffffffffffffffffffffffffffffffffffffff1614610c64576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c5b90613477565b60405180910390fd5b6001600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b610cc761169e565b73ffffffffffffffffffffffffffffffffffffffff16610ce5610f80565b73ffffffffffffffffffffffffffffffffffffffff1614610d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d3290613477565b60405180910390fd5b8060089080519060200190610d5192919061242b565b5050565b600d60009054906101000a900460ff1681565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610e37576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e2e90613509565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415610eb1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ea89061359b565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b610f0061169e565b73ffffffffffffffffffffffffffffffffffffffff16610f1e610f80565b73ffffffffffffffffffffffffffffffffffffffff1614610f74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f6b90613477565b60405180910390fd5b610f7e6000611aa4565b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b606060028054610fb890613062565b80601f0160208091040260200160405190810160405280929190818152602001828054610fe490613062565b80156110315780601f1061100657610100808354040283529160200191611031565b820191906000526020600020905b81548152906001019060200180831161101457829003601f168201915b5050505050905090565b61104d61104661169e565b8383611b68565b5050565b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61108861108261169e565b8361175f565b6110c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110be90613328565b60405180910390fd5b6110d384848484611cd5565b50505050565b6110e281610d8e565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461114f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114690613607565b60405180910390fd5b61115881611d31565b60016009600082825461116b9190613627565b925050819055506000338260405160200161118792919061365b565b6040516020818303038152906040529050600060019050600081600c546040516020016111b59291906136db565b60405160208183030381529060405290506000600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108930876000876040518663ffffffff1660e01b815260040161122c95949392919061374b565b6040805180830381865afa158015611248573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061126c91906133eb565b509050803410156112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a99061381e565b60405180910390fd5b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c5803100348a8a8a893360008a6040518963ffffffff1660e01b815260040161131b979695949392919061384d565b6000604051808303818588803b15801561133457600080fd5b505af1158015611348573d6000803e3d6000fd5b50505050505050505050505050565b606061136282611632565b6113a1576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139890613937565b60405180910390fd5b60006113ab611e4e565b905060008151116113cb57604051806020016040528060008152506113f6565b806113d584611ee0565b6040516020016113e6929190613993565b6040516020818303038152906040525b915050919050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6114ba61169e565b73ffffffffffffffffffffffffffffffffffffffff166114d8610f80565b73ffffffffffffffffffffffffffffffffffffffff161461152e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152590613477565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561159e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159590613a29565b60405180910390fd5b6115a781611aa4565b50565b6115c4828260405180602001604052806000815250612041565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff1661171983610d8e565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061176a82611632565b6117a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117a090613abb565b60405180910390fd5b60006117b483610d8e565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061182357508373ffffffffffffffffffffffffffffffffffffffff1661180b8461087c565b73ffffffffffffffffffffffffffffffffffffffff16145b806118345750611833818561141e565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661185d82610d8e565b73ffffffffffffffffffffffffffffffffffffffff16146118b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118aa90613b4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611923576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161191a90613bdf565b60405180910390fd5b61192e83838361209c565b6119396000826116a6565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119899190613627565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546119e09190612f89565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611a9f8383836120a1565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415611bd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bce90613c4b565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051611cc891906127e1565b60405180910390a3505050565b611ce084848461183d565b611cec848484846120a6565b611d2b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d2290613cdd565b60405180910390fd5b50505050565b6000611d3c82610d8e565b9050611d4a8160008461209c565b611d556000836116a6565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611da59190613627565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611e4a816000846120a1565b5050565b606060088054611e5d90613062565b80601f0160208091040260200160405190810160405280929190818152602001828054611e8990613062565b8015611ed65780601f10611eab57610100808354040283529160200191611ed6565b820191906000526020600020905b815481529060010190602001808311611eb957829003601f168201915b5050505050905090565b60606000821415611f28576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061203c565b600082905060005b60008214611f5a578080611f4390613cfd565b915050600a82611f539190613d75565b9150611f30565b60008167ffffffffffffffff811115611f7657611f75612537565b5b6040519080825280601f01601f191660200182016040528015611fa85781602001600182028036833780820191505090505b5090505b6000851461203557600182611fc19190613627565b9150600a85611fd09190613da6565b6030611fdc9190612f89565b60f81b818381518110611ff257611ff1613dd7565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561202e9190613d75565b9450611fac565b8093505050505b919050565b61204b838361222e565b61205860008484846120a6565b612097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161208e90613cdd565b60405180910390fd5b505050565b505050565b505050565b60006120c78473ffffffffffffffffffffffffffffffffffffffff16612408565b15612221578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026120f061169e565b8786866040518563ffffffff1660e01b81526004016121129493929190613e06565b6020604051808303816000875af192505050801561214e57506040513d601f19601f8201168201806040525081019061214b9190613e67565b60015b6121d1573d806000811461217e576040519150601f19603f3d011682016040523d82523d6000602084013e612183565b606091505b506000815114156121c9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c090613cdd565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612226565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561229e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161229590613ee0565b60405180910390fd5b6122a781611632565b156122e7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122de90613f4c565b60405180910390fd5b6122f36000838361209c565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546123439190612f89565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612404600083836120a1565b5050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b82805461243790613062565b90600052602060002090601f01602090048101928261245957600085556124a0565b82601f1061247257805160ff19168380011785556124a0565b828001600101855582156124a0579182015b8281111561249f578251825591602001919060010190612484565b5b5090506124ad91906124b1565b5090565b5b808211156124ca5760008160009055506001016124b2565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b6124f9816124e2565b811461250457600080fd5b50565b600081359050612516816124f0565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61256f82612526565b810181811067ffffffffffffffff8211171561258e5761258d612537565b5b80604052505050565b60006125a16124ce565b90506125ad8282612566565b919050565b600067ffffffffffffffff8211156125cd576125cc612537565b5b6125d682612526565b9050602081019050919050565b82818337600083830152505050565b6000612605612600846125b2565b612597565b90508281526020810184848401111561262157612620612521565b5b61262c8482856125e3565b509392505050565b600082601f8301126126495761264861251c565b5b81356126598482602086016125f2565b91505092915050565b600067ffffffffffffffff82169050919050565b61267f81612662565b811461268a57600080fd5b50565b60008135905061269c81612676565b92915050565b600080600080608085870312156126bc576126bb6124d8565b5b60006126ca87828801612507565b945050602085013567ffffffffffffffff8111156126eb576126ea6124dd565b5b6126f787828801612634565b93505060406127088782880161268d565b925050606085013567ffffffffffffffff811115612729576127286124dd565b5b61273587828801612634565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61277681612741565b811461278157600080fd5b50565b6000813590506127938161276d565b92915050565b6000602082840312156127af576127ae6124d8565b5b60006127bd84828501612784565b91505092915050565b60008115159050919050565b6127db816127c6565b82525050565b60006020820190506127f660008301846127d2565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561283657808201518184015260208101905061281b565b83811115612845576000848401525b50505050565b6000612856826127fc565b6128608185612807565b9350612870818560208601612818565b61287981612526565b840191505092915050565b6000602082019050818103600083015261289e818461284b565b905092915050565b6000819050919050565b6128b9816128a6565b81146128c457600080fd5b50565b6000813590506128d6816128b0565b92915050565b6000602082840312156128f2576128f16124d8565b5b6000612900848285016128c7565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061293482612909565b9050919050565b61294481612929565b82525050565b600060208201905061295f600083018461293b565b92915050565b61296e81612929565b811461297957600080fd5b50565b60008135905061298b81612965565b92915050565b600080604083850312156129a8576129a76124d8565b5b60006129b68582860161297c565b92505060206129c7858286016128c7565b9150509250929050565b6000806000606084860312156129ea576129e96124d8565b5b60006129f88682870161297c565b9350506020612a098682870161297c565b9250506040612a1a868287016128c7565b9150509250925092565b600080fd5b600080fd5b60008083601f840112612a4457612a4361251c565b5b8235905067ffffffffffffffff811115612a6157612a60612a24565b5b602083019150836001820283011115612a7d57612a7c612a29565b5b9250929050565b612a8d816127c6565b8114612a9857600080fd5b50565b600081359050612aaa81612a84565b92915050565b600080600080600080600060a0888a031215612acf57612ace6124d8565b5b6000612add8a828b01612507565b9750506020612aee8a828b0161297c565b965050604088013567ffffffffffffffff811115612b0f57612b0e6124dd565b5b612b1b8a828b01612a2e565b95509550506060612b2e8a828b01612a9b565b935050608088013567ffffffffffffffff811115612b4f57612b4e6124dd565b5b612b5b8a828b01612a2e565b925092505092959891949750929550565b612b75816128a6565b82525050565b6000604082019050612b906000830185612b6c565b612b9d6020830184612b6c565b9392505050565b600060208284031215612bba57612bb96124d8565b5b6000612bc88482850161297c565b91505092915050565b600067ffffffffffffffff821115612bec57612beb612537565b5b612bf582612526565b9050602081019050919050565b6000612c15612c1084612bd1565b612597565b905082815260208101848484011115612c3157612c30612521565b5b612c3c8482856125e3565b509392505050565b600082601f830112612c5957612c5861251c565b5b8135612c69848260208601612c02565b91505092915050565b600060208284031215612c8857612c876124d8565b5b600082013567ffffffffffffffff811115612ca657612ca56124dd565b5b612cb284828501612c44565b91505092915050565b6000819050919050565b6000612ce0612cdb612cd684612909565b612cbb565b612909565b9050919050565b6000612cf282612cc5565b9050919050565b6000612d0482612ce7565b9050919050565b612d1481612cf9565b82525050565b6000602082019050612d2f6000830184612d0b565b92915050565b6000602082019050612d4a6000830184612b6c565b92915050565b60008060408385031215612d6757612d666124d8565b5b6000612d758582860161297c565b9250506020612d8685828601612a9b565b9150509250929050565b60008060008060808587031215612daa57612da96124d8565b5b6000612db88782880161297c565b9450506020612dc98782880161297c565b9350506040612dda878288016128c7565b925050606085013567ffffffffffffffff811115612dfb57612dfa6124dd565b5b612e0787828801612634565b91505092959194509250565b60008060008060608587031215612e2d57612e2c6124d8565b5b6000612e3b87828801612507565b945050602085013567ffffffffffffffff811115612e5c57612e5b6124dd565b5b612e6887828801612a2e565b93509350506040612e7b878288016128c7565b91505092959194509250565b60008060408385031215612e9e57612e9d6124d8565b5b6000612eac8582860161297c565b9250506020612ebd8582860161297c565b9150509250929050565b6000612ed282612909565b9050919050565b612ee281612ec7565b8114612eed57600080fd5b50565b600081519050612eff81612ed9565b92915050565b600081519050612f14816128b0565b92915050565b60008060408385031215612f3157612f306124d8565b5b6000612f3f85828601612ef0565b9250506020612f5085828601612f05565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612f94826128a6565b9150612f9f836128a6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115612fd457612fd3612f5a565b5b828201905092915050565b612fe8816124e2565b82525050565b60006080820190506130036000830187612fdf565b613010602083018661293b565b61301d6040830185612b6c565b61302a6060830184612b6c565b95945050505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6000600282049050600182168061307a57607f821691505b6020821081141561308e5761308d613033565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b60006130f0602c83612807565b91506130fb82613094565b604082019050919050565b6000602082019050818103600083015261311f816130e3565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613182602183612807565b915061318d82613126565b604082019050919050565b600060208201905081810360008301526131b181613175565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613214603883612807565b915061321f826131b8565b604082019050919050565b6000602082019050818103600083015261324381613207565b9050919050565b7f4578636565647320737570706c79000000000000000000000000000000000000600082015250565b6000613280600e83612807565b915061328b8261324a565b602082019050919050565b600060208201905081810360008301526132af81613273565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613312603183612807565b915061331d826132b6565b604082019050919050565b6000602082019050818103600083015261334181613305565b9050919050565b600082825260208201905092915050565b60006133658385613348565b93506133728385846125e3565b61337b83612526565b840190509392505050565b600060a08201905061339b600083018a612fdf565b6133a8602083018961293b565b81810360408301526133bb818789613359565b90506133ca60608301866127d2565b81810360808301526133dd818486613359565b905098975050505050505050565b60008060408385031215613402576134016124d8565b5b600061341085828601612f05565b925050602061342185828601612f05565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613461602083612807565b915061346c8261342b565b602082019050919050565b6000602082019050818103600083015261349081613454565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006134f3602983612807565b91506134fe82613497565b604082019050919050565b60006020820190508181036000830152613522816134e6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613585602a83612807565b915061359082613529565b604082019050919050565b600060208201905081810360008301526135b481613578565b9050919050565b7f4e6f7420746865206f776e657200000000000000000000000000000000000000600082015250565b60006135f1600d83612807565b91506135fc826135bb565b602082019050919050565b60006020820190508181036000830152613620816135e4565b9050919050565b6000613632826128a6565b915061363d836128a6565b9250828210156136505761364f612f5a565b5b828203905092915050565b6000604082019050613670600083018561293b565b61367d6020830184612b6c565b9392505050565b60008160f01b9050919050565b600061369c82613684565b9050919050565b6136b46136af826124e2565b613691565b82525050565b6000819050919050565b6136d56136d0826128a6565b6136ba565b82525050565b60006136e782856136a3565b6002820191506136f782846136c4565b6020820191508190509392505050565b600081519050919050565b600061371d82613707565b6137278185613348565b9350613737818560208601612818565b61374081612526565b840191505092915050565b600060a0820190506137606000830188612fdf565b61376d602083018761293b565b818103604083015261377f8186613712565b905061378e60608301856127d2565b81810360808301526137a08184613712565b90509695505050505050565b7f4d7573742073656e6420656e6f7567682076616c756520746f20636f7665722060008201527f6d65737361676546656500000000000000000000000000000000000000000000602082015250565b6000613808602a83612807565b9150613813826137ac565b604082019050919050565b60006020820190508181036000830152613837816137fb565b9050919050565b61384781612ec7565b82525050565b600060c082019050613862600083018a612fdf565b818103602083015261387581888a613359565b905081810360408301526138898187613712565b9050613898606083018661383e565b6138a5608083018561293b565b81810360a08301526138b78184613712565b905098975050505050505050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000613921602f83612807565b915061392c826138c5565b604082019050919050565b6000602082019050818103600083015261395081613914565b9050919050565b600081905092915050565b600061396d826127fc565b6139778185613957565b9350613987818560208601612818565b80840191505092915050565b600061399f8285613962565b91506139ab8284613962565b91508190509392505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000613a13602683612807565b9150613a1e826139b7565b604082019050919050565b60006020820190508181036000830152613a4281613a06565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613aa5602c83612807565b9150613ab082613a49565b604082019050919050565b60006020820190508181036000830152613ad481613a98565b9050919050565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b6000613b37602583612807565b9150613b4282613adb565b604082019050919050565b60006020820190508181036000830152613b6681613b2a565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000613bc9602483612807565b9150613bd482613b6d565b604082019050919050565b60006020820190508181036000830152613bf881613bbc565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000613c35601983612807565b9150613c4082613bff565b602082019050919050565b60006020820190508181036000830152613c6481613c28565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000613cc7603283612807565b9150613cd282613c6b565b604082019050919050565b60006020820190508181036000830152613cf681613cba565b9050919050565b6000613d08826128a6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613d3b57613d3a612f5a565b5b600182019050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613d80826128a6565b9150613d8b836128a6565b925082613d9b57613d9a613d46565b5b828204905092915050565b6000613db1826128a6565b9150613dbc836128a6565b925082613dcc57613dcb613d46565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000608082019050613e1b600083018761293b565b613e28602083018661293b565b613e356040830185612b6c565b8181036060830152613e478184613712565b905095945050505050565b600081519050613e618161276d565b92915050565b600060208284031215613e7d57613e7c6124d8565b5b6000613e8b84828501613e52565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000613eca602083612807565b9150613ed582613e94565b602082019050919050565b60006020820190508181036000830152613ef981613ebd565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000613f36601c83612807565b9150613f4182613f00565b602082019050919050565b60006020820190508181036000830152613f6581613f29565b905091905056fea2646970667358221220c52f825f23b7a0a6cb7bd290c2df69afd64b37bc2ec2169334c0b6c55713f95d64736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000007dcad72640f835b0fa36efd3d6d3ec902c7e5acf00000000000000000000000000000000000000000000000000000000000003e900000000000000000000000000000000000000000000000000000000000007d2
-----Decoded View---------------
Arg [0] : _endpoint (address): 0x7dcAD72640F835B0FA36EFD3D6d3ec902C7E5acf
Arg [1] : startId (uint256): 1001
Arg [2] : _max (uint256): 2002
-----Encoded View---------------
3 Constructor Arguments found :
Arg [0] : 0000000000000000000000007dcad72640f835b0fa36efd3d6d3ec902c7e5acf
Arg [1] : 00000000000000000000000000000000000000000000000000000000000003e9
Arg [2] : 00000000000000000000000000000000000000000000000000000000000007d2
Deployed Bytecode Sourcemap
45160:3459:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47257:593;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29391:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30336:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31895:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31418:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45917:181;;;:::i;:::-;;32645:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47925:478;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;33055:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48412:93;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46104:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45398:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45482:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30030:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29760:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44218:103;;;;;;;;;;;;;:::i;:::-;;43567:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30505:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32188:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;45236:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33311:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46200:1051;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30680:334;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45432:43;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32414:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44476:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47257:593;47449:8;;;;;;;;;;;47427:31;;:10;:31;;;47419:40;;;;;;47470:12;47542:2;47535:5;47531:14;47525:21;47517:29;;47568:17;47587:15;47631:8;47606:77;;;;;;;;;;;;:::i;:::-;47567:116;;;;47722:29;47732:9;47743:7;47722:9;:29::i;:::-;47773:1;47762:7;;:12;;;;;;;:::i;:::-;;;;;;;;47790:52;47801:11;47814:9;47825:7;47834;;47790:52;;;;;;;;;:::i;:::-;;;;;;;;47408:442;;;47257:593;;;;:::o;29391:305::-;29493:4;29545:25;29530:40;;;:11;:40;;;;:105;;;;29602:33;29587:48;;;:11;:48;;;;29530:105;:158;;;;29652:36;29676:11;29652:23;:36::i;:::-;29530:158;29510:178;;29391:305;;;:::o;30336:100::-;30390:13;30423:5;30416:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30336:100;:::o;31895:221::-;31971:7;31999:16;32007:7;31999;:16::i;:::-;31991:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32084:15;:24;32100:7;32084:24;;;;;;;;;;;;;;;;;;;;;32077:31;;31895:221;;;:::o;31418:411::-;31499:13;31515:23;31530:7;31515:14;:23::i;:::-;31499:39;;31563:5;31557:11;;:2;:11;;;;31549:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;31657:5;31641:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;31666:37;31683:5;31690:12;:10;:12::i;:::-;31666:16;:37::i;:::-;31641:62;31619:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;31800:21;31809:2;31813:7;31800:8;:21::i;:::-;31488:341;31418:411;;:::o;45917:181::-;45983:3;;45978:1;45969:6;;:10;;;;:::i;:::-;:17;;45961:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;46026:1;46016:6;;:11;;;;;;;:::i;:::-;;;;;;;;46038:29;46048:10;46060:6;;46038:9;:29::i;:::-;46089:1;46078:7;;:12;;;;;;;:::i;:::-;;;;;;;;45917:181::o;32645:339::-;32840:41;32859:12;:10;:12::i;:::-;32873:7;32840:18;:41::i;:::-;32832:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32948:28;32958:4;32964:2;32968:7;32948:9;:28::i;:::-;32645:339;;;:::o;47925:478::-;48140:17;48159:14;48206:8;;;;;;;;;;;:21;;;48246:11;48276:16;48311:8;;48338:9;48366:14;;48206:189;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48186:209;;;;47925:478;;;;;;;;;;:::o;33055:185::-;33193:39;33210:4;33216:2;33220:7;33193:39;;;;;;;;;;;;:16;:39::i;:::-;33055:185;;;:::o;48412:93::-;43798:12;:10;:12::i;:::-;43787:23;;:7;:5;:7::i;:::-;:23;;;43779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48495:4:::1;48474:11;:18;48486:5;48474:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;48412:93:::0;:::o;46104:90::-;43798:12;:10;:12::i;:::-;43787:23;;:7;:5;:7::i;:::-;:23;;;43779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;46183:3:::1;46173:7;:13;;;;;;;;;;;;:::i;:::-;;46104:90:::0;:::o;45398:26::-;;;;;;;;;;;;;:::o;45482:34::-;;;;;;;;;;;;;:::o;30030:239::-;30102:7;30122:13;30138:7;:16;30146:7;30138:16;;;;;;;;;;;;;;;;;;;;;30122:32;;30190:1;30173:19;;:5;:19;;;;30165:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30256:5;30249:12;;;30030:239;;;:::o;29760:208::-;29832:7;29877:1;29860:19;;:5;:19;;;;29852:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;29944:9;:16;29954:5;29944:16;;;;;;;;;;;;;;;;29937:23;;29760:208;;;:::o;44218:103::-;43798:12;:10;:12::i;:::-;43787:23;;:7;:5;:7::i;:::-;:23;;;43779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44283:30:::1;44310:1;44283:18;:30::i;:::-;44218:103::o:0;43567:87::-;43613:7;43640:6;;;;;;;;;;;43633:13;;43567:87;:::o;30505:104::-;30561:13;30594:7;30587:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;30505:104;:::o;32188:155::-;32283:52;32302:12;:10;:12::i;:::-;32316:8;32326;32283:18;:52::i;:::-;32188:155;;:::o;45236:21::-;;;;;;;;;;;;;:::o;33311:328::-;33486:41;33505:12;:10;:12::i;:::-;33519:7;33486:18;:41::i;:::-;33478:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;33592:39;33606:4;33612:2;33616:7;33625:5;33592:13;:39::i;:::-;33311:328;;;;:::o;46200:1051::-;46368:16;46376:7;46368;:16::i;:::-;46354:30;;:10;:30;;;46346:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;46434:14;46440:7;46434:5;:14::i;:::-;46470:1;46459:7;;:12;;;;;;;:::i;:::-;;;;;;;;46482:20;46516:10;46528:7;46505:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46482:54;;46620:14;46637:1;46620:18;;46649:26;46695:7;46704:3;;46678:30;;;;;;;;;:::i;:::-;;;;;;;;;;;;;46649:59;;46720:18;46744:8;;;;;;;;;;;:21;;;46780:11;46814:4;46834:7;46856:5;46876:13;46744:156;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;46719:181;;;46946:10;46933:9;:23;;46911:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;47037:8;;;;;;;;;;;:13;;;47058:9;47083:11;47109:12;;47136:7;47166:10;47200:3;47219:13;47037:206;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46335:916;;;;46200:1051;;;;:::o;30680:334::-;30753:13;30787:16;30795:7;30787;:16::i;:::-;30779:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;30868:21;30892:10;:8;:10::i;:::-;30868:34;;30944:1;30926:7;30920:21;:25;:86;;;;;;;;;;;;;;;;;30972:7;30981:18;:7;:16;:18::i;:::-;30955:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;30920:86;30913:93;;;30680:334;;;:::o;45432:43::-;;;;;;;;;;;;;;;;;;;;;;:::o;32414:164::-;32511:4;32535:18;:25;32554:5;32535:25;;;;;;;;;;;;;;;:35;32561:8;32535:35;;;;;;;;;;;;;;;;;;;;;;;;;32528:42;;32414:164;;;;:::o;44476:201::-;43798:12;:10;:12::i;:::-;43787:23;;:7;:5;:7::i;:::-;:23;;;43779:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44585:1:::1;44565:22;;:8;:22;;;;44557:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;44641:28;44660:8;44641:18;:28::i;:::-;44476:201:::0;:::o;36133:110::-;36209:26;36219:2;36223:7;36209:26;;;;;;;;;;;;:9;:26::i;:::-;36133:110;;:::o;21252:157::-;21337:4;21376:25;21361:40;;;:11;:40;;;;21354:47;;21252:157;;;:::o;35149:127::-;35214:4;35266:1;35238:30;;:7;:16;35246:7;35238:16;;;;;;;;;;;;;;;;;;;;;:30;;;;35231:37;;35149:127;;;:::o;27770:98::-;27823:7;27850:10;27843:17;;27770:98;:::o;39295:174::-;39397:2;39370:15;:24;39386:7;39370:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;39453:7;39449:2;39415:46;;39424:23;39439:7;39424:14;:23::i;:::-;39415:46;;;;;;;;;;;;39295:174;;:::o;35443:348::-;35536:4;35561:16;35569:7;35561;:16::i;:::-;35553:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;35637:13;35653:23;35668:7;35653:14;:23::i;:::-;35637:39;;35706:5;35695:16;;:7;:16;;;:51;;;;35739:7;35715:31;;:20;35727:7;35715:11;:20::i;:::-;:31;;;35695:51;:87;;;;35750:32;35767:5;35774:7;35750:16;:32::i;:::-;35695:87;35687:96;;;35443:348;;;;:::o;38552:625::-;38711:4;38684:31;;:23;38699:7;38684:14;:23::i;:::-;:31;;;38676:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;38790:1;38776:16;;:2;:16;;;;38768:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;38846:39;38867:4;38873:2;38877:7;38846:20;:39::i;:::-;38950:29;38967:1;38971:7;38950:8;:29::i;:::-;39011:1;38992:9;:15;39002:4;38992:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39040:1;39023:9;:13;39033:2;39023:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39071:2;39052:7;:16;39060:7;39052:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39110:7;39106:2;39091:27;;39100:4;39091:27;;;;;;;;;;;;39131:38;39151:4;39157:2;39161:7;39131:19;:38::i;:::-;38552:625;;;:::o;44837:191::-;44911:16;44930:6;;;;;;;;;;;44911:25;;44956:8;44947:6;;:17;;;;;;;;;;;;;;;;;;45011:8;44980:40;;45001:8;44980:40;;;;;;;;;;;;44900:128;44837:191;:::o;39611:315::-;39766:8;39757:17;;:5;:17;;;;39749:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;39853:8;39815:18;:25;39834:5;39815:25;;;;;;;;;;;;;;;:35;39841:8;39815:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;39899:8;39877:41;;39892:5;39877:41;;;39909:8;39877:41;;;;;;:::i;:::-;;;;;;;;39611:315;;;:::o;34521:::-;34678:28;34688:4;34694:2;34698:7;34678:9;:28::i;:::-;34725:48;34748:4;34754:2;34758:7;34767:5;34725:22;:48::i;:::-;34717:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;34521:315;;;;:::o;37795:420::-;37855:13;37871:23;37886:7;37871:14;:23::i;:::-;37855:39;;37907:48;37928:5;37943:1;37947:7;37907:20;:48::i;:::-;37996:29;38013:1;38017:7;37996:8;:29::i;:::-;38058:1;38038:9;:16;38048:5;38038:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;38077:7;:16;38085:7;38077:16;;;;;;;;;;;;38070:23;;;;;;;;;;;38139:7;38135:1;38111:36;;38120:5;38111:36;;;;;;;;;;;;38160:47;38180:5;38195:1;38199:7;38160:19;:47::i;:::-;37844:371;37795:420;:::o;48516:100::-;48568:13;48601:7;48594:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48516:100;:::o;8177:723::-;8233:13;8463:1;8454:5;:10;8450:53;;;8481:10;;;;;;;;;;;;;;;;;;;;;8450:53;8513:12;8528:5;8513:20;;8544:14;8569:78;8584:1;8576:4;:9;8569:78;;8602:8;;;;;:::i;:::-;;;;8633:2;8625:10;;;;;:::i;:::-;;;8569:78;;;8657:19;8689:6;8679:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8657:39;;8707:154;8723:1;8714:5;:10;8707:154;;8751:1;8741:11;;;;;:::i;:::-;;;8818:2;8810:5;:10;;;;:::i;:::-;8797:2;:24;;;;:::i;:::-;8784:39;;8767:6;8774;8767:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8847:2;8838:11;;;;;:::i;:::-;;;8707:154;;;8885:6;8871:21;;;;;8177:723;;;;:::o;36470:321::-;36600:18;36606:2;36610:7;36600:5;:18::i;:::-;36651:54;36682:1;36686:2;36690:7;36699:5;36651:22;:54::i;:::-;36629:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;36470:321;;;:::o;41862:126::-;;;;:::o;42373:125::-;;;;:::o;40491:799::-;40646:4;40667:15;:2;:13;;;:15::i;:::-;40663:620;;;40719:2;40703:36;;;40740:12;:10;:12::i;:::-;40754:4;40760:7;40769:5;40703:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;40699:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40962:1;40945:6;:13;:18;40941:272;;;40988:60;;;;;;;;;;:::i;:::-;;;;;;;;40941:272;41163:6;41157:13;41148:6;41144:2;41140:15;41133:38;40699:529;40836:41;;;40826:51;;;:6;:51;;;;40819:58;;;;;40663:620;41267:4;41260:11;;40491:799;;;;;;;:::o;37127:439::-;37221:1;37207:16;;:2;:16;;;;37199:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;37280:16;37288:7;37280;:16::i;:::-;37279:17;37271:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;37342:45;37371:1;37375:2;37379:7;37342:20;:45::i;:::-;37417:1;37400:9;:13;37410:2;37400:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37448:2;37429:7;:16;37437:7;37429:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37493:7;37489:2;37468:33;;37485:1;37468:33;;;;;;;;;;;;37514:44;37542:1;37546:2;37550:7;37514:19;:44::i;:::-;37127:439;;:::o;11169:326::-;11229:4;11486:1;11464:7;:19;;;:23;11457:30;;11169:326;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:89;370:7;410:6;403:5;399:18;388:29;;334:89;;;:::o;429:120::-;501:23;518:5;501:23;:::i;:::-;494:5;491:34;481:62;;539:1;536;529:12;481:62;429:120;:::o;555:137::-;600:5;638:6;625:20;616:29;;654:32;680:5;654:32;:::i;:::-;555:137;;;;:::o;698:117::-;807:1;804;797:12;821:117;930:1;927;920:12;944:102;985:6;1036:2;1032:7;1027:2;1020:5;1016:14;1012:28;1002:38;;944:102;;;:::o;1052:180::-;1100:77;1097:1;1090:88;1197:4;1194:1;1187:15;1221:4;1218:1;1211:15;1238:281;1321:27;1343:4;1321:27;:::i;:::-;1313:6;1309:40;1451:6;1439:10;1436:22;1415:18;1403:10;1400:34;1397:62;1394:88;;;1462:18;;:::i;:::-;1394:88;1502:10;1498:2;1491:22;1281:238;1238:281;;:::o;1525:129::-;1559:6;1586:20;;:::i;:::-;1576:30;;1615:33;1643:4;1635:6;1615:33;:::i;:::-;1525:129;;;:::o;1660:307::-;1721:4;1811:18;1803:6;1800:30;1797:56;;;1833:18;;:::i;:::-;1797:56;1871:29;1893:6;1871:29;:::i;:::-;1863:37;;1955:4;1949;1945:15;1937:23;;1660:307;;;:::o;1973:154::-;2057:6;2052:3;2047;2034:30;2119:1;2110:6;2105:3;2101:16;2094:27;1973:154;;;:::o;2133:410::-;2210:5;2235:65;2251:48;2292:6;2251:48;:::i;:::-;2235:65;:::i;:::-;2226:74;;2323:6;2316:5;2309:21;2361:4;2354:5;2350:16;2399:3;2390:6;2385:3;2381:16;2378:25;2375:112;;;2406:79;;:::i;:::-;2375:112;2496:41;2530:6;2525:3;2520;2496:41;:::i;:::-;2216:327;2133:410;;;;;:::o;2562:338::-;2617:5;2666:3;2659:4;2651:6;2647:17;2643:27;2633:122;;2674:79;;:::i;:::-;2633:122;2791:6;2778:20;2816:78;2890:3;2882:6;2875:4;2867:6;2863:17;2816:78;:::i;:::-;2807:87;;2623:277;2562:338;;;;:::o;2906:101::-;2942:7;2982:18;2975:5;2971:30;2960:41;;2906:101;;;:::o;3013:120::-;3085:23;3102:5;3085:23;:::i;:::-;3078:5;3075:34;3065:62;;3123:1;3120;3113:12;3065:62;3013:120;:::o;3139:137::-;3184:5;3222:6;3209:20;3200:29;;3238:32;3264:5;3238:32;:::i;:::-;3139:137;;;;:::o;3282:1117::-;3384:6;3392;3400;3408;3457:3;3445:9;3436:7;3432:23;3428:33;3425:120;;;3464:79;;:::i;:::-;3425:120;3584:1;3609:52;3653:7;3644:6;3633:9;3629:22;3609:52;:::i;:::-;3599:62;;3555:116;3738:2;3727:9;3723:18;3710:32;3769:18;3761:6;3758:30;3755:117;;;3791:79;;:::i;:::-;3755:117;3896:62;3950:7;3941:6;3930:9;3926:22;3896:62;:::i;:::-;3886:72;;3681:287;4007:2;4033:52;4077:7;4068:6;4057:9;4053:22;4033:52;:::i;:::-;4023:62;;3978:117;4162:2;4151:9;4147:18;4134:32;4193:18;4185:6;4182:30;4179:117;;;4215:79;;:::i;:::-;4179:117;4320:62;4374:7;4365:6;4354:9;4350:22;4320:62;:::i;:::-;4310:72;;4105:287;3282:1117;;;;;;;:::o;4405:149::-;4441:7;4481:66;4474:5;4470:78;4459:89;;4405:149;;;:::o;4560:120::-;4632:23;4649:5;4632:23;:::i;:::-;4625:5;4622:34;4612:62;;4670:1;4667;4660:12;4612:62;4560:120;:::o;4686:137::-;4731:5;4769:6;4756:20;4747:29;;4785:32;4811:5;4785:32;:::i;:::-;4686:137;;;;:::o;4829:327::-;4887:6;4936:2;4924:9;4915:7;4911:23;4907:32;4904:119;;;4942:79;;:::i;:::-;4904:119;5062:1;5087:52;5131:7;5122:6;5111:9;5107:22;5087:52;:::i;:::-;5077:62;;5033:116;4829:327;;;;:::o;5162:90::-;5196:7;5239:5;5232:13;5225:21;5214:32;;5162:90;;;:::o;5258:109::-;5339:21;5354:5;5339:21;:::i;:::-;5334:3;5327:34;5258:109;;:::o;5373:210::-;5460:4;5498:2;5487:9;5483:18;5475:26;;5511:65;5573:1;5562:9;5558:17;5549:6;5511:65;:::i;:::-;5373:210;;;;:::o;5589:99::-;5641:6;5675:5;5669:12;5659:22;;5589:99;;;:::o;5694:169::-;5778:11;5812:6;5807:3;5800:19;5852:4;5847:3;5843:14;5828:29;;5694:169;;;;:::o;5869:307::-;5937:1;5947:113;5961:6;5958:1;5955:13;5947:113;;;6046:1;6041:3;6037:11;6031:18;6027:1;6022:3;6018:11;6011:39;5983:2;5980:1;5976:10;5971:15;;5947:113;;;6078:6;6075:1;6072:13;6069:101;;;6158:1;6149:6;6144:3;6140:16;6133:27;6069:101;5918:258;5869:307;;;:::o;6182:364::-;6270:3;6298:39;6331:5;6298:39;:::i;:::-;6353:71;6417:6;6412:3;6353:71;:::i;:::-;6346:78;;6433:52;6478:6;6473:3;6466:4;6459:5;6455:16;6433:52;:::i;:::-;6510:29;6532:6;6510:29;:::i;:::-;6505:3;6501:39;6494:46;;6274:272;6182:364;;;;:::o;6552:313::-;6665:4;6703:2;6692:9;6688:18;6680:26;;6752:9;6746:4;6742:20;6738:1;6727:9;6723:17;6716:47;6780:78;6853:4;6844:6;6780:78;:::i;:::-;6772:86;;6552:313;;;;:::o;6871:77::-;6908:7;6937:5;6926:16;;6871:77;;;:::o;6954:122::-;7027:24;7045:5;7027:24;:::i;:::-;7020:5;7017:35;7007:63;;7066:1;7063;7056:12;7007:63;6954:122;:::o;7082:139::-;7128:5;7166:6;7153:20;7144:29;;7182:33;7209:5;7182:33;:::i;:::-;7082:139;;;;:::o;7227:329::-;7286:6;7335:2;7323:9;7314:7;7310:23;7306:32;7303:119;;;7341:79;;:::i;:::-;7303:119;7461:1;7486:53;7531:7;7522:6;7511:9;7507:22;7486:53;:::i;:::-;7476:63;;7432:117;7227:329;;;;:::o;7562:126::-;7599:7;7639:42;7632:5;7628:54;7617:65;;7562:126;;;:::o;7694:96::-;7731:7;7760:24;7778:5;7760:24;:::i;:::-;7749:35;;7694:96;;;:::o;7796:118::-;7883:24;7901:5;7883:24;:::i;:::-;7878:3;7871:37;7796:118;;:::o;7920:222::-;8013:4;8051:2;8040:9;8036:18;8028:26;;8064:71;8132:1;8121:9;8117:17;8108:6;8064:71;:::i;:::-;7920:222;;;;:::o;8148:122::-;8221:24;8239:5;8221:24;:::i;:::-;8214:5;8211:35;8201:63;;8260:1;8257;8250:12;8201:63;8148:122;:::o;8276:139::-;8322:5;8360:6;8347:20;8338:29;;8376:33;8403:5;8376:33;:::i;:::-;8276:139;;;;:::o;8421:474::-;8489:6;8497;8546:2;8534:9;8525:7;8521:23;8517:32;8514:119;;;8552:79;;:::i;:::-;8514:119;8672:1;8697:53;8742:7;8733:6;8722:9;8718:22;8697:53;:::i;:::-;8687:63;;8643:117;8799:2;8825:53;8870:7;8861:6;8850:9;8846:22;8825:53;:::i;:::-;8815:63;;8770:118;8421:474;;;;;:::o;8901:619::-;8978:6;8986;8994;9043:2;9031:9;9022:7;9018:23;9014:32;9011:119;;;9049:79;;:::i;:::-;9011:119;9169:1;9194:53;9239:7;9230:6;9219:9;9215:22;9194:53;:::i;:::-;9184:63;;9140:117;9296:2;9322:53;9367:7;9358:6;9347:9;9343:22;9322:53;:::i;:::-;9312:63;;9267:118;9424:2;9450:53;9495:7;9486:6;9475:9;9471:22;9450:53;:::i;:::-;9440:63;;9395:118;8901:619;;;;;:::o;9526:117::-;9635:1;9632;9625:12;9649:117;9758:1;9755;9748:12;9785:552;9842:8;9852:6;9902:3;9895:4;9887:6;9883:17;9879:27;9869:122;;9910:79;;:::i;:::-;9869:122;10023:6;10010:20;10000:30;;10053:18;10045:6;10042:30;10039:117;;;10075:79;;:::i;:::-;10039:117;10189:4;10181:6;10177:17;10165:29;;10243:3;10235:4;10227:6;10223:17;10213:8;10209:32;10206:41;10203:128;;;10250:79;;:::i;:::-;10203:128;9785:552;;;;;:::o;10343:116::-;10413:21;10428:5;10413:21;:::i;:::-;10406:5;10403:32;10393:60;;10449:1;10446;10439:12;10393:60;10343:116;:::o;10465:133::-;10508:5;10546:6;10533:20;10524:29;;10562:30;10586:5;10562:30;:::i;:::-;10465:133;;;;:::o;10604:1299::-;10717:6;10725;10733;10741;10749;10757;10765;10814:3;10802:9;10793:7;10789:23;10785:33;10782:120;;;10821:79;;:::i;:::-;10782:120;10941:1;10966:52;11010:7;11001:6;10990:9;10986:22;10966:52;:::i;:::-;10956:62;;10912:116;11067:2;11093:53;11138:7;11129:6;11118:9;11114:22;11093:53;:::i;:::-;11083:63;;11038:118;11223:2;11212:9;11208:18;11195:32;11254:18;11246:6;11243:30;11240:117;;;11276:79;;:::i;:::-;11240:117;11389:64;11445:7;11436:6;11425:9;11421:22;11389:64;:::i;:::-;11371:82;;;;11166:297;11502:2;11528:50;11570:7;11561:6;11550:9;11546:22;11528:50;:::i;:::-;11518:60;;11473:115;11655:3;11644:9;11640:19;11627:33;11687:18;11679:6;11676:30;11673:117;;;11709:79;;:::i;:::-;11673:117;11822:64;11878:7;11869:6;11858:9;11854:22;11822:64;:::i;:::-;11804:82;;;;11598:298;10604:1299;;;;;;;;;;:::o;11909:118::-;11996:24;12014:5;11996:24;:::i;:::-;11991:3;11984:37;11909:118;;:::o;12033:332::-;12154:4;12192:2;12181:9;12177:18;12169:26;;12205:71;12273:1;12262:9;12258:17;12249:6;12205:71;:::i;:::-;12286:72;12354:2;12343:9;12339:18;12330:6;12286:72;:::i;:::-;12033:332;;;;;:::o;12371:329::-;12430:6;12479:2;12467:9;12458:7;12454:23;12450:32;12447:119;;;12485:79;;:::i;:::-;12447:119;12605:1;12630:53;12675:7;12666:6;12655:9;12651:22;12630:53;:::i;:::-;12620:63;;12576:117;12371:329;;;;:::o;12706:308::-;12768:4;12858:18;12850:6;12847:30;12844:56;;;12880:18;;:::i;:::-;12844:56;12918:29;12940:6;12918:29;:::i;:::-;12910:37;;13002:4;12996;12992:15;12984:23;;12706:308;;;:::o;13020:412::-;13098:5;13123:66;13139:49;13181:6;13139:49;:::i;:::-;13123:66;:::i;:::-;13114:75;;13212:6;13205:5;13198:21;13250:4;13243:5;13239:16;13288:3;13279:6;13274:3;13270:16;13267:25;13264:112;;;13295:79;;:::i;:::-;13264:112;13385:41;13419:6;13414:3;13409;13385:41;:::i;:::-;13104:328;13020:412;;;;;:::o;13452:340::-;13508:5;13557:3;13550:4;13542:6;13538:17;13534:27;13524:122;;13565:79;;:::i;:::-;13524:122;13682:6;13669:20;13707:79;13782:3;13774:6;13767:4;13759:6;13755:17;13707:79;:::i;:::-;13698:88;;13514:278;13452:340;;;;:::o;13798:509::-;13867:6;13916:2;13904:9;13895:7;13891:23;13887:32;13884:119;;;13922:79;;:::i;:::-;13884:119;14070:1;14059:9;14055:17;14042:31;14100:18;14092:6;14089:30;14086:117;;;14122:79;;:::i;:::-;14086:117;14227:63;14282:7;14273:6;14262:9;14258:22;14227:63;:::i;:::-;14217:73;;14013:287;13798:509;;;;:::o;14313:60::-;14341:3;14362:5;14355:12;;14313:60;;;:::o;14379:142::-;14429:9;14462:53;14480:34;14489:24;14507:5;14489:24;:::i;:::-;14480:34;:::i;:::-;14462:53;:::i;:::-;14449:66;;14379:142;;;:::o;14527:126::-;14577:9;14610:37;14641:5;14610:37;:::i;:::-;14597:50;;14527:126;;;:::o;14659:152::-;14735:9;14768:37;14799:5;14768:37;:::i;:::-;14755:50;;14659:152;;;:::o;14817:183::-;14930:63;14987:5;14930:63;:::i;:::-;14925:3;14918:76;14817:183;;:::o;15006:274::-;15125:4;15163:2;15152:9;15148:18;15140:26;;15176:97;15270:1;15259:9;15255:17;15246:6;15176:97;:::i;:::-;15006:274;;;;:::o;15286:222::-;15379:4;15417:2;15406:9;15402:18;15394:26;;15430:71;15498:1;15487:9;15483:17;15474:6;15430:71;:::i;:::-;15286:222;;;;:::o;15514:468::-;15579:6;15587;15636:2;15624:9;15615:7;15611:23;15607:32;15604:119;;;15642:79;;:::i;:::-;15604:119;15762:1;15787:53;15832:7;15823:6;15812:9;15808:22;15787:53;:::i;:::-;15777:63;;15733:117;15889:2;15915:50;15957:7;15948:6;15937:9;15933:22;15915:50;:::i;:::-;15905:60;;15860:115;15514:468;;;;;:::o;15988:943::-;16083:6;16091;16099;16107;16156:3;16144:9;16135:7;16131:23;16127:33;16124:120;;;16163:79;;:::i;:::-;16124:120;16283:1;16308:53;16353:7;16344:6;16333:9;16329:22;16308:53;:::i;:::-;16298:63;;16254:117;16410:2;16436:53;16481:7;16472:6;16461:9;16457:22;16436:53;:::i;:::-;16426:63;;16381:118;16538:2;16564:53;16609:7;16600:6;16589:9;16585:22;16564:53;:::i;:::-;16554:63;;16509:118;16694:2;16683:9;16679:18;16666:32;16725:18;16717:6;16714:30;16711:117;;;16747:79;;:::i;:::-;16711:117;16852:62;16906:7;16897:6;16886:9;16882:22;16852:62;:::i;:::-;16842:72;;16637:287;15988:943;;;;;;;:::o;16937:815::-;17024:6;17032;17040;17048;17097:2;17085:9;17076:7;17072:23;17068:32;17065:119;;;17103:79;;:::i;:::-;17065:119;17223:1;17248:52;17292:7;17283:6;17272:9;17268:22;17248:52;:::i;:::-;17238:62;;17194:116;17377:2;17366:9;17362:18;17349:32;17408:18;17400:6;17397:30;17394:117;;;17430:79;;:::i;:::-;17394:117;17543:64;17599:7;17590:6;17579:9;17575:22;17543:64;:::i;:::-;17525:82;;;;17320:297;17656:2;17682:53;17727:7;17718:6;17707:9;17703:22;17682:53;:::i;:::-;17672:63;;17627:118;16937:815;;;;;;;:::o;17758:474::-;17826:6;17834;17883:2;17871:9;17862:7;17858:23;17854:32;17851:119;;;17889:79;;:::i;:::-;17851:119;18009:1;18034:53;18079:7;18070:6;18059:9;18055:22;18034:53;:::i;:::-;18024:63;;17980:117;18136:2;18162:53;18207:7;18198:6;18187:9;18183:22;18162:53;:::i;:::-;18152:63;;18107:118;17758:474;;;;;:::o;18238:104::-;18283:7;18312:24;18330:5;18312:24;:::i;:::-;18301:35;;18238:104;;;:::o;18348:138::-;18429:32;18455:5;18429:32;:::i;:::-;18422:5;18419:43;18409:71;;18476:1;18473;18466:12;18409:71;18348:138;:::o;18492:159::-;18557:5;18588:6;18582:13;18573:22;;18604:41;18639:5;18604:41;:::i;:::-;18492:159;;;;:::o;18657:143::-;18714:5;18745:6;18739:13;18730:22;;18761:33;18788:5;18761:33;:::i;:::-;18657:143;;;;:::o;18806:523::-;18893:6;18901;18950:2;18938:9;18929:7;18925:23;18921:32;18918:119;;;18956:79;;:::i;:::-;18918:119;19076:1;19101:72;19165:7;19156:6;19145:9;19141:22;19101:72;:::i;:::-;19091:82;;19047:136;19222:2;19248:64;19304:7;19295:6;19284:9;19280:22;19248:64;:::i;:::-;19238:74;;19193:129;18806:523;;;;;:::o;19335:180::-;19383:77;19380:1;19373:88;19480:4;19477:1;19470:15;19504:4;19501:1;19494:15;19521:305;19561:3;19580:20;19598:1;19580:20;:::i;:::-;19575:25;;19614:20;19632:1;19614:20;:::i;:::-;19609:25;;19768:1;19700:66;19696:74;19693:1;19690:81;19687:107;;;19774:18;;:::i;:::-;19687:107;19818:1;19815;19811:9;19804:16;;19521:305;;;;:::o;19832:115::-;19917:23;19934:5;19917:23;:::i;:::-;19912:3;19905:36;19832:115;;:::o;19953:549::-;20128:4;20166:3;20155:9;20151:19;20143:27;;20180:69;20246:1;20235:9;20231:17;20222:6;20180:69;:::i;:::-;20259:72;20327:2;20316:9;20312:18;20303:6;20259:72;:::i;:::-;20341;20409:2;20398:9;20394:18;20385:6;20341:72;:::i;:::-;20423;20491:2;20480:9;20476:18;20467:6;20423:72;:::i;:::-;19953:549;;;;;;;:::o;20508:180::-;20556:77;20553:1;20546:88;20653:4;20650:1;20643:15;20677:4;20674:1;20667:15;20694:320;20738:6;20775:1;20769:4;20765:12;20755:22;;20822:1;20816:4;20812:12;20843:18;20833:81;;20899:4;20891:6;20887:17;20877:27;;20833:81;20961:2;20953:6;20950:14;20930:18;20927:38;20924:84;;;20980:18;;:::i;:::-;20924:84;20745:269;20694:320;;;:::o;21020:231::-;21160:34;21156:1;21148:6;21144:14;21137:58;21229:14;21224:2;21216:6;21212:15;21205:39;21020:231;:::o;21257:366::-;21399:3;21420:67;21484:2;21479:3;21420:67;:::i;:::-;21413:74;;21496:93;21585:3;21496:93;:::i;:::-;21614:2;21609:3;21605:12;21598:19;;21257:366;;;:::o;21629:419::-;21795:4;21833:2;21822:9;21818:18;21810:26;;21882:9;21876:4;21872:20;21868:1;21857:9;21853:17;21846:47;21910:131;22036:4;21910:131;:::i;:::-;21902:139;;21629:419;;;:::o;22054:220::-;22194:34;22190:1;22182:6;22178:14;22171:58;22263:3;22258:2;22250:6;22246:15;22239:28;22054:220;:::o;22280:366::-;22422:3;22443:67;22507:2;22502:3;22443:67;:::i;:::-;22436:74;;22519:93;22608:3;22519:93;:::i;:::-;22637:2;22632:3;22628:12;22621:19;;22280:366;;;:::o;22652:419::-;22818:4;22856:2;22845:9;22841:18;22833:26;;22905:9;22899:4;22895:20;22891:1;22880:9;22876:17;22869:47;22933:131;23059:4;22933:131;:::i;:::-;22925:139;;22652:419;;;:::o;23077:243::-;23217:34;23213:1;23205:6;23201:14;23194:58;23286:26;23281:2;23273:6;23269:15;23262:51;23077:243;:::o;23326:366::-;23468:3;23489:67;23553:2;23548:3;23489:67;:::i;:::-;23482:74;;23565:93;23654:3;23565:93;:::i;:::-;23683:2;23678:3;23674:12;23667:19;;23326:366;;;:::o;23698:419::-;23864:4;23902:2;23891:9;23887:18;23879:26;;23951:9;23945:4;23941:20;23937:1;23926:9;23922:17;23915:47;23979:131;24105:4;23979:131;:::i;:::-;23971:139;;23698:419;;;:::o;24123:164::-;24263:16;24259:1;24251:6;24247:14;24240:40;24123:164;:::o;24293:366::-;24435:3;24456:67;24520:2;24515:3;24456:67;:::i;:::-;24449:74;;24532:93;24621:3;24532:93;:::i;:::-;24650:2;24645:3;24641:12;24634:19;;24293:366;;;:::o;24665:419::-;24831:4;24869:2;24858:9;24854:18;24846:26;;24918:9;24912:4;24908:20;24904:1;24893:9;24889:17;24882:47;24946:131;25072:4;24946:131;:::i;:::-;24938:139;;24665:419;;;:::o;25090:236::-;25230:34;25226:1;25218:6;25214:14;25207:58;25299:19;25294:2;25286:6;25282:15;25275:44;25090:236;:::o;25332:366::-;25474:3;25495:67;25559:2;25554:3;25495:67;:::i;:::-;25488:74;;25571:93;25660:3;25571:93;:::i;:::-;25689:2;25684:3;25680:12;25673:19;;25332:366;;;:::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;;25704:419;;;:::o;26129:168::-;26212:11;26246:6;26241:3;26234:19;26286:4;26281:3;26277:14;26262:29;;26129:168;;;;:::o;26325:301::-;26421:3;26442:70;26505:6;26500:3;26442:70;:::i;:::-;26435:77;;26522:43;26558:6;26553:3;26546:5;26522:43;:::i;:::-;26590:29;26612:6;26590:29;:::i;:::-;26585:3;26581:39;26574:46;;26325:301;;;;;:::o;26632:862::-;26885:4;26923:3;26912:9;26908:19;26900:27;;26937:69;27003:1;26992:9;26988:17;26979:6;26937:69;:::i;:::-;27016:72;27084:2;27073:9;27069:18;27060:6;27016:72;:::i;:::-;27135:9;27129:4;27125:20;27120:2;27109:9;27105:18;27098:48;27163:86;27244:4;27235:6;27227;27163:86;:::i;:::-;27155:94;;27259:66;27321:2;27310:9;27306:18;27297:6;27259:66;:::i;:::-;27373:9;27367:4;27363:20;27357:3;27346:9;27342:19;27335:49;27401:86;27482:4;27473:6;27465;27401:86;:::i;:::-;27393:94;;26632:862;;;;;;;;;;:::o;27500:507::-;27579:6;27587;27636:2;27624:9;27615:7;27611:23;27607:32;27604:119;;;27642:79;;:::i;:::-;27604:119;27762:1;27787:64;27843:7;27834:6;27823:9;27819:22;27787:64;:::i;:::-;27777:74;;27733:128;27900:2;27926:64;27982:7;27973:6;27962:9;27958:22;27926:64;:::i;:::-;27916:74;;27871:129;27500:507;;;;;:::o;28013:182::-;28153:34;28149:1;28141:6;28137:14;28130:58;28013:182;:::o;28201:366::-;28343:3;28364:67;28428:2;28423:3;28364:67;:::i;:::-;28357:74;;28440:93;28529:3;28440:93;:::i;:::-;28558:2;28553:3;28549:12;28542:19;;28201:366;;;:::o;28573:419::-;28739:4;28777:2;28766:9;28762:18;28754:26;;28826:9;28820:4;28816:20;28812:1;28801:9;28797:17;28790:47;28854:131;28980:4;28854:131;:::i;:::-;28846:139;;28573:419;;;:::o;28998:228::-;29138:34;29134:1;29126:6;29122:14;29115:58;29207:11;29202:2;29194:6;29190:15;29183:36;28998:228;:::o;29232:366::-;29374:3;29395:67;29459:2;29454:3;29395:67;:::i;:::-;29388:74;;29471:93;29560:3;29471:93;:::i;:::-;29589:2;29584:3;29580:12;29573:19;;29232:366;;;:::o;29604:419::-;29770:4;29808:2;29797:9;29793:18;29785:26;;29857:9;29851:4;29847:20;29843:1;29832:9;29828:17;29821:47;29885:131;30011:4;29885:131;:::i;:::-;29877:139;;29604:419;;;:::o;30029:229::-;30169:34;30165:1;30157:6;30153:14;30146:58;30238:12;30233:2;30225:6;30221:15;30214:37;30029:229;:::o;30264:366::-;30406:3;30427:67;30491:2;30486:3;30427:67;:::i;:::-;30420:74;;30503:93;30592:3;30503:93;:::i;:::-;30621:2;30616:3;30612:12;30605:19;;30264:366;;;:::o;30636:419::-;30802:4;30840:2;30829:9;30825:18;30817:26;;30889:9;30883:4;30879:20;30875:1;30864:9;30860:17;30853:47;30917:131;31043:4;30917:131;:::i;:::-;30909:139;;30636:419;;;:::o;31061:163::-;31201:15;31197:1;31189:6;31185:14;31178:39;31061:163;:::o;31230:366::-;31372:3;31393:67;31457:2;31452:3;31393:67;:::i;:::-;31386:74;;31469:93;31558:3;31469:93;:::i;:::-;31587:2;31582:3;31578:12;31571:19;;31230:366;;;:::o;31602:419::-;31768:4;31806:2;31795:9;31791:18;31783:26;;31855:9;31849:4;31845:20;31841:1;31830:9;31826:17;31819:47;31883:131;32009:4;31883:131;:::i;:::-;31875:139;;31602:419;;;:::o;32027:191::-;32067:4;32087:20;32105:1;32087:20;:::i;:::-;32082:25;;32121:20;32139:1;32121:20;:::i;:::-;32116:25;;32160:1;32157;32154:8;32151:34;;;32165:18;;:::i;:::-;32151:34;32210:1;32207;32203:9;32195:17;;32027:191;;;;:::o;32224:332::-;32345:4;32383:2;32372:9;32368:18;32360:26;;32396:71;32464:1;32453:9;32449:17;32440:6;32396:71;:::i;:::-;32477:72;32545:2;32534:9;32530:18;32521:6;32477:72;:::i;:::-;32224:332;;;;;:::o;32562:96::-;32596:8;32645:5;32640:3;32636:15;32615:36;;32562:96;;;:::o;32664:94::-;32702:7;32731:21;32746:5;32731:21;:::i;:::-;32720:32;;32664:94;;;:::o;32764:153::-;32867:43;32886:23;32903:5;32886:23;:::i;:::-;32867:43;:::i;:::-;32862:3;32855:56;32764:153;;:::o;32923:79::-;32962:7;32991:5;32980:16;;32923:79;;;:::o;33008:157::-;33113:45;33133:24;33151:5;33133:24;:::i;:::-;33113:45;:::i;:::-;33108:3;33101:58;33008:157;;:::o;33171:392::-;33309:3;33324:73;33393:3;33384:6;33324:73;:::i;:::-;33422:1;33417:3;33413:11;33406:18;;33434:75;33505:3;33496:6;33434:75;:::i;:::-;33534:2;33529:3;33525:12;33518:19;;33554:3;33547:10;;33171:392;;;;;:::o;33569:98::-;33620:6;33654:5;33648:12;33638:22;;33569:98;;;:::o;33673:360::-;33759:3;33787:38;33819:5;33787:38;:::i;:::-;33841:70;33904:6;33899:3;33841:70;:::i;:::-;33834:77;;33920:52;33965:6;33960:3;33953:4;33946:5;33942:16;33920:52;:::i;:::-;33997:29;34019:6;33997:29;:::i;:::-;33992:3;33988:39;33981:46;;33763:270;33673:360;;;;:::o;34039:822::-;34272:4;34310:3;34299:9;34295:19;34287:27;;34324:69;34390:1;34379:9;34375:17;34366:6;34324:69;:::i;:::-;34403:72;34471:2;34460:9;34456:18;34447:6;34403:72;:::i;:::-;34522:9;34516:4;34512:20;34507:2;34496:9;34492:18;34485:48;34550:76;34621:4;34612:6;34550:76;:::i;:::-;34542:84;;34636:66;34698:2;34687:9;34683:18;34674:6;34636:66;:::i;:::-;34750:9;34744:4;34740:20;34734:3;34723:9;34719:19;34712:49;34778:76;34849:4;34840:6;34778:76;:::i;:::-;34770:84;;34039:822;;;;;;;;:::o;34867:229::-;35007:34;35003:1;34995:6;34991:14;34984:58;35076:12;35071:2;35063:6;35059:15;35052:37;34867:229;:::o;35102:366::-;35244:3;35265:67;35329:2;35324:3;35265:67;:::i;:::-;35258:74;;35341:93;35430:3;35341:93;:::i;:::-;35459:2;35454:3;35450:12;35443:19;;35102:366;;;:::o;35474:419::-;35640:4;35678:2;35667:9;35663:18;35655:26;;35727:9;35721:4;35717:20;35713:1;35702:9;35698:17;35691:47;35755:131;35881:4;35755:131;:::i;:::-;35747:139;;35474:419;;;:::o;35899:142::-;36002:32;36028:5;36002:32;:::i;:::-;35997:3;35990:45;35899:142;;:::o;36047:1084::-;36358:4;36396:3;36385:9;36381:19;36373:27;;36410:69;36476:1;36465:9;36461:17;36452:6;36410:69;:::i;:::-;36526:9;36520:4;36516:20;36511:2;36500:9;36496:18;36489:48;36554:86;36635:4;36626:6;36618;36554:86;:::i;:::-;36546:94;;36687:9;36681:4;36677:20;36672:2;36661:9;36657:18;36650:48;36715:76;36786:4;36777:6;36715:76;:::i;:::-;36707:84;;36801:88;36885:2;36874:9;36870:18;36861:6;36801:88;:::i;:::-;36899:73;36967:3;36956:9;36952:19;36943:6;36899:73;:::i;:::-;37020:9;37014:4;37010:20;37004:3;36993:9;36989:19;36982:49;37048:76;37119:4;37110:6;37048:76;:::i;:::-;37040:84;;36047:1084;;;;;;;;;;:::o;37137:234::-;37277:34;37273:1;37265:6;37261:14;37254:58;37346:17;37341:2;37333:6;37329:15;37322:42;37137:234;:::o;37377:366::-;37519:3;37540:67;37604:2;37599:3;37540:67;:::i;:::-;37533:74;;37616:93;37705:3;37616:93;:::i;:::-;37734:2;37729:3;37725:12;37718:19;;37377:366;;;:::o;37749:419::-;37915:4;37953:2;37942:9;37938:18;37930:26;;38002:9;37996:4;37992:20;37988:1;37977:9;37973:17;37966:47;38030:131;38156:4;38030:131;:::i;:::-;38022:139;;37749:419;;;:::o;38174:148::-;38276:11;38313:3;38298:18;;38174:148;;;;:::o;38328:377::-;38434:3;38462:39;38495:5;38462:39;:::i;:::-;38517:89;38599:6;38594:3;38517:89;:::i;:::-;38510:96;;38615:52;38660:6;38655:3;38648:4;38641:5;38637:16;38615:52;:::i;:::-;38692:6;38687:3;38683:16;38676:23;;38438:267;38328:377;;;;:::o;38711:435::-;38891:3;38913:95;39004:3;38995:6;38913:95;:::i;:::-;38906:102;;39025:95;39116:3;39107:6;39025:95;:::i;:::-;39018:102;;39137:3;39130:10;;38711:435;;;;;:::o;39152:225::-;39292:34;39288:1;39280:6;39276:14;39269:58;39361:8;39356:2;39348:6;39344:15;39337:33;39152:225;:::o;39383:366::-;39525:3;39546:67;39610:2;39605:3;39546:67;:::i;:::-;39539:74;;39622:93;39711:3;39622:93;:::i;:::-;39740:2;39735:3;39731:12;39724:19;;39383:366;;;:::o;39755:419::-;39921:4;39959:2;39948:9;39944:18;39936:26;;40008:9;40002:4;39998:20;39994:1;39983:9;39979:17;39972:47;40036:131;40162:4;40036:131;:::i;:::-;40028:139;;39755:419;;;:::o;40180:231::-;40320:34;40316:1;40308:6;40304:14;40297:58;40389:14;40384:2;40376:6;40372:15;40365:39;40180:231;:::o;40417:366::-;40559:3;40580:67;40644:2;40639:3;40580:67;:::i;:::-;40573:74;;40656:93;40745:3;40656:93;:::i;:::-;40774:2;40769:3;40765:12;40758:19;;40417:366;;;:::o;40789:419::-;40955:4;40993:2;40982:9;40978:18;40970:26;;41042:9;41036:4;41032:20;41028:1;41017:9;41013:17;41006:47;41070:131;41196:4;41070:131;:::i;:::-;41062:139;;40789:419;;;:::o;41214:224::-;41354:34;41350:1;41342:6;41338:14;41331:58;41423:7;41418:2;41410:6;41406:15;41399:32;41214:224;:::o;41444:366::-;41586:3;41607:67;41671:2;41666:3;41607:67;:::i;:::-;41600:74;;41683:93;41772:3;41683:93;:::i;:::-;41801:2;41796:3;41792:12;41785:19;;41444:366;;;:::o;41816:419::-;41982:4;42020:2;42009:9;42005:18;41997:26;;42069:9;42063:4;42059:20;42055:1;42044:9;42040:17;42033:47;42097:131;42223:4;42097:131;:::i;:::-;42089:139;;41816:419;;;:::o;42241:223::-;42381:34;42377:1;42369:6;42365:14;42358:58;42450:6;42445:2;42437:6;42433:15;42426:31;42241:223;:::o;42470:366::-;42612:3;42633:67;42697:2;42692:3;42633:67;:::i;:::-;42626:74;;42709:93;42798:3;42709:93;:::i;:::-;42827:2;42822:3;42818:12;42811:19;;42470:366;;;:::o;42842:419::-;43008:4;43046:2;43035:9;43031:18;43023:26;;43095:9;43089:4;43085:20;43081:1;43070:9;43066:17;43059:47;43123:131;43249:4;43123:131;:::i;:::-;43115:139;;42842:419;;;:::o;43267:175::-;43407:27;43403:1;43395:6;43391:14;43384:51;43267:175;:::o;43448:366::-;43590:3;43611:67;43675:2;43670:3;43611:67;:::i;:::-;43604:74;;43687:93;43776:3;43687:93;:::i;:::-;43805:2;43800:3;43796:12;43789:19;;43448:366;;;:::o;43820:419::-;43986:4;44024:2;44013:9;44009:18;44001:26;;44073:9;44067:4;44063:20;44059:1;44048:9;44044:17;44037:47;44101:131;44227:4;44101:131;:::i;:::-;44093:139;;43820:419;;;:::o;44245:237::-;44385:34;44381:1;44373:6;44369:14;44362:58;44454:20;44449:2;44441:6;44437:15;44430:45;44245:237;:::o;44488:366::-;44630:3;44651:67;44715:2;44710:3;44651:67;:::i;:::-;44644:74;;44727:93;44816:3;44727:93;:::i;:::-;44845:2;44840:3;44836:12;44829:19;;44488:366;;;:::o;44860:419::-;45026:4;45064:2;45053:9;45049:18;45041:26;;45113:9;45107:4;45103:20;45099:1;45088:9;45084:17;45077:47;45141:131;45267:4;45141:131;:::i;:::-;45133:139;;44860:419;;;:::o;45285:233::-;45324:3;45347:24;45365:5;45347:24;:::i;:::-;45338:33;;45393:66;45386:5;45383:77;45380:103;;;45463:18;;:::i;:::-;45380:103;45510:1;45503:5;45499:13;45492:20;;45285:233;;;:::o;45524:180::-;45572:77;45569:1;45562:88;45669:4;45666:1;45659:15;45693:4;45690:1;45683:15;45710:185;45750:1;45767:20;45785:1;45767:20;:::i;:::-;45762:25;;45801:20;45819:1;45801:20;:::i;:::-;45796:25;;45840:1;45830:35;;45845:18;;:::i;:::-;45830:35;45887:1;45884;45880:9;45875:14;;45710:185;;;;:::o;45901:176::-;45933:1;45950:20;45968:1;45950:20;:::i;:::-;45945:25;;45984:20;46002:1;45984:20;:::i;:::-;45979:25;;46023:1;46013:35;;46028:18;;:::i;:::-;46013:35;46069:1;46066;46062:9;46057:14;;45901:176;;;;:::o;46083:180::-;46131:77;46128:1;46121:88;46228:4;46225:1;46218:15;46252:4;46249:1;46242:15;46269:640;46464:4;46502:3;46491:9;46487:19;46479:27;;46516:71;46584:1;46573:9;46569:17;46560:6;46516:71;:::i;:::-;46597:72;46665:2;46654:9;46650:18;46641:6;46597:72;:::i;:::-;46679;46747:2;46736:9;46732:18;46723:6;46679:72;:::i;:::-;46798:9;46792:4;46788:20;46783:2;46772:9;46768:18;46761:48;46826:76;46897:4;46888:6;46826:76;:::i;:::-;46818:84;;46269:640;;;;;;;:::o;46915:141::-;46971:5;47002:6;46996:13;46987:22;;47018:32;47044:5;47018:32;:::i;:::-;46915:141;;;;:::o;47062:349::-;47131:6;47180:2;47168:9;47159:7;47155:23;47151:32;47148:119;;;47186:79;;:::i;:::-;47148:119;47306:1;47331:63;47386:7;47377:6;47366:9;47362:22;47331:63;:::i;:::-;47321:73;;47277:127;47062:349;;;;:::o;47417:182::-;47557:34;47553:1;47545:6;47541:14;47534:58;47417:182;:::o;47605:366::-;47747:3;47768:67;47832:2;47827:3;47768:67;:::i;:::-;47761:74;;47844:93;47933:3;47844:93;:::i;:::-;47962:2;47957:3;47953:12;47946:19;;47605:366;;;:::o;47977:419::-;48143:4;48181:2;48170:9;48166:18;48158:26;;48230:9;48224:4;48220:20;48216:1;48205:9;48201:17;48194:47;48258:131;48384:4;48258:131;:::i;:::-;48250:139;;47977:419;;;:::o;48402:178::-;48542:30;48538:1;48530:6;48526:14;48519:54;48402:178;:::o;48586:366::-;48728:3;48749:67;48813:2;48808:3;48749:67;:::i;:::-;48742:74;;48825:93;48914:3;48825:93;:::i;:::-;48943:2;48938:3;48934:12;48927:19;;48586:366;;;:::o;48958:419::-;49124:4;49162:2;49151:9;49147:18;49139:26;;49211:9;49205:4;49201:20;49197:1;49186:9;49182:17;49175:47;49239:131;49365:4;49239:131;:::i;:::-;49231:139;;48958:419;;;:::o
Swarm Source
ipfs://c52f825f23b7a0a6cb7bd290c2df69afd64b37bc2ec2169334c0b6c55713f95d
[ 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.