Overview
ETH Balance
0.003 ETH
Eth Value
$9.65 (@ $3,217.05/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 444 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 17919043 | 527 days ago | IN | 0.002 ETH | 0.00214516 | ||||
Mint | 16852253 | 677 days ago | IN | 0.001 ETH | 0.0014363 | ||||
Mint | 16779409 | 687 days ago | IN | 0 ETH | 0.00427849 | ||||
Withdraw | 16581254 | 715 days ago | IN | 0 ETH | 0.00117967 | ||||
Mint | 16221334 | 765 days ago | IN | 0.002 ETH | 0.00183891 | ||||
Set Approval For... | 16160778 | 773 days ago | IN | 0 ETH | 0.00063202 | ||||
Set Approval For... | 16156091 | 774 days ago | IN | 0 ETH | 0.0006448 | ||||
Set Approval For... | 16122202 | 779 days ago | IN | 0 ETH | 0.00057835 | ||||
Mint | 15983818 | 798 days ago | IN | 0 ETH | 0.00118436 | ||||
Mint | 15983816 | 798 days ago | IN | 0 ETH | 0.001433 | ||||
Set Approval For... | 15839896 | 818 days ago | IN | 0 ETH | 0.00108568 | ||||
Mint | 15793179 | 825 days ago | IN | 0.001 ETH | 0.00136584 | ||||
Mint | 15695702 | 838 days ago | IN | 0.002 ETH | 0.00057336 | ||||
Mint | 15695695 | 838 days ago | IN | 0 ETH | 0.00061119 | ||||
Mint | 15695664 | 838 days ago | IN | 0 ETH | 0.00101223 | ||||
Mint | 15695648 | 838 days ago | IN | 0 ETH | 0.00058367 | ||||
Set Approval For... | 15695608 | 838 days ago | IN | 0 ETH | 0.00030554 | ||||
Mint | 15695598 | 838 days ago | IN | 0 ETH | 0.00052366 | ||||
Mint | 15695580 | 838 days ago | IN | 0 ETH | 0.00046321 | ||||
Mint | 15695580 | 838 days ago | IN | 0 ETH | 0.00060759 | ||||
Mint | 15695570 | 838 days ago | IN | 0 ETH | 0.00061443 | ||||
Mint | 15695564 | 838 days ago | IN | 0 ETH | 0.00053793 | ||||
Mint | 15695562 | 838 days ago | IN | 0 ETH | 0.00047645 | ||||
Mint | 15695546 | 838 days ago | IN | 0 ETH | 0.00049211 | ||||
Mint | 15695543 | 838 days ago | IN | 0.002 ETH | 0.00052959 |
Loading...
Loading
Contract Name:
moodykittens
Compiler Version
v0.8.11+commit.d7f03943
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-06-09 */ // 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, uint256 _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, uint256 _gasLimit, bytes calldata _payload ) external; // @notice get the inboundNonce of a receiver 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 (uint256 nativeFee, uint256 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, uint256 _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: 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: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/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: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{ value: amount }(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{ value: value }(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/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/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (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"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev 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 {} } // File: contracts/NonblockingReceiver.sol pragma solidity ^0.8.6; abstract contract NonblockingReceiver is Ownable, ILayerZeroReceiver { ILayerZeroEndpoint internal endpoint; struct FailedMessages { uint256 payloadLength; bytes32 payloadHash; } mapping(uint16 => mapping(bytes => mapping(uint256 => FailedMessages))) public failedMessages; mapping(uint16 => bytes) public trustedRemoteLookup; event MessageFailed( uint16 _srcChainId, bytes _srcAddress, uint64 _nonce, bytes _payload ); function lzReceive( uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload ) external override { require(msg.sender == address(endpoint)); // boilerplate! lzReceive must be called by the endpoint for security require( _srcAddress.length == trustedRemoteLookup[_srcChainId].length && keccak256(_srcAddress) == keccak256(trustedRemoteLookup[_srcChainId]), "NonblockingReceiver: invalid source sending contract" ); // try-catch all errors/exceptions // having failed messages does not block messages passing try this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload) { // do nothing } catch { // error / exception failedMessages[_srcChainId][_srcAddress][_nonce] = FailedMessages( _payload.length, keccak256(_payload) ); emit MessageFailed(_srcChainId, _srcAddress, _nonce, _payload); } } function onLzReceive( uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload ) public { // only internal transaction require( msg.sender == address(this), "NonblockingReceiver: caller must be Bridge." ); // handle incoming message _LzReceive(_srcChainId, _srcAddress, _nonce, _payload); } // abstract function function _LzReceive( uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload ) internal virtual; function _lzSend( uint16 _dstChainId, bytes memory _payload, address payable _refundAddress, address _zroPaymentAddress, bytes memory _txParam ) internal { endpoint.send{ value: msg.value }( _dstChainId, trustedRemoteLookup[_dstChainId], _payload, _refundAddress, _zroPaymentAddress, _txParam ); } function retryMessage( uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes calldata _payload ) external payable { // assert there is message to retry FailedMessages storage failedMsg = failedMessages[_srcChainId][_srcAddress][ _nonce ]; require( failedMsg.payloadHash != bytes32(0), "NonblockingReceiver: no stored message" ); require( _payload.length == failedMsg.payloadLength && keccak256(_payload) == failedMsg.payloadHash, "LayerZero: invalid payload" ); // clear the stored message failedMsg.payloadLength = 0; failedMsg.payloadHash = bytes32(0); // execute the message. revert if it fails again this.onLzReceive(_srcChainId, _srcAddress, _nonce, _payload); } function setTrustedRemote(uint16 _chainId, bytes calldata _trustedRemote) external onlyOwner { trustedRemoteLookup[_chainId] = _trustedRemote; } } //ᶠᵉᵉᵈ ᵐᵉ ʰᵘᵍ ᵐᵉ ᵗʰᵉⁿ ᶠˣˣᵏ ᵒᶠᶠ ʷⁱˡˡ ʸᵃ /ᐠ。。ᐟ\ // File: contracts/moodykittens-eth.sol pragma solidity ^0.8.7; contract moodykittens is Ownable, ERC721, NonblockingReceiver { address public _owner; string private baseURI; uint256 nextTokenId = 4900; uint256 MAX_MINT_ETHEREUM = 8400; uint256 gasForDestinationLzReceive = 350000; constructor(string memory baseURI_, address _layerZeroEndpoint) ERC721("moody kittens", "ktns") { _owner = msg.sender; endpoint = ILayerZeroEndpoint(_layerZeroEndpoint); baseURI = baseURI_; } // mint function // you can choose to mint 1 or 2 // mint is free, but payments are accepted function mint(uint8 numTokens) external payable { require(numTokens < 3, "moody kittens: Max 2 NFTs per transaction"); require( nextTokenId + numTokens <= MAX_MINT_ETHEREUM, "moody kittens: Mint exceeds supply" ); _safeMint(msg.sender, ++nextTokenId); if (numTokens == 2) { _safeMint(msg.sender, ++nextTokenId); } } // This function transfers the nft from your address on the // source chain to the same address on the destination chain function traverseChains(uint16 _chainId, uint256 tokenId) public payable { require( msg.sender == ownerOf(tokenId), "You must own the token to traverse" ); require( trustedRemoteLookup[_chainId].length > 0, "This chain is currently unavailable for travel" ); // burn NFT, eliminating it from circulation on src chain _burn(tokenId); // abi.encode() the payload with the values to send 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, gasForDestinationLzReceive ); // get the fees we need to pay to LayerZero + Relayer to cover message delivery // you will be refunded for extra gas paid (uint256 messageFee, ) = endpoint.estimateFees( _chainId, address(this), payload, false, adapterParams ); require( msg.value >= messageFee, "moody kittens: msg.value not enough to cover messageFee. Send gas for message fees" ); endpoint.send{ value: msg.value }( _chainId, // destination chainId trustedRemoteLookup[_chainId], // destination address of nft contract payload, // abi.encoded()'ed bytes payable(msg.sender), // refund address address(0x0), // 'zroPaymentAddress' unused for this adapterParams // txParameters ); } function setBaseURI(string memory URI) external onlyOwner { baseURI = URI; } function donate() external payable { // thank you } // This allows the devs to receive kind donations function withdraw(uint256 amt) external onlyOwner { (bool sent, ) = payable(_owner).call{ value: amt }(""); require(sent, "moody kittens: Failed to withdraw Ether"); } // just in case this fixed variable limits us from future integrations function setGasForDestinationLzReceive(uint256 newVal) external onlyOwner { gasForDestinationLzReceive = newVal; } // ------------------ // Internal Functions // ------------------ function _LzReceive( uint16 _srcChainId, bytes memory _srcAddress, uint64 _nonce, bytes memory _payload ) internal override { // decode (address toAddr, uint256 tokenId) = abi.decode( _payload, (address, uint256) ); // mint the tokens back into existence on destination chain _safeMint(toAddr, tokenId); } function _baseURI() internal view override returns (string memory) { return baseURI; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseURI_","type":"string"},{"internalType":"address","name":"_layerZeroEndpoint","type":"address"}],"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":false,"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"indexed":false,"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"indexed":false,"internalType":"uint64","name":"_nonce","type":"uint64"},{"indexed":false,"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"MessageFailed","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"_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":[],"name":"donate","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"},{"internalType":"bytes","name":"","type":"bytes"},{"internalType":"uint256","name":"","type":"uint256"}],"name":"failedMessages","outputs":[{"internalType":"uint256","name":"payloadLength","type":"uint256"},{"internalType":"bytes32","name":"payloadHash","type":"bytes32"}],"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":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"lzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint8","name":"numTokens","type":"uint8"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"onLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_srcChainId","type":"uint16"},{"internalType":"bytes","name":"_srcAddress","type":"bytes"},{"internalType":"uint64","name":"_nonce","type":"uint64"},{"internalType":"bytes","name":"_payload","type":"bytes"}],"name":"retryMessage","outputs":[],"stateMutability":"payable","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":"uint256","name":"newVal","type":"uint256"}],"name":"setGasForDestinationLzReceive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint16","name":"_chainId","type":"uint16"},{"internalType":"bytes","name":"_trustedRemote","type":"bytes"}],"name":"setTrustedRemote","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":"uint16","name":"_chainId","type":"uint16"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"traverseChains","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint16","name":"","type":"uint16"}],"name":"trustedRemoteLookup","outputs":[{"internalType":"bytes","name":"","type":"bytes"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amt","type":"uint256"}],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052611324600c556120d0600d5562055730600e553480156200002457600080fd5b50604051620052eb380380620052eb83398181016040528101906200004a91906200052b565b6040518060400160405280600d81526020017f6d6f6f6479206b697474656e73000000000000000000000000000000000000008152506040518060400160405280600481526020017f6b746e7300000000000000000000000000000000000000000000000000000000815250620000d6620000ca620001ad60201b60201c565b620001b560201b60201c565b8160019080519060200190620000ee92919062000279565b5080600290805190602001906200010792919062000279565b50505033600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555080600760006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555081600b9080519060200190620001a492919062000279565b505050620005f6565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028790620005c0565b90600052602060002090601f016020900481019282620002ab5760008555620002f7565b82601f10620002c657805160ff1916838001178555620002f7565b82800160010185558215620002f7579182015b82811115620002f6578251825591602001919060010190620002d9565b5b5090506200030691906200030a565b5090565b5b80821115620003255760008160009055506001016200030b565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620003928262000347565b810181811067ffffffffffffffff82111715620003b457620003b362000358565b5b80604052505050565b6000620003c962000329565b9050620003d7828262000387565b919050565b600067ffffffffffffffff821115620003fa57620003f962000358565b5b620004058262000347565b9050602081019050919050565b60005b838110156200043257808201518184015260208101905062000415565b8381111562000442576000848401525b50505050565b60006200045f6200045984620003dc565b620003bd565b9050828152602081018484840111156200047e576200047d62000342565b5b6200048b84828562000412565b509392505050565b600082601f830112620004ab57620004aa6200033d565b5b8151620004bd84826020860162000448565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000620004f382620004c6565b9050919050565b6200050581620004e6565b81146200051157600080fd5b50565b6000815190506200052581620004fa565b92915050565b6000806040838503121562000545576200054462000333565b5b600083015167ffffffffffffffff81111562000566576200056562000338565b5b620005748582860162000493565b9250506020620005878582860162000514565b9150509250929050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620005d957607f821691505b60208210811415620005f057620005ef62000591565b5b50919050565b614ce580620006066000396000f3fe6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610623578063eb8d72b714610660578063ed88c68e14610689578063f2fde38b14610693576101c1565b8063b88d4fde14610585578063c87b56dd146105ae578063cf89fa03146105eb578063d1deba1f14610607576101c1565b8063943fb872116100d1578063943fb872146104dd57806395d89b4114610506578063a22cb46514610531578063b2bdfa7b1461055a576101c1565b80637533d788146104375780638da5cb5b146104745780638ee749121461049f576101c1565b80632e1a7d4d116101645780636352211e1161013e5780636352211e1461038a5780636ecd2306146103c757806370a08231146103e3578063715018a614610420576101c1565b80632e1a7d4d1461030f57806342842e0e1461033857806355f804b314610361576101c1565b8063081812fc116101a0578063081812fc14610257578063095ea7b3146102945780631c37a822146102bd57806323b872dd146102e6576101c1565b80621d3567146101c657806301ffc9a7146101ef57806306fdde031461022c575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612d2e565b6106bc565b005b3480156101fb57600080fd5b5061021660048036038101906102119190612e25565b6108fe565b6040516102239190612e6d565b60405180910390f35b34801561023857600080fd5b506102416109e0565b60405161024e9190612f10565b60405180910390f35b34801561026357600080fd5b5061027e60048036038101906102799190612f68565b610a72565b60405161028b9190612fd6565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b6919061301d565b610af7565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612d2e565b610c0f565b005b3480156102f257600080fd5b5061030d6004803603810190610308919061305d565b610c8f565b005b34801561031b57600080fd5b5061033660048036038101906103319190612f68565b610cef565b005b34801561034457600080fd5b5061035f600480360381019061035a919061305d565b610e3d565b005b34801561036d57600080fd5b5061038860048036038101906103839190613151565b610e5d565b005b34801561039657600080fd5b506103b160048036038101906103ac9190612f68565b610ef3565b6040516103be9190612fd6565b60405180910390f35b6103e160048036038101906103dc91906131d3565b610fa5565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190613200565b61108c565b604051610417919061323c565b60405180910390f35b34801561042c57600080fd5b50610435611144565b005b34801561044357600080fd5b5061045e60048036038101906104599190613257565b6111cc565b60405161046b91906132d9565b60405180910390f35b34801561048057600080fd5b5061048961126c565b6040516104969190612fd6565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906132fb565b611295565b6040516104d4929190613383565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612f68565b6112e9565b005b34801561051257600080fd5b5061051b61136f565b6040516105289190612f10565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906133d8565b611401565b005b34801561056657600080fd5b5061056f611417565b60405161057c9190612fd6565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613418565b61143d565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612f68565b61149f565b6040516105e29190612f10565b60405180910390f35b6106056004803603810190610600919061349b565b611546565b005b610621600480360381019061061c919061353b565b61182a565b005b34801561062f57600080fd5b5061064a600480360381019061064591906135df565b6119ca565b6040516106579190612e6d565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061361f565b611a5e565b005b610691611b0a565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613200565b611b0c565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071657600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461073c906136ae565b905083511480156107825750600960008561ffff1661ffff168152602001908152602001600020604051610770919061377f565b60405180910390208380519060200120145b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890613808565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108009493929190613846565b600060405180830381600087803b15801561081a57600080fd5b505af192505050801561082b575060015b6108f7576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161087591906138ca565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108ea9493929190613846565b60405180910390a16108f8565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d957506109d882611c04565b5b9050919050565b6060600180546109ef906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b906136ae565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611c6e565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613953565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a906139e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611cda565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611cda565b6119ca565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613a77565b60405180910390fd5b610c0a8383611ce2565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613b09565b60405180910390fd5b610c8984848484611d9b565b50505050565b610ca0610c9a611cda565b82611dc8565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613b9b565b60405180910390fd5b610cea838383611ea6565b505050565b610cf7611cda565b73ffffffffffffffffffffffffffffffffffffffff16610d1561126c565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613c07565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db390613c4d565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613cd4565b60405180910390fd5b5050565b610e588383836040518060200160405280600081525061143d565b505050565b610e65611cda565b73ffffffffffffffffffffffffffffffffffffffff16610e8361126c565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613c07565b60405180910390fd5b80600b9080519060200190610eef929190612a31565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613d66565b60405180910390fd5b80915050919050565b60038160ff1610610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613df8565b60405180910390fd5b600d548160ff16600c54610fff9190613e47565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613f0f565b60405180910390fd5b61105e33600c6000815461105390613f2f565b919050819055612102565b60028160ff1614156110895761108833600c6000815461107d90613f2f565b919050819055612102565b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613fea565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61114c611cda565b73ffffffffffffffffffffffffffffffffffffffff1661116a61126c565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613c07565b60405180910390fd5b6111ca6000612120565b565b600960205280600052604060002060009150905080546111eb906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611217906136ae565b80156112645780601f1061123957610100808354040283529160200191611264565b820191906000526020600020905b81548152906001019060200180831161124757829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112f1611cda565b73ffffffffffffffffffffffffffffffffffffffff1661130f61126c565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613c07565b60405180910390fd5b80600e8190555050565b60606002805461137e906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa906136ae565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050905090565b61141361140c611cda565b83836121e4565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61144e611448611cda565b83611dc8565b61148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613b9b565b60405180910390fd5b61149984848484612351565b50505050565b60606114aa82611c6e565b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e09061407c565b60405180910390fd5b60006114f36123ad565b90506000815111611513576040518060200160405280600081525061153e565b8061151d8461243f565b60405160200161152e9291906140d8565b6040516020818303038152906040525b915050919050565b61154f81610ef3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061416e565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115e4906136ae565b905011611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614200565b60405180910390fd5b61162f816125a0565b60003382604051602001611644929190614220565b6040516020818303038152906040529050600060019050600081600e546040516020016116729291906142a0565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e99594939291906142cc565b6040805180830381865afa158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190614342565b5090508034101561176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061441a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f0969594939291906144db565b6000604051808303818588803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185591906138ca565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906145c3565b60405180910390fd5b8060000154838390501480156118fa5750806001015483836040516118f0929190614608565b6040518091039020145b611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119309061466d565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b81526004016119909594939291906146ba565b600060405180830381600087803b1580156119aa57600080fd5b505af11580156119be573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a66611cda565b73ffffffffffffffffffffffffffffffffffffffff16611a8461126c565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613c07565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b04929190612ab7565b50505050565b565b611b14611cda565b73ffffffffffffffffffffffffffffffffffffffff16611b3261126c565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613c07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef90614781565b60405180910390fd5b611c0181612120565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5583610ef3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611db291906147cd565b91509150611dc08282612102565b505050505050565b6000611dd382611c6e565b611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e099061487f565b60405180910390fd5b6000611e1d83610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8c57508373ffffffffffffffffffffffffffffffffffffffff16611e7484610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e9d5750611e9c81856119ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ec682610ef3565b73ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614911565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f83906149a3565b60405180910390fd5b611f978383836126b1565b611fa2600082611ce2565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff291906149c3565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120499190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61211c8282604051806020016040528060008152506126b6565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90614a43565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123449190612e6d565b60405180910390a3505050565b61235c848484611ea6565b61236884848484612711565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614ad5565b60405180910390fd5b50505050565b6060600b80546123bc906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546123e8906136ae565b80156124355780601f1061240a57610100808354040283529160200191612435565b820191906000526020600020905b81548152906001019060200180831161241857829003601f168201915b5050505050905090565b60606000821415612487576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061259b565b600082905060005b600082146124b95780806124a290613f2f565b915050600a826124b29190614b24565b915061248f565b60008167ffffffffffffffff8111156124d5576124d4612bc3565b5b6040519080825280601f01601f1916602001820160405280156125075781602001600182028036833780820191505090505b5090505b600085146125945760018261252091906149c3565b9150600a8561252f9190614b55565b603061253b9190613e47565b60f81b81838151811061255157612550614b86565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561258d9190614b24565b945061250b565b8093505050505b919050565b60006125ab82610ef3565b90506125b9816000846126b1565b6125c4600083611ce2565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261491906149c3565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126c08383612899565b6126cd6000848484612711565b61270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614ad5565b60405180910390fd5b505050565b60006127328473ffffffffffffffffffffffffffffffffffffffff16612a1e565b1561288c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275b611cda565b8786866040518563ffffffff1660e01b815260040161277d9493929190614bb5565b6020604051808303816000875af19250505080156127b957506040513d601f19601f820116820180604052508101906127b69190614c16565b60015b61283c573d80600081146127e9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ee565b606091505b50600081511415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90614ad5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612891565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614c8f565b60405180910390fd5b612915600083836126b1565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129659190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a3d906136ae565b90600052602060002090601f016020900481019282612a5f5760008555612aa6565b82601f10612a7857805160ff1916838001178555612aa6565b82800160010185558215612aa6579182015b82811115612aa5578251825591602001919060010190612a8a565b5b509050612ab39190612b3d565b5090565b828054612ac3906136ae565b90600052602060002090601f016020900481019282612ae55760008555612b2c565b82601f10612afe57803560ff1916838001178555612b2c565b82800160010185558215612b2c579182015b82811115612b2b578235825591602001919060010190612b10565b5b509050612b399190612b3d565b5090565b5b80821115612b56576000816000905550600101612b3e565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b612b8581612b6e565b8114612b9057600080fd5b50565b600081359050612ba281612b7c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfb82612bb2565b810181811067ffffffffffffffff82111715612c1a57612c19612bc3565b5b80604052505050565b6000612c2d612b5a565b9050612c398282612bf2565b919050565b600067ffffffffffffffff821115612c5957612c58612bc3565b5b612c6282612bb2565b9050602081019050919050565b82818337600083830152505050565b6000612c91612c8c84612c3e565b612c23565b905082815260208101848484011115612cad57612cac612bad565b5b612cb8848285612c6f565b509392505050565b600082601f830112612cd557612cd4612ba8565b5b8135612ce5848260208601612c7e565b91505092915050565b600067ffffffffffffffff82169050919050565b612d0b81612cee565b8114612d1657600080fd5b50565b600081359050612d2881612d02565b92915050565b60008060008060808587031215612d4857612d47612b64565b5b6000612d5687828801612b93565b945050602085013567ffffffffffffffff811115612d7757612d76612b69565b5b612d8387828801612cc0565b9350506040612d9487828801612d19565b925050606085013567ffffffffffffffff811115612db557612db4612b69565b5b612dc187828801612cc0565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0281612dcd565b8114612e0d57600080fd5b50565b600081359050612e1f81612df9565b92915050565b600060208284031215612e3b57612e3a612b64565b5b6000612e4984828501612e10565b91505092915050565b60008115159050919050565b612e6781612e52565b82525050565b6000602082019050612e826000830184612e5e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec2578082015181840152602081019050612ea7565b83811115612ed1576000848401525b50505050565b6000612ee282612e88565b612eec8185612e93565b9350612efc818560208601612ea4565b612f0581612bb2565b840191505092915050565b60006020820190508181036000830152612f2a8184612ed7565b905092915050565b6000819050919050565b612f4581612f32565b8114612f5057600080fd5b50565b600081359050612f6281612f3c565b92915050565b600060208284031215612f7e57612f7d612b64565b5b6000612f8c84828501612f53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fc082612f95565b9050919050565b612fd081612fb5565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b612ffa81612fb5565b811461300557600080fd5b50565b60008135905061301781612ff1565b92915050565b6000806040838503121561303457613033612b64565b5b600061304285828601613008565b925050602061305385828601612f53565b9150509250929050565b60008060006060848603121561307657613075612b64565b5b600061308486828701613008565b935050602061309586828701613008565b92505060406130a686828701612f53565b9150509250925092565b600067ffffffffffffffff8211156130cb576130ca612bc3565b5b6130d482612bb2565b9050602081019050919050565b60006130f46130ef846130b0565b612c23565b9050828152602081018484840111156131105761310f612bad565b5b61311b848285612c6f565b509392505050565b600082601f83011261313857613137612ba8565b5b81356131488482602086016130e1565b91505092915050565b60006020828403121561316757613166612b64565b5b600082013567ffffffffffffffff81111561318557613184612b69565b5b61319184828501613123565b91505092915050565b600060ff82169050919050565b6131b08161319a565b81146131bb57600080fd5b50565b6000813590506131cd816131a7565b92915050565b6000602082840312156131e9576131e8612b64565b5b60006131f7848285016131be565b91505092915050565b60006020828403121561321657613215612b64565b5b600061322484828501613008565b91505092915050565b61323681612f32565b82525050565b6000602082019050613251600083018461322d565b92915050565b60006020828403121561326d5761326c612b64565b5b600061327b84828501612b93565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006132ab82613284565b6132b5818561328f565b93506132c5818560208601612ea4565b6132ce81612bb2565b840191505092915050565b600060208201905081810360008301526132f381846132a0565b905092915050565b60008060006060848603121561331457613313612b64565b5b600061332286828701612b93565b935050602084013567ffffffffffffffff81111561334357613342612b69565b5b61334f86828701612cc0565b925050604061336086828701612f53565b9150509250925092565b6000819050919050565b61337d8161336a565b82525050565b6000604082019050613398600083018561322d565b6133a56020830184613374565b9392505050565b6133b581612e52565b81146133c057600080fd5b50565b6000813590506133d2816133ac565b92915050565b600080604083850312156133ef576133ee612b64565b5b60006133fd85828601613008565b925050602061340e858286016133c3565b9150509250929050565b6000806000806080858703121561343257613431612b64565b5b600061344087828801613008565b945050602061345187828801613008565b935050604061346287828801612f53565b925050606085013567ffffffffffffffff81111561348357613482612b69565b5b61348f87828801612cc0565b91505092959194509250565b600080604083850312156134b2576134b1612b64565b5b60006134c085828601612b93565b92505060206134d185828601612f53565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126134fb576134fa612ba8565b5b8235905067ffffffffffffffff811115613518576135176134db565b5b602083019150836001820283011115613534576135336134e0565b5b9250929050565b60008060008060006080868803121561355757613556612b64565b5b600061356588828901612b93565b955050602086013567ffffffffffffffff81111561358657613585612b69565b5b61359288828901612cc0565b94505060406135a388828901612d19565b935050606086013567ffffffffffffffff8111156135c4576135c3612b69565b5b6135d0888289016134e5565b92509250509295509295909350565b600080604083850312156135f6576135f5612b64565b5b600061360485828601613008565b925050602061361585828601613008565b9150509250929050565b60008060006040848603121561363857613637612b64565b5b600061364686828701612b93565b935050602084013567ffffffffffffffff81111561366757613666612b69565b5b613673868287016134e5565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136c657607f821691505b602082108114156136da576136d961367f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461370d816136ae565b61371781866136e0565b94506001821660008114613732576001811461374357613776565b60ff19831686528186019350613776565b61374c856136eb565b60005b8381101561376e5781548189015260018201915060208101905061374f565b838801955050505b50505092915050565b600061378b8284613700565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b60006137f2603483612e93565b91506137fd82613796565b604082019050919050565b60006020820190508181036000830152613821816137e5565b9050919050565b61383181612b6e565b82525050565b61384081612cee565b82525050565b600060808201905061385b6000830187613828565b818103602083015261386d81866132a0565b905061387c6040830185613837565b818103606083015261388e81846132a0565b905095945050505050565b60006138a482613284565b6138ae81856136e0565b93506138be818560208601612ea4565b80840191505092915050565b60006138d68284613899565b915081905092915050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061393d602c83612e93565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139cf602183612e93565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a61603883612e93565b9150613a6c82613a05565b604082019050919050565b60006020820190508181036000830152613a9081613a54565b9050919050565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b6000613af3602b83612e93565b9150613afe82613a97565b604082019050919050565b60006020820190508181036000830152613b2281613ae6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b85603183612e93565b9150613b9082613b29565b604082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf1602083612e93565b9150613bfc82613bbb565b602082019050919050565b60006020820190508181036000830152613c2081613be4565b9050919050565b50565b6000613c376000836136e0565b9150613c4282613c27565b600082019050919050565b6000613c5882613c2a565b9150819050919050565b7f6d6f6f6479206b697474656e733a204661696c656420746f207769746864726160008201527f7720457468657200000000000000000000000000000000000000000000000000602082015250565b6000613cbe602783612e93565b9150613cc982613c62565b604082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d50602983612e93565b9150613d5b82613cf4565b604082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f6d6f6f6479206b697474656e733a204d61782032204e4654732070657220747260008201527f616e73616374696f6e0000000000000000000000000000000000000000000000602082015250565b6000613de2602983612e93565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5282612f32565b9150613e5d83612f32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9257613e91613e18565b5b828201905092915050565b7f6d6f6f6479206b697474656e733a204d696e742065786365656473207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef9602283612e93565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b6000613f3a82612f32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6d57613f6c613e18565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613fd4602a83612e93565b9150613fdf82613f78565b604082019050919050565b6000602082019050818103600083015261400381613fc7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614066602f83612e93565b91506140718261400a565b604082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b600081905092915050565b60006140b282612e88565b6140bc818561409c565b93506140cc818560208601612ea4565b80840191505092915050565b60006140e482856140a7565b91506140f082846140a7565b91508190509392505050565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614158602283612e93565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b60006141ea602e83612e93565b91506141f58261418e565b604082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b60006040820190506142356000830185612fc7565b614242602083018461322d565b9392505050565b60008160f01b9050919050565b600061426182614249565b9050919050565b61427961427482612b6e565b614256565b82525050565b6000819050919050565b61429a61429582612f32565b61427f565b82525050565b60006142ac8285614268565b6002820191506142bc8284614289565b6020820191508190509392505050565b600060a0820190506142e16000830188613828565b6142ee6020830187612fc7565b818103604083015261430081866132a0565b905061430f6060830185612e5e565b818103608083015261432181846132a0565b90509695505050505050565b60008151905061433c81612f3c565b92915050565b6000806040838503121561435957614358612b64565b5b60006143678582860161432d565b92505060206143788582860161432d565b9150509250929050565b7f6d6f6f6479206b697474656e733a206d73672e76616c7565206e6f7420656e6f60008201527f75676820746f20636f766572206d6573736167654665652e2053656e6420676160208201527f7320666f72206d65737361676520666565730000000000000000000000000000604082015250565b6000614404605283612e93565b915061440f82614382565b606082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b60008154614447816136ae565b614451818661328f565b9450600182166000811461446c576001811461447e576144b1565b60ff19831686526020860193506144b1565b614487856136eb565b60005b838110156144a95781548189015260018201915060208101905061448a565b808801955050505b50505092915050565b60006144c582612f95565b9050919050565b6144d5816144ba565b82525050565b600060c0820190506144f06000830189613828565b8181036020830152614502818861443a565b9050818103604083015261451681876132a0565b905061452560608301866144cc565b6145326080830185612fc7565b81810360a083015261454481846132a0565b9050979650505050505050565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b60006145ad602683612e93565b91506145b882614551565b604082019050919050565b600060208201905081810360008301526145dc816145a0565b9050919050565b60006145ef83856136e0565b93506145fc838584612c6f565b82840190509392505050565b60006146158284866145e3565b91508190509392505050565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b6000614657601a83612e93565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b6000614699838561328f565b93506146a6838584612c6f565b6146af83612bb2565b840190509392505050565b60006080820190506146cf6000830188613828565b81810360208301526146e181876132a0565b90506146f06040830186613837565b818103606083015261470381848661468d565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061476b602683612e93565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b6147aa816144ba565b81146147b557600080fd5b50565b6000815190506147c7816147a1565b92915050565b600080604083850312156147e4576147e3612b64565b5b60006147f2858286016147b8565b92505060206148038582860161432d565b9150509250929050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614869602c83612e93565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006148fb602983612e93565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061498d602483612e93565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b60006149ce82612f32565b91506149d983612f32565b9250828210156149ec576149eb613e18565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a2d601983612e93565b9150614a38826149f7565b602082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614abf603283612e93565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b2f82612f32565b9150614b3a83612f32565b925082614b4a57614b49614af5565b5b828204905092915050565b6000614b6082612f32565b9150614b6b83612f32565b925082614b7b57614b7a614af5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000608082019050614bca6000830187612fc7565b614bd76020830186612fc7565b614be4604083018561322d565b8181036060830152614bf681846132a0565b905095945050505050565b600081519050614c1081612df9565b92915050565b600060208284031215614c2c57614c2b612b64565b5b6000614c3a84828501614c01565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c79602083612e93565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b905091905056fea2646970667358221220be9c579fad7b558e030ac8f8db8ace3ed8d6c76bdbf1023f0afff7b7693d11b764736f6c634300080b0033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e7a703743654d6d584569424e71757a6e36595a3857786d6833346144656378376a335437573262797973422f00000000000000000000
Deployed Bytecode
0x6080604052600436106101c15760003560e01c80637533d788116100f7578063b88d4fde11610095578063e985e9c511610064578063e985e9c514610623578063eb8d72b714610660578063ed88c68e14610689578063f2fde38b14610693576101c1565b8063b88d4fde14610585578063c87b56dd146105ae578063cf89fa03146105eb578063d1deba1f14610607576101c1565b8063943fb872116100d1578063943fb872146104dd57806395d89b4114610506578063a22cb46514610531578063b2bdfa7b1461055a576101c1565b80637533d788146104375780638da5cb5b146104745780638ee749121461049f576101c1565b80632e1a7d4d116101645780636352211e1161013e5780636352211e1461038a5780636ecd2306146103c757806370a08231146103e3578063715018a614610420576101c1565b80632e1a7d4d1461030f57806342842e0e1461033857806355f804b314610361576101c1565b8063081812fc116101a0578063081812fc14610257578063095ea7b3146102945780631c37a822146102bd57806323b872dd146102e6576101c1565b80621d3567146101c657806301ffc9a7146101ef57806306fdde031461022c575b600080fd5b3480156101d257600080fd5b506101ed60048036038101906101e89190612d2e565b6106bc565b005b3480156101fb57600080fd5b5061021660048036038101906102119190612e25565b6108fe565b6040516102239190612e6d565b60405180910390f35b34801561023857600080fd5b506102416109e0565b60405161024e9190612f10565b60405180910390f35b34801561026357600080fd5b5061027e60048036038101906102799190612f68565b610a72565b60405161028b9190612fd6565b60405180910390f35b3480156102a057600080fd5b506102bb60048036038101906102b6919061301d565b610af7565b005b3480156102c957600080fd5b506102e460048036038101906102df9190612d2e565b610c0f565b005b3480156102f257600080fd5b5061030d6004803603810190610308919061305d565b610c8f565b005b34801561031b57600080fd5b5061033660048036038101906103319190612f68565b610cef565b005b34801561034457600080fd5b5061035f600480360381019061035a919061305d565b610e3d565b005b34801561036d57600080fd5b5061038860048036038101906103839190613151565b610e5d565b005b34801561039657600080fd5b506103b160048036038101906103ac9190612f68565b610ef3565b6040516103be9190612fd6565b60405180910390f35b6103e160048036038101906103dc91906131d3565b610fa5565b005b3480156103ef57600080fd5b5061040a60048036038101906104059190613200565b61108c565b604051610417919061323c565b60405180910390f35b34801561042c57600080fd5b50610435611144565b005b34801561044357600080fd5b5061045e60048036038101906104599190613257565b6111cc565b60405161046b91906132d9565b60405180910390f35b34801561048057600080fd5b5061048961126c565b6040516104969190612fd6565b60405180910390f35b3480156104ab57600080fd5b506104c660048036038101906104c191906132fb565b611295565b6040516104d4929190613383565b60405180910390f35b3480156104e957600080fd5b5061050460048036038101906104ff9190612f68565b6112e9565b005b34801561051257600080fd5b5061051b61136f565b6040516105289190612f10565b60405180910390f35b34801561053d57600080fd5b50610558600480360381019061055391906133d8565b611401565b005b34801561056657600080fd5b5061056f611417565b60405161057c9190612fd6565b60405180910390f35b34801561059157600080fd5b506105ac60048036038101906105a79190613418565b61143d565b005b3480156105ba57600080fd5b506105d560048036038101906105d09190612f68565b61149f565b6040516105e29190612f10565b60405180910390f35b6106056004803603810190610600919061349b565b611546565b005b610621600480360381019061061c919061353b565b61182a565b005b34801561062f57600080fd5b5061064a600480360381019061064591906135df565b6119ca565b6040516106579190612e6d565b60405180910390f35b34801561066c57600080fd5b506106876004803603810190610682919061361f565b611a5e565b005b610691611b0a565b005b34801561069f57600080fd5b506106ba60048036038101906106b59190613200565b611b0c565b005b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff161461071657600080fd5b600960008561ffff1661ffff168152602001908152602001600020805461073c906136ae565b905083511480156107825750600960008561ffff1661ffff168152602001908152602001600020604051610770919061377f565b60405180910390208380519060200120145b6107c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107b890613808565b60405180910390fd5b3073ffffffffffffffffffffffffffffffffffffffff16631c37a822858585856040518563ffffffff1660e01b81526004016108009493929190613846565b600060405180830381600087803b15801561081a57600080fd5b505af192505050801561082b575060015b6108f7576040518060400160405280825181526020018280519060200120815250600860008661ffff1661ffff1681526020019081526020016000208460405161087591906138ca565b908152602001604051809103902060008467ffffffffffffffff16815260200190815260200160002060008201518160000155602082015181600101559050507fe6f254030bcb01ffd20558175c13fcaed6d1520be7becee4c961b65f79243b0d848484846040516108ea9493929190613846565b60405180910390a16108f8565b5b50505050565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806109c957507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806109d957506109d882611c04565b5b9050919050565b6060600180546109ef906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054610a1b906136ae565b8015610a685780601f10610a3d57610100808354040283529160200191610a68565b820191906000526020600020905b815481529060010190602001808311610a4b57829003601f168201915b5050505050905090565b6000610a7d82611c6e565b610abc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab390613953565b60405180910390fd5b6005600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610b0282610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610b73576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b6a906139e5565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610b92611cda565b73ffffffffffffffffffffffffffffffffffffffff161480610bc15750610bc081610bbb611cda565b6119ca565b5b610c00576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610bf790613a77565b60405180910390fd5b610c0a8383611ce2565b505050565b3073ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7490613b09565b60405180910390fd5b610c8984848484611d9b565b50505050565b610ca0610c9a611cda565b82611dc8565b610cdf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd690613b9b565b60405180910390fd5b610cea838383611ea6565b505050565b610cf7611cda565b73ffffffffffffffffffffffffffffffffffffffff16610d1561126c565b73ffffffffffffffffffffffffffffffffffffffff1614610d6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d6290613c07565b60405180910390fd5b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1682604051610db390613c4d565b60006040518083038185875af1925050503d8060008114610df0576040519150601f19603f3d011682016040523d82523d6000602084013e610df5565b606091505b5050905080610e39576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e3090613cd4565b60405180910390fd5b5050565b610e588383836040518060200160405280600081525061143d565b505050565b610e65611cda565b73ffffffffffffffffffffffffffffffffffffffff16610e8361126c565b73ffffffffffffffffffffffffffffffffffffffff1614610ed9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ed090613c07565b60405180910390fd5b80600b9080519060200190610eef929190612a31565b5050565b6000806003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415610f9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f9390613d66565b60405180910390fd5b80915050919050565b60038160ff1610610feb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fe290613df8565b60405180910390fd5b600d548160ff16600c54610fff9190613e47565b1115611040576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103790613f0f565b60405180910390fd5b61105e33600c6000815461105390613f2f565b919050819055612102565b60028160ff1614156110895761108833600c6000815461107d90613f2f565b919050819055612102565b5b50565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156110fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110f490613fea565b60405180910390fd5b600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61114c611cda565b73ffffffffffffffffffffffffffffffffffffffff1661116a61126c565b73ffffffffffffffffffffffffffffffffffffffff16146111c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111b790613c07565b60405180910390fd5b6111ca6000612120565b565b600960205280600052604060002060009150905080546111eb906136ae565b80601f0160208091040260200160405190810160405280929190818152602001828054611217906136ae565b80156112645780601f1061123957610100808354040283529160200191611264565b820191906000526020600020905b81548152906001019060200180831161124757829003601f168201915b505050505081565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60086020528260005260406000208280516020810182018051848252602083016020850120818352809550505050505060205280600052604060002060009250925050508060000154908060010154905082565b6112f1611cda565b73ffffffffffffffffffffffffffffffffffffffff1661130f61126c565b73ffffffffffffffffffffffffffffffffffffffff1614611365576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161135c90613c07565b60405180910390fd5b80600e8190555050565b60606002805461137e906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546113aa906136ae565b80156113f75780601f106113cc576101008083540402835291602001916113f7565b820191906000526020600020905b8154815290600101906020018083116113da57829003601f168201915b5050505050905090565b61141361140c611cda565b83836121e4565b5050565b600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61144e611448611cda565b83611dc8565b61148d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161148490613b9b565b60405180910390fd5b61149984848484612351565b50505050565b60606114aa82611c6e565b6114e9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114e09061407c565b60405180910390fd5b60006114f36123ad565b90506000815111611513576040518060200160405280600081525061153e565b8061151d8461243f565b60405160200161152e9291906140d8565b6040516020818303038152906040525b915050919050565b61154f81610ef3565b73ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff16146115bc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115b39061416e565b60405180910390fd5b6000600960008461ffff1661ffff16815260200190815260200160002080546115e4906136ae565b905011611626576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161d90614200565b60405180910390fd5b61162f816125a0565b60003382604051602001611644929190614220565b6040516020818303038152906040529050600060019050600081600e546040516020016116729291906142a0565b60405160208183030381529060405290506000600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166340a7bb108730876000876040518663ffffffff1660e01b81526004016116e99594939291906142cc565b6040805180830381865afa158015611705573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906117299190614342565b5090508034101561176f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117669061441a565b60405180910390fd5b600760009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663c58031003488600960008b61ffff1661ffff16815260200190815260200160002088336000896040518863ffffffff1660e01b81526004016117f0969594939291906144db565b6000604051808303818588803b15801561180957600080fd5b505af115801561181d573d6000803e3d6000fd5b5050505050505050505050565b6000600860008761ffff1661ffff1681526020019081526020016000208560405161185591906138ca565b908152602001604051809103902060008567ffffffffffffffff16815260200190815260200160002090506000801b816001015414156118ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118c1906145c3565b60405180910390fd5b8060000154838390501480156118fa5750806001015483836040516118f0929190614608565b6040518091039020145b611939576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119309061466d565b60405180910390fd5b600081600001819055506000801b81600101819055503073ffffffffffffffffffffffffffffffffffffffff16631c37a82287878787876040518663ffffffff1660e01b81526004016119909594939291906146ba565b600060405180830381600087803b1580156119aa57600080fd5b505af11580156119be573d6000803e3d6000fd5b50505050505050505050565b6000600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611a66611cda565b73ffffffffffffffffffffffffffffffffffffffff16611a8461126c565b73ffffffffffffffffffffffffffffffffffffffff1614611ada576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ad190613c07565b60405180910390fd5b8181600960008661ffff1661ffff1681526020019081526020016000209190611b04929190612ab7565b50505050565b565b611b14611cda565b73ffffffffffffffffffffffffffffffffffffffff16611b3261126c565b73ffffffffffffffffffffffffffffffffffffffff1614611b88576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b7f90613c07565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bf8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bef90614781565b60405180910390fd5b611c0181612120565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166003600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816005600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611d5583610ef3565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60008082806020019051810190611db291906147cd565b91509150611dc08282612102565b505050505050565b6000611dd382611c6e565b611e12576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e099061487f565b60405180910390fd5b6000611e1d83610ef3565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611e8c57508373ffffffffffffffffffffffffffffffffffffffff16611e7484610a72565b73ffffffffffffffffffffffffffffffffffffffff16145b80611e9d5750611e9c81856119ca565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611ec682610ef3565b73ffffffffffffffffffffffffffffffffffffffff1614611f1c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1390614911565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611f8c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f83906149a3565b60405180910390fd5b611f978383836126b1565b611fa2600082611ce2565b6001600460008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ff291906149c3565b925050819055506001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546120499190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b61211c8282604051806020016040528060008152506126b6565b5050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612253576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224a90614a43565b60405180910390fd5b80600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516123449190612e6d565b60405180910390a3505050565b61235c848484611ea6565b61236884848484612711565b6123a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161239e90614ad5565b60405180910390fd5b50505050565b6060600b80546123bc906136ae565b80601f01602080910402602001604051908101604052809291908181526020018280546123e8906136ae565b80156124355780601f1061240a57610100808354040283529160200191612435565b820191906000526020600020905b81548152906001019060200180831161241857829003601f168201915b5050505050905090565b60606000821415612487576040518060400160405280600181526020017f3000000000000000000000000000000000000000000000000000000000000000815250905061259b565b600082905060005b600082146124b95780806124a290613f2f565b915050600a826124b29190614b24565b915061248f565b60008167ffffffffffffffff8111156124d5576124d4612bc3565b5b6040519080825280601f01601f1916602001820160405280156125075781602001600182028036833780820191505090505b5090505b600085146125945760018261252091906149c3565b9150600a8561252f9190614b55565b603061253b9190613e47565b60f81b81838151811061255157612550614b86565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561258d9190614b24565b945061250b565b8093505050505b919050565b60006125ab82610ef3565b90506125b9816000846126b1565b6125c4600083611ce2565b6001600460008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461261491906149c3565b925050819055506003600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b6126c08383612899565b6126cd6000848484612711565b61270c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161270390614ad5565b60405180910390fd5b505050565b60006127328473ffffffffffffffffffffffffffffffffffffffff16612a1e565b1561288c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261275b611cda565b8786866040518563ffffffff1660e01b815260040161277d9493929190614bb5565b6020604051808303816000875af19250505080156127b957506040513d601f19601f820116820180604052508101906127b69190614c16565b60015b61283c573d80600081146127e9576040519150601f19603f3d011682016040523d82523d6000602084013e6127ee565b606091505b50600081511415612834576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282b90614ad5565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612891565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612909576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161290090614c8f565b60405180910390fd5b612915600083836126b1565b6001600460008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129659190613e47565b92505081905550816003600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054612a3d906136ae565b90600052602060002090601f016020900481019282612a5f5760008555612aa6565b82601f10612a7857805160ff1916838001178555612aa6565b82800160010185558215612aa6579182015b82811115612aa5578251825591602001919060010190612a8a565b5b509050612ab39190612b3d565b5090565b828054612ac3906136ae565b90600052602060002090601f016020900481019282612ae55760008555612b2c565b82601f10612afe57803560ff1916838001178555612b2c565b82800160010185558215612b2c579182015b82811115612b2b578235825591602001919060010190612b10565b5b509050612b399190612b3d565b5090565b5b80821115612b56576000816000905550600101612b3e565b5090565b6000604051905090565b600080fd5b600080fd5b600061ffff82169050919050565b612b8581612b6e565b8114612b9057600080fd5b50565b600081359050612ba281612b7c565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b612bfb82612bb2565b810181811067ffffffffffffffff82111715612c1a57612c19612bc3565b5b80604052505050565b6000612c2d612b5a565b9050612c398282612bf2565b919050565b600067ffffffffffffffff821115612c5957612c58612bc3565b5b612c6282612bb2565b9050602081019050919050565b82818337600083830152505050565b6000612c91612c8c84612c3e565b612c23565b905082815260208101848484011115612cad57612cac612bad565b5b612cb8848285612c6f565b509392505050565b600082601f830112612cd557612cd4612ba8565b5b8135612ce5848260208601612c7e565b91505092915050565b600067ffffffffffffffff82169050919050565b612d0b81612cee565b8114612d1657600080fd5b50565b600081359050612d2881612d02565b92915050565b60008060008060808587031215612d4857612d47612b64565b5b6000612d5687828801612b93565b945050602085013567ffffffffffffffff811115612d7757612d76612b69565b5b612d8387828801612cc0565b9350506040612d9487828801612d19565b925050606085013567ffffffffffffffff811115612db557612db4612b69565b5b612dc187828801612cc0565b91505092959194509250565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b612e0281612dcd565b8114612e0d57600080fd5b50565b600081359050612e1f81612df9565b92915050565b600060208284031215612e3b57612e3a612b64565b5b6000612e4984828501612e10565b91505092915050565b60008115159050919050565b612e6781612e52565b82525050565b6000602082019050612e826000830184612e5e565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612ec2578082015181840152602081019050612ea7565b83811115612ed1576000848401525b50505050565b6000612ee282612e88565b612eec8185612e93565b9350612efc818560208601612ea4565b612f0581612bb2565b840191505092915050565b60006020820190508181036000830152612f2a8184612ed7565b905092915050565b6000819050919050565b612f4581612f32565b8114612f5057600080fd5b50565b600081359050612f6281612f3c565b92915050565b600060208284031215612f7e57612f7d612b64565b5b6000612f8c84828501612f53565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000612fc082612f95565b9050919050565b612fd081612fb5565b82525050565b6000602082019050612feb6000830184612fc7565b92915050565b612ffa81612fb5565b811461300557600080fd5b50565b60008135905061301781612ff1565b92915050565b6000806040838503121561303457613033612b64565b5b600061304285828601613008565b925050602061305385828601612f53565b9150509250929050565b60008060006060848603121561307657613075612b64565b5b600061308486828701613008565b935050602061309586828701613008565b92505060406130a686828701612f53565b9150509250925092565b600067ffffffffffffffff8211156130cb576130ca612bc3565b5b6130d482612bb2565b9050602081019050919050565b60006130f46130ef846130b0565b612c23565b9050828152602081018484840111156131105761310f612bad565b5b61311b848285612c6f565b509392505050565b600082601f83011261313857613137612ba8565b5b81356131488482602086016130e1565b91505092915050565b60006020828403121561316757613166612b64565b5b600082013567ffffffffffffffff81111561318557613184612b69565b5b61319184828501613123565b91505092915050565b600060ff82169050919050565b6131b08161319a565b81146131bb57600080fd5b50565b6000813590506131cd816131a7565b92915050565b6000602082840312156131e9576131e8612b64565b5b60006131f7848285016131be565b91505092915050565b60006020828403121561321657613215612b64565b5b600061322484828501613008565b91505092915050565b61323681612f32565b82525050565b6000602082019050613251600083018461322d565b92915050565b60006020828403121561326d5761326c612b64565b5b600061327b84828501612b93565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60006132ab82613284565b6132b5818561328f565b93506132c5818560208601612ea4565b6132ce81612bb2565b840191505092915050565b600060208201905081810360008301526132f381846132a0565b905092915050565b60008060006060848603121561331457613313612b64565b5b600061332286828701612b93565b935050602084013567ffffffffffffffff81111561334357613342612b69565b5b61334f86828701612cc0565b925050604061336086828701612f53565b9150509250925092565b6000819050919050565b61337d8161336a565b82525050565b6000604082019050613398600083018561322d565b6133a56020830184613374565b9392505050565b6133b581612e52565b81146133c057600080fd5b50565b6000813590506133d2816133ac565b92915050565b600080604083850312156133ef576133ee612b64565b5b60006133fd85828601613008565b925050602061340e858286016133c3565b9150509250929050565b6000806000806080858703121561343257613431612b64565b5b600061344087828801613008565b945050602061345187828801613008565b935050604061346287828801612f53565b925050606085013567ffffffffffffffff81111561348357613482612b69565b5b61348f87828801612cc0565b91505092959194509250565b600080604083850312156134b2576134b1612b64565b5b60006134c085828601612b93565b92505060206134d185828601612f53565b9150509250929050565b600080fd5b600080fd5b60008083601f8401126134fb576134fa612ba8565b5b8235905067ffffffffffffffff811115613518576135176134db565b5b602083019150836001820283011115613534576135336134e0565b5b9250929050565b60008060008060006080868803121561355757613556612b64565b5b600061356588828901612b93565b955050602086013567ffffffffffffffff81111561358657613585612b69565b5b61359288828901612cc0565b94505060406135a388828901612d19565b935050606086013567ffffffffffffffff8111156135c4576135c3612b69565b5b6135d0888289016134e5565b92509250509295509295909350565b600080604083850312156135f6576135f5612b64565b5b600061360485828601613008565b925050602061361585828601613008565b9150509250929050565b60008060006040848603121561363857613637612b64565b5b600061364686828701612b93565b935050602084013567ffffffffffffffff81111561366757613666612b69565b5b613673868287016134e5565b92509250509250925092565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806136c657607f821691505b602082108114156136da576136d961367f565b5b50919050565b600081905092915050565b60008190508160005260206000209050919050565b6000815461370d816136ae565b61371781866136e0565b94506001821660008114613732576001811461374357613776565b60ff19831686528186019350613776565b61374c856136eb565b60005b8381101561376e5781548189015260018201915060208101905061374f565b838801955050505b50505092915050565b600061378b8284613700565b915081905092915050565b7f4e6f6e626c6f636b696e6752656365697665723a20696e76616c696420736f7560008201527f7263652073656e64696e6720636f6e7472616374000000000000000000000000602082015250565b60006137f2603483612e93565b91506137fd82613796565b604082019050919050565b60006020820190508181036000830152613821816137e5565b9050919050565b61383181612b6e565b82525050565b61384081612cee565b82525050565b600060808201905061385b6000830187613828565b818103602083015261386d81866132a0565b905061387c6040830185613837565b818103606083015261388e81846132a0565b905095945050505050565b60006138a482613284565b6138ae81856136e0565b93506138be818560208601612ea4565b80840191505092915050565b60006138d68284613899565b915081905092915050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061393d602c83612e93565b9150613948826138e1565b604082019050919050565b6000602082019050818103600083015261396c81613930565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b60006139cf602183612e93565b91506139da82613973565b604082019050919050565b600060208201905081810360008301526139fe816139c2565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613a61603883612e93565b9150613a6c82613a05565b604082019050919050565b60006020820190508181036000830152613a9081613a54565b9050919050565b7f4e6f6e626c6f636b696e6752656365697665723a2063616c6c6572206d75737460008201527f206265204272696467652e000000000000000000000000000000000000000000602082015250565b6000613af3602b83612e93565b9150613afe82613a97565b604082019050919050565b60006020820190508181036000830152613b2281613ae6565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613b85603183612e93565b9150613b9082613b29565b604082019050919050565b60006020820190508181036000830152613bb481613b78565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613bf1602083612e93565b9150613bfc82613bbb565b602082019050919050565b60006020820190508181036000830152613c2081613be4565b9050919050565b50565b6000613c376000836136e0565b9150613c4282613c27565b600082019050919050565b6000613c5882613c2a565b9150819050919050565b7f6d6f6f6479206b697474656e733a204661696c656420746f207769746864726160008201527f7720457468657200000000000000000000000000000000000000000000000000602082015250565b6000613cbe602783612e93565b9150613cc982613c62565b604082019050919050565b60006020820190508181036000830152613ced81613cb1565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b6000613d50602983612e93565b9150613d5b82613cf4565b604082019050919050565b60006020820190508181036000830152613d7f81613d43565b9050919050565b7f6d6f6f6479206b697474656e733a204d61782032204e4654732070657220747260008201527f616e73616374696f6e0000000000000000000000000000000000000000000000602082015250565b6000613de2602983612e93565b9150613ded82613d86565b604082019050919050565b60006020820190508181036000830152613e1181613dd5565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613e5282612f32565b9150613e5d83612f32565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115613e9257613e91613e18565b5b828201905092915050565b7f6d6f6f6479206b697474656e733a204d696e742065786365656473207375707060008201527f6c79000000000000000000000000000000000000000000000000000000000000602082015250565b6000613ef9602283612e93565b9150613f0482613e9d565b604082019050919050565b60006020820190508181036000830152613f2881613eec565b9050919050565b6000613f3a82612f32565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f6d57613f6c613e18565b5b600182019050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000613fd4602a83612e93565b9150613fdf82613f78565b604082019050919050565b6000602082019050818103600083015261400381613fc7565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b6000614066602f83612e93565b91506140718261400a565b604082019050919050565b6000602082019050818103600083015261409581614059565b9050919050565b600081905092915050565b60006140b282612e88565b6140bc818561409c565b93506140cc818560208601612ea4565b80840191505092915050565b60006140e482856140a7565b91506140f082846140a7565b91508190509392505050565b7f596f75206d757374206f776e2074686520746f6b656e20746f2074726176657260008201527f7365000000000000000000000000000000000000000000000000000000000000602082015250565b6000614158602283612e93565b9150614163826140fc565b604082019050919050565b600060208201905081810360008301526141878161414b565b9050919050565b7f5468697320636861696e2069732063757272656e746c7920756e617661696c6160008201527f626c6520666f722074726176656c000000000000000000000000000000000000602082015250565b60006141ea602e83612e93565b91506141f58261418e565b604082019050919050565b60006020820190508181036000830152614219816141dd565b9050919050565b60006040820190506142356000830185612fc7565b614242602083018461322d565b9392505050565b60008160f01b9050919050565b600061426182614249565b9050919050565b61427961427482612b6e565b614256565b82525050565b6000819050919050565b61429a61429582612f32565b61427f565b82525050565b60006142ac8285614268565b6002820191506142bc8284614289565b6020820191508190509392505050565b600060a0820190506142e16000830188613828565b6142ee6020830187612fc7565b818103604083015261430081866132a0565b905061430f6060830185612e5e565b818103608083015261432181846132a0565b90509695505050505050565b60008151905061433c81612f3c565b92915050565b6000806040838503121561435957614358612b64565b5b60006143678582860161432d565b92505060206143788582860161432d565b9150509250929050565b7f6d6f6f6479206b697474656e733a206d73672e76616c7565206e6f7420656e6f60008201527f75676820746f20636f766572206d6573736167654665652e2053656e6420676160208201527f7320666f72206d65737361676520666565730000000000000000000000000000604082015250565b6000614404605283612e93565b915061440f82614382565b606082019050919050565b60006020820190508181036000830152614433816143f7565b9050919050565b60008154614447816136ae565b614451818661328f565b9450600182166000811461446c576001811461447e576144b1565b60ff19831686526020860193506144b1565b614487856136eb565b60005b838110156144a95781548189015260018201915060208101905061448a565b808801955050505b50505092915050565b60006144c582612f95565b9050919050565b6144d5816144ba565b82525050565b600060c0820190506144f06000830189613828565b8181036020830152614502818861443a565b9050818103604083015261451681876132a0565b905061452560608301866144cc565b6145326080830185612fc7565b81810360a083015261454481846132a0565b9050979650505050505050565b7f4e6f6e626c6f636b696e6752656365697665723a206e6f2073746f726564206d60008201527f6573736167650000000000000000000000000000000000000000000000000000602082015250565b60006145ad602683612e93565b91506145b882614551565b604082019050919050565b600060208201905081810360008301526145dc816145a0565b9050919050565b60006145ef83856136e0565b93506145fc838584612c6f565b82840190509392505050565b60006146158284866145e3565b91508190509392505050565b7f4c617965725a65726f3a20696e76616c6964207061796c6f6164000000000000600082015250565b6000614657601a83612e93565b915061466282614621565b602082019050919050565b600060208201905081810360008301526146868161464a565b9050919050565b6000614699838561328f565b93506146a6838584612c6f565b6146af83612bb2565b840190509392505050565b60006080820190506146cf6000830188613828565b81810360208301526146e181876132a0565b90506146f06040830186613837565b818103606083015261470381848661468d565b90509695505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061476b602683612e93565b91506147768261470f565b604082019050919050565b6000602082019050818103600083015261479a8161475e565b9050919050565b6147aa816144ba565b81146147b557600080fd5b50565b6000815190506147c7816147a1565b92915050565b600080604083850312156147e4576147e3612b64565b5b60006147f2858286016147b8565b92505060206148038582860161432d565b9150509250929050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000614869602c83612e93565b91506148748261480d565b604082019050919050565b600060208201905081810360008301526148988161485c565b9050919050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006148fb602983612e93565b91506149068261489f565b604082019050919050565b6000602082019050818103600083015261492a816148ee565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b600061498d602483612e93565b915061499882614931565b604082019050919050565b600060208201905081810360008301526149bc81614980565b9050919050565b60006149ce82612f32565b91506149d983612f32565b9250828210156149ec576149eb613e18565b5b828203905092915050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614a2d601983612e93565b9150614a38826149f7565b602082019050919050565b60006020820190508181036000830152614a5c81614a20565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b6000614abf603283612e93565b9150614aca82614a63565b604082019050919050565b60006020820190508181036000830152614aee81614ab2565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000614b2f82612f32565b9150614b3a83612f32565b925082614b4a57614b49614af5565b5b828204905092915050565b6000614b6082612f32565b9150614b6b83612f32565b925082614b7b57614b7a614af5565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b6000608082019050614bca6000830187612fc7565b614bd76020830186612fc7565b614be4604083018561322d565b8181036060830152614bf681846132a0565b905095945050505050565b600081519050614c1081612df9565b92915050565b600060208284031215614c2c57614c2b612b64565b5b6000614c3a84828501614c01565b91505092915050565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614c79602083612e93565b9150614c8482614c43565b602082019050919050565b60006020820190508181036000830152614ca881614c6c565b905091905056fea2646970667358221220be9c579fad7b558e030ac8f8db8ace3ed8d6c76bdbf1023f0afff7b7693d11b764736f6c634300080b0033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd6750000000000000000000000000000000000000000000000000000000000000036697066733a2f2f516d4e7a703743654d6d584569424e71757a6e36595a3857786d6833346144656378376a335437573262797973422f00000000000000000000
-----Decoded View---------------
Arg [0] : baseURI_ (string): ipfs://QmNzp7CeMmXEiBNquzn6YZ8Wxmh34aDecx7j3T7W2byysB/
Arg [1] : _layerZeroEndpoint (address): 0x66A71Dcef29A0fFBDBE3c6a460a3B5BC225Cd675
-----Encoded View---------------
5 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 00000000000000000000000066a71dcef29a0ffbdbe3c6a460a3b5bc225cd675
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000036
Arg [3] : 697066733a2f2f516d4e7a703743654d6d584569424e71757a6e36595a385778
Arg [4] : 6d6833346144656378376a335437573262797973422f00000000000000000000
Deployed Bytecode Sourcemap
46135:3730:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43054:963;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30706:309;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31663:94;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33186:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32751:377;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44023:383;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33964:332;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48925:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;34359:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48717:84;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31351:253;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;46700:369;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31071:226;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12416:97;;;;;;;;;;;;;:::i;:::-;;42875:51;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11805:81;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42772:98;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;49185:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31818:98;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33489:167;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;46202:21;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34587:321;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31979:394;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47202:1509;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44974:810;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;33719:186;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;45790:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48807:59;;;:::i;:::-;;12658:191;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43054:963;43237:8;;;;;;;;;;;43215:31;;:10;:31;;;43207:40;;;;;;43362:19;:32;43382:11;43362:32;;;;;;;;;;;;;;;:39;;;;;:::i;:::-;;;43340:11;:18;:61;:143;;;;;43450:19;:32;43470:11;43450:32;;;;;;;;;;;;;;;43440:43;;;;;;:::i;:::-;;;;;;;;43424:11;43414:22;;;;;;:69;43340:143;43324:229;;;;;;;;;;;;:::i;:::-;;;;;;;;;43669:4;:16;;;43686:11;43699;43712:6;43720:8;43669:60;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43665:347;;43854:79;;;;;;;;43879:8;:15;43854:79;;;;43915:8;43905:19;;;;;;43854:79;;;43803:14;:27;43818:11;43803:27;;;;;;;;;;;;;;;43831:11;43803:40;;;;;;:::i;:::-;;;;;;;;;;;;;:48;43844:6;43803:48;;;;;;;;;;;;;:130;;;;;;;;;;;;;;;;;;;43947:57;43961:11;43974;43987:6;43995:8;43947:57;;;;;;;;;:::i;:::-;;;;;;;;43665:347;;;;43054:963;;;;:::o;30706:309::-;30833:4;30878:25;30863:40;;;:11;:40;;;;:99;;;;30929:33;30914:48;;;:11;:48;;;;30863:99;:146;;;;30973:36;30997:11;30973:23;:36::i;:::-;30863:146;30849:160;;30706:309;;;:::o;31663:94::-;31717:13;31746:5;31739:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31663:94;:::o;33186:239::-;33287:7;33314:16;33322:7;33314;:16::i;:::-;33306:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;33395:15;:24;33411:7;33395:24;;;;;;;;;;;;;;;;;;;;;33388:31;;33186:239;;;:::o;32751:377::-;32828:13;32844:23;32859:7;32844:14;:23::i;:::-;32828:39;;32888:5;32882:11;;:2;:11;;;;32874:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;32972:5;32956:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;32981:37;32998:5;33005:12;:10;:12::i;:::-;32981:16;:37::i;:::-;32956:62;32940:152;;;;;;;;;;;;:::i;:::-;;;;;;;;;33101:21;33110:2;33114:7;33101:8;:21::i;:::-;32821:307;32751:377;;:::o;44023:383::-;44239:4;44217:27;;:10;:27;;;44201:104;;;;;;;;;;;;:::i;:::-;;;;;;;;;44346:54;44357:11;44370;44383:6;44391:8;44346:10;:54::i;:::-;44023:383;;;;:::o;33964:332::-;34145:41;34164:12;:10;:12::i;:::-;34178:7;34145:18;:41::i;:::-;34129:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;34262:28;34272:4;34278:2;34282:7;34262:9;:28::i;:::-;33964:332;;;:::o;48925:180::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48983:9:::1;49006:6;;;;;;;;;;;48998:20;;49027:3;48998:38;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48982:54;;;49051:4;49043:56;;;;;;;;;;;;:::i;:::-;;;;;;;;;48975:130;48925:180:::0;:::o;34359:165::-;34479:39;34496:4;34502:2;34506:7;34479:39;;;;;;;;;;;;:16;:39::i;:::-;34359:165;;;:::o;48717:84::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;48792:3:::1;48782:7;:13;;;;;;;;;;;;:::i;:::-;;48717:84:::0;:::o;31351:253::-;31448:7;31467:13;31483:7;:16;31491:7;31483:16;;;;;;;;;;;;;;;;;;;;;31467:32;;31531:1;31514:19;;:5;:19;;;;31506:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31593:5;31586:12;;;31351:253;;;:::o;46700:369::-;46775:1;46763:9;:13;;;46755:67;;;;;;;;;;;;:::i;:::-;;;;;;;;;46872:17;;46859:9;46845:23;;:11;;:23;;;;:::i;:::-;:44;;46829:112;;;;;;;;;;;;:::i;:::-;;;;;;;;;46948:36;46958:10;46972:11;;46970:13;;;;;:::i;:::-;;;;;;;46948:9;:36::i;:::-;47008:1;46995:9;:14;;;46991:73;;;47020:36;47030:10;47044:11;;47042:13;;;;;:::i;:::-;;;;;;;47020:9;:36::i;:::-;46991:73;46700:369;:::o;31071:226::-;31168:7;31212:1;31195:19;;:5;:19;;;;31187:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;31275:9;:16;31285:5;31275:16;;;;;;;;;;;;;;;;31268:23;;31071:226;;;:::o;12416:97::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12477:30:::1;12504:1;12477:18;:30::i;:::-;12416:97::o:0;42875:51::-;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;11805:81::-;11851:7;11874:6;;;;;;;;;;;11867:13;;11805:81;:::o;42772:98::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;49185:122::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;49295:6:::1;49266:26;:35;;;;49185:122:::0;:::o;31818:98::-;31874:13;31903:7;31896:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31818:98;:::o;33489:167::-;33598:52;33617:12;:10;:12::i;:::-;33631:8;33641;33598:18;:52::i;:::-;33489:167;;:::o;46202:21::-;;;;;;;;;;;;;:::o;34587:321::-;34748:41;34767:12;:10;:12::i;:::-;34781:7;34748:18;:41::i;:::-;34732:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;34863:39;34877:4;34883:2;34887:7;34896:5;34863:13;:39::i;:::-;34587:321;;;;:::o;31979:394::-;32077:13;32118:16;32126:7;32118;:16::i;:::-;32102:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;32208:21;32232:10;:8;:10::i;:::-;32208:34;;32287:1;32269:7;32263:21;:25;:104;;;;;;;;;;;;;;;;;32324:7;32333:18;:7;:16;:18::i;:::-;32307:45;;;;;;;;;:::i;:::-;;;;;;;;;;;;;32263:104;32249:118;;;31979:394;;;:::o;47202:1509::-;47312:16;47320:7;47312;:16::i;:::-;47298:30;;:10;:30;;;47282:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;47442:1;47403:19;:29;47423:8;47403:29;;;;;;;;;;;;;;;:36;;;;;:::i;:::-;;;:40;47387:120;;;;;;;;;;;;:::i;:::-;;;;;;;;;47579:14;47585:7;47579:5;:14::i;:::-;47659:20;47693:10;47705:7;47682:31;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47659:54;;47791:14;47808:1;47791:18;;47816:26;47870:7;47886:26;;47845:74;;;;;;;;;:::i;:::-;;;;;;;;;;;;;47816:103;;48062:18;48086:8;;;;;;;;;;;:21;;;48116:8;48141:4;48155:7;48171:5;48185:13;48086:119;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;48061:144;;;48243:10;48230:9;:23;;48214:139;;;;;;;;;;;;:::i;:::-;;;;;;;;;48362:8;;;;;;;;;;;:13;;;48384:9;48404:8;48444:19;:29;48464:8;48444:29;;;;;;;;;;;;;;;48521:7;48571:10;48617:3;48669:13;48362:343;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;47275:1436;;;;47202:1509;;:::o;44974:810::-;45172:32;45207:14;:27;45222:11;45207:27;;;;;;;;;;;;;;;45235:11;45207:40;;;;;;:::i;:::-;;;;;;;;;;;;;:62;45256:6;45207:62;;;;;;;;;;;;;45172:97;;45325:1;45317:10;;45292:9;:21;;;:35;;45276:107;;;;;;;;;;;;:::i;:::-;;;;;;;;;45425:9;:23;;;45406:8;;:15;;:42;:99;;;;;45484:9;:21;;;45471:8;;45461:19;;;;;;;:::i;:::-;;;;;;;;:44;45406:99;45390:159;;;;;;;;;;;;:::i;:::-;;;;;;;;;45615:1;45589:9;:23;;:27;;;;45655:1;45647:10;;45623:9;:21;;:34;;;;45718:4;:16;;;45735:11;45748;45761:6;45769:8;;45718:60;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;45124:660;44974:810;;;;;:::o;33719:186::-;33841:4;33864:18;:25;33883:5;33864:25;;;;;;;;;;;;;;;:35;33890:8;33864:35;;;;;;;;;;;;;;;;;;;;;;;;;33857:42;;33719:186;;;;:::o;45790:165::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;45935:14:::1;;45903:19;:29;45923:8;45903:29;;;;;;;;;;;;;;;:46;;;;;;;:::i;:::-;;45790:165:::0;;;:::o;48807:59::-;:::o;12658:191::-;12018:12;:10;:12::i;:::-;12007:23;;:7;:5;:7::i;:::-;:23;;;11999:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12763:1:::1;12743:22;;:8;:22;;;;12735:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12815:28;12834:8;12815:18;:28::i;:::-;12658:191:::0;:::o;23725:179::-;23835:4;23873:25;23858:40;;;:11;:40;;;;23851:47;;23725:179;;;:::o;36355:121::-;36420:4;36468:1;36440:30;;:7;:16;36448:7;36440:16;;;;;;;;;;;;;;;;;;;;;:30;;;;36433:37;;36355:121;;;:::o;10558:92::-;10611:7;10634:10;10627:17;;10558:92;:::o;40024:164::-;40122:2;40095:15;:24;40111:7;40095:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;40174:7;40170:2;40136:46;;40145:23;40160:7;40145:14;:23::i;:::-;40136:46;;;;;;;;;;;;40024:164;;:::o;49390:372::-;49560:14;49576:15;49614:8;49595:61;;;;;;;;;;;;:::i;:::-;49559:97;;;;49730:26;49740:6;49748:7;49730:9;:26::i;:::-;49537:225;;49390:372;;;;:::o;36627:371::-;36740:4;36764:16;36772:7;36764;:16::i;:::-;36756:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;36836:13;36852:23;36867:7;36852:14;:23::i;:::-;36836:39;;36901:5;36890:16;;:7;:16;;;:58;;;;36941:7;36917:31;;:20;36929:7;36917:11;:20::i;:::-;:31;;;36890:58;:101;;;;36959:32;36976:5;36983:7;36959:16;:32::i;:::-;36890:101;36882:110;;;36627:371;;;;:::o;39371:547::-;39520:4;39493:31;;:23;39508:7;39493:14;:23::i;:::-;:31;;;39477:106;;;;;;;;;;;;:::i;:::-;;;;;;;;;39612:1;39598:16;;:2;:16;;;;39590:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;39664:39;39685:4;39691:2;39695:7;39664:20;:39::i;:::-;39760:29;39777:1;39781:7;39760:8;:29::i;:::-;39817:1;39798:9;:15;39808:4;39798:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;39842:1;39825:9;:13;39835:2;39825:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39869:2;39850:7;:16;39858:7;39850:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39904:7;39900:2;39885:27;;39894:4;39885:27;;;;;;;;;;;;39371:547;;;:::o;37318:104::-;37390:26;37400:2;37404:7;37390:26;;;;;;;;;;;;:9;:26::i;:::-;37318:104;;:::o;12999:177::-;13069:16;13088:6;;;;;;;;;;;13069:25;;13110:8;13101:6;;:17;;;;;;;;;;;;;;;;;;13161:8;13130:40;;13151:8;13130:40;;;;;;;;;;;;13062:114;12999:177;:::o;40318:287::-;40455:8;40446:17;;:5;:17;;;;40438:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;40538:8;40500:18;:25;40519:5;40500:25;;;;;;;;;;;;;;;:35;40526:8;40500:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;40580:8;40558:41;;40573:5;40558:41;;;40590:8;40558:41;;;;;;:::i;:::-;;;;;;;;40318:287;;;:::o;35752:308::-;35887:28;35897:4;35903:2;35907:7;35887:9;:28::i;:::-;35938:48;35961:4;35967:2;35971:7;35980:5;35938:22;:48::i;:::-;35922:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;35752:308;;;;:::o;49768:94::-;49820:13;49849:7;49842:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49768:94;:::o;8298:637::-;8354:13;8572:1;8563:5;:10;8559:43;;;8584:10;;;;;;;;;;;;;;;;;;;;;8559:43;8608:12;8623:5;8608:20;;8635:14;8656:62;8671:1;8663:4;:9;8656:62;;8683:8;;;;;:::i;:::-;;;;8708:2;8700:10;;;;;:::i;:::-;;;8656:62;;;8724:19;8756:6;8746:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;8724:39;;8770:132;8786:1;8777:5;:10;8770:132;;8808:1;8798:11;;;;;:::i;:::-;;;8869:2;8861:5;:10;;;;:::i;:::-;8848:2;:24;;;;:::i;:::-;8835:39;;8818:6;8825;8818:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8892:2;8883:11;;;;;:::i;:::-;;;8770:132;;;8922:6;8908:21;;;;;8298:637;;;;:::o;38728:330::-;38784:13;38800:23;38815:7;38800:14;:23::i;:::-;38784:39;;38832:48;38853:5;38868:1;38872:7;38832:20;:48::i;:::-;38913:29;38930:1;38934:7;38913:8;:29::i;:::-;38971:1;38951:9;:16;38961:5;38951:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;38986:7;:16;38994:7;38986:16;;;;;;;;;;;;38979:23;;;;;;;;;;;39044:7;39040:1;39016:36;;39025:5;39016:36;;;;;;;;;;;;38777:281;38728:330;:::o;42375:112::-;;;;:::o;37639:281::-;37751:18;37757:2;37761:7;37751:5;:18::i;:::-;37792:54;37823:1;37827:2;37831:7;37840:5;37792:22;:54::i;:::-;37776:138;;;;;;;;;;;;:::i;:::-;;;;;;;;;37639:281;;;:::o;41148:685::-;41285:4;41302:15;:2;:13;;;:15::i;:::-;41298:530;;;41357:2;41341:36;;;41378:12;:10;:12::i;:::-;41392:4;41398:7;41407:5;41341:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;41328:459;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41585:1;41568:6;:13;:18;41564:214;;;41601:60;;;;;;;;;;:::i;:::-;;;;;;;;41564:214;41746:6;41740:13;41731:6;41727:2;41723:15;41716:38;41328:459;41473:41;;;41463:51;;;:6;:51;;;;41456:58;;;;;41298:530;41816:4;41809:11;;41148:685;;;;;;;:::o;38230:291::-;38320:1;38306:16;;:2;:16;;;;38298:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38368:45;38397:1;38401:2;38405:7;38368:20;:45::i;:::-;38439:1;38422:9;:13;38432:2;38422:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;38466:2;38447:7;:16;38455:7;38447:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;38507:7;38503:2;38482:33;;38499:1;38482:33;;;;;;;;;;;;38230:291;;:::o;13965:351::-;14025:4;14217:12;14274:7;14262:20;14254:28;;14309:1;14302:4;:8;14295:15;;;13965:351;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;:::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:308::-;9588:4;9678:18;9670:6;9667:30;9664:56;;;9700:18;;:::i;:::-;9664:56;9738:29;9760:6;9738:29;:::i;:::-;9730:37;;9822:4;9816;9812:15;9804:23;;9526:308;;;:::o;9840:412::-;9918:5;9943:66;9959:49;10001:6;9959:49;:::i;:::-;9943:66;:::i;:::-;9934:75;;10032:6;10025:5;10018:21;10070:4;10063:5;10059:16;10108:3;10099:6;10094:3;10090:16;10087:25;10084:112;;;10115:79;;:::i;:::-;10084:112;10205:41;10239:6;10234:3;10229;10205:41;:::i;:::-;9924:328;9840:412;;;;;:::o;10272:340::-;10328:5;10377:3;10370:4;10362:6;10358:17;10354:27;10344:122;;10385:79;;:::i;:::-;10344:122;10502:6;10489:20;10527:79;10602:3;10594:6;10587:4;10579:6;10575:17;10527:79;:::i;:::-;10518:88;;10334:278;10272:340;;;;:::o;10618:509::-;10687:6;10736:2;10724:9;10715:7;10711:23;10707:32;10704:119;;;10742:79;;:::i;:::-;10704:119;10890:1;10879:9;10875:17;10862:31;10920:18;10912:6;10909:30;10906:117;;;10942:79;;:::i;:::-;10906:117;11047:63;11102:7;11093:6;11082:9;11078:22;11047:63;:::i;:::-;11037:73;;10833:287;10618:509;;;;:::o;11133:86::-;11168:7;11208:4;11201:5;11197:16;11186:27;;11133:86;;;:::o;11225:118::-;11296:22;11312:5;11296:22;:::i;:::-;11289:5;11286:33;11276:61;;11333:1;11330;11323:12;11276:61;11225:118;:::o;11349:135::-;11393:5;11431:6;11418:20;11409:29;;11447:31;11472:5;11447:31;:::i;:::-;11349:135;;;;:::o;11490:325::-;11547:6;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:51;11790:7;11781:6;11770:9;11766:22;11747:51;:::i;:::-;11737:61;;11693:115;11490:325;;;;:::o;11821:329::-;11880:6;11929:2;11917:9;11908:7;11904:23;11900:32;11897:119;;;11935:79;;:::i;:::-;11897:119;12055:1;12080:53;12125:7;12116:6;12105:9;12101:22;12080:53;:::i;:::-;12070:63;;12026:117;11821:329;;;;:::o;12156:118::-;12243:24;12261:5;12243:24;:::i;:::-;12238:3;12231:37;12156:118;;:::o;12280:222::-;12373:4;12411:2;12400:9;12396:18;12388:26;;12424:71;12492:1;12481:9;12477:17;12468:6;12424:71;:::i;:::-;12280:222;;;;:::o;12508:327::-;12566:6;12615:2;12603:9;12594:7;12590:23;12586:32;12583:119;;;12621:79;;:::i;:::-;12583:119;12741:1;12766:52;12810:7;12801:6;12790:9;12786:22;12766:52;:::i;:::-;12756:62;;12712:116;12508:327;;;;:::o;12841:98::-;12892:6;12926:5;12920:12;12910:22;;12841:98;;;:::o;12945:168::-;13028:11;13062:6;13057:3;13050:19;13102:4;13097:3;13093:14;13078:29;;12945:168;;;;:::o;13119:360::-;13205:3;13233:38;13265:5;13233:38;:::i;:::-;13287:70;13350:6;13345:3;13287:70;:::i;:::-;13280:77;;13366:52;13411:6;13406:3;13399:4;13392:5;13388:16;13366:52;:::i;:::-;13443:29;13465:6;13443:29;:::i;:::-;13438:3;13434:39;13427:46;;13209:270;13119:360;;;;:::o;13485:309::-;13596:4;13634:2;13623:9;13619:18;13611:26;;13683:9;13677:4;13673:20;13669:1;13658:9;13654:17;13647:47;13711:76;13782:4;13773:6;13711:76;:::i;:::-;13703:84;;13485:309;;;;:::o;13800:795::-;13885:6;13893;13901;13950:2;13938:9;13929:7;13925:23;13921:32;13918:119;;;13956:79;;:::i;:::-;13918:119;14076:1;14101:52;14145:7;14136:6;14125:9;14121:22;14101:52;:::i;:::-;14091:62;;14047:116;14230:2;14219:9;14215:18;14202:32;14261:18;14253:6;14250:30;14247:117;;;14283:79;;:::i;:::-;14247:117;14388:62;14442:7;14433:6;14422:9;14418:22;14388:62;:::i;:::-;14378:72;;14173:287;14499:2;14525:53;14570:7;14561:6;14550:9;14546:22;14525:53;:::i;:::-;14515:63;;14470:118;13800:795;;;;;:::o;14601:77::-;14638:7;14667:5;14656:16;;14601:77;;;:::o;14684:118::-;14771:24;14789:5;14771:24;:::i;:::-;14766:3;14759:37;14684:118;;:::o;14808:332::-;14929:4;14967:2;14956:9;14952:18;14944:26;;14980:71;15048:1;15037:9;15033:17;15024:6;14980:71;:::i;:::-;15061:72;15129:2;15118:9;15114:18;15105:6;15061:72;:::i;:::-;14808:332;;;;;:::o;15146:116::-;15216:21;15231:5;15216:21;:::i;:::-;15209:5;15206:32;15196:60;;15252:1;15249;15242:12;15196:60;15146:116;:::o;15268:133::-;15311:5;15349:6;15336:20;15327:29;;15365:30;15389:5;15365:30;:::i;:::-;15268:133;;;;:::o;15407:468::-;15472:6;15480;15529:2;15517:9;15508:7;15504:23;15500:32;15497:119;;;15535:79;;:::i;:::-;15497:119;15655:1;15680:53;15725:7;15716:6;15705:9;15701:22;15680:53;:::i;:::-;15670:63;;15626:117;15782:2;15808:50;15850:7;15841:6;15830:9;15826:22;15808:50;:::i;:::-;15798:60;;15753:115;15407:468;;;;;:::o;15881:943::-;15976:6;15984;15992;16000;16049:3;16037:9;16028:7;16024:23;16020:33;16017:120;;;16056:79;;:::i;:::-;16017:120;16176:1;16201:53;16246:7;16237:6;16226:9;16222:22;16201:53;:::i;:::-;16191:63;;16147:117;16303:2;16329:53;16374:7;16365:6;16354:9;16350:22;16329:53;:::i;:::-;16319:63;;16274:118;16431:2;16457:53;16502:7;16493:6;16482:9;16478:22;16457:53;:::i;:::-;16447:63;;16402:118;16587:2;16576:9;16572:18;16559:32;16618:18;16610:6;16607:30;16604:117;;;16640:79;;:::i;:::-;16604:117;16745:62;16799:7;16790:6;16779:9;16775:22;16745:62;:::i;:::-;16735:72;;16530:287;15881:943;;;;;;;:::o;16830:472::-;16897:6;16905;16954:2;16942:9;16933:7;16929:23;16925:32;16922:119;;;16960:79;;:::i;:::-;16922:119;17080:1;17105:52;17149:7;17140:6;17129:9;17125:22;17105:52;:::i;:::-;17095:62;;17051:116;17206:2;17232:53;17277:7;17268:6;17257:9;17253:22;17232:53;:::i;:::-;17222:63;;17177:118;16830:472;;;;;:::o;17308:117::-;17417:1;17414;17407:12;17431:117;17540:1;17537;17530:12;17567:552;17624:8;17634:6;17684:3;17677:4;17669:6;17665:17;17661:27;17651:122;;17692:79;;:::i;:::-;17651:122;17805:6;17792:20;17782:30;;17835:18;17827:6;17824:30;17821:117;;;17857:79;;:::i;:::-;17821:117;17971:4;17963:6;17959:17;17947:29;;18025:3;18017:4;18009:6;18005:17;17995:8;17991:32;17988:41;17985:128;;;18032:79;;:::i;:::-;17985:128;17567:552;;;;;:::o;18125:1137::-;18229:6;18237;18245;18253;18261;18310:3;18298:9;18289:7;18285:23;18281:33;18278:120;;;18317:79;;:::i;:::-;18278:120;18437:1;18462:52;18506:7;18497:6;18486:9;18482:22;18462:52;:::i;:::-;18452:62;;18408:116;18591:2;18580:9;18576:18;18563:32;18622:18;18614:6;18611:30;18608:117;;;18644:79;;:::i;:::-;18608:117;18749:62;18803:7;18794:6;18783:9;18779:22;18749:62;:::i;:::-;18739:72;;18534:287;18860:2;18886:52;18930:7;18921:6;18910:9;18906:22;18886:52;:::i;:::-;18876:62;;18831:117;19015:2;19004:9;19000:18;18987:32;19046:18;19038:6;19035:30;19032:117;;;19068:79;;:::i;:::-;19032:117;19181:64;19237:7;19228:6;19217:9;19213:22;19181:64;:::i;:::-;19163:82;;;;18958:297;18125:1137;;;;;;;;:::o;19268:474::-;19336:6;19344;19393:2;19381:9;19372:7;19368:23;19364:32;19361:119;;;19399:79;;:::i;:::-;19361:119;19519:1;19544:53;19589:7;19580:6;19569:9;19565:22;19544:53;:::i;:::-;19534:63;;19490:117;19646:2;19672:53;19717:7;19708:6;19697:9;19693:22;19672:53;:::i;:::-;19662:63;;19617:118;19268:474;;;;;:::o;19748:670::-;19826:6;19834;19842;19891:2;19879:9;19870:7;19866:23;19862:32;19859:119;;;19897:79;;:::i;:::-;19859:119;20017:1;20042:52;20086:7;20077:6;20066:9;20062:22;20042:52;:::i;:::-;20032:62;;19988:116;20171:2;20160:9;20156:18;20143:32;20202:18;20194:6;20191:30;20188:117;;;20224:79;;:::i;:::-;20188:117;20337:64;20393:7;20384:6;20373:9;20369:22;20337:64;:::i;:::-;20319:82;;;;20114:297;19748:670;;;;;:::o;20424:180::-;20472:77;20469:1;20462:88;20569:4;20566:1;20559:15;20593:4;20590:1;20583:15;20610:320;20654:6;20691:1;20685:4;20681:12;20671:22;;20738:1;20732:4;20728:12;20759:18;20749:81;;20815:4;20807:6;20803:17;20793:27;;20749:81;20877:2;20869:6;20866:14;20846:18;20843:38;20840:84;;;20896:18;;:::i;:::-;20840:84;20661:269;20610:320;;;:::o;20936:147::-;21037:11;21074:3;21059:18;;20936:147;;;;:::o;21089:140::-;21137:4;21160:3;21152:11;;21183:3;21180:1;21173:14;21217:4;21214:1;21204:18;21196:26;;21089:140;;;:::o;21257:841::-;21358:3;21395:5;21389:12;21424:36;21450:9;21424:36;:::i;:::-;21476:88;21557:6;21552:3;21476:88;:::i;:::-;21469:95;;21595:1;21584:9;21580:17;21611:1;21606:137;;;;21757:1;21752:340;;;;21573:519;;21606:137;21690:4;21686:9;21675;21671:25;21666:3;21659:38;21726:6;21721:3;21717:16;21710:23;;21606:137;;21752:340;21819:37;21850:5;21819:37;:::i;:::-;21878:1;21892:154;21906:6;21903:1;21900:13;21892:154;;;21980:7;21974:14;21970:1;21965:3;21961:11;21954:35;22030:1;22021:7;22017:15;22006:26;;21928:4;21925:1;21921:12;21916:17;;21892:154;;;22075:6;22070:3;22066:16;22059:23;;21759:333;;21573:519;;21362:736;;21257:841;;;;:::o;22104:265::-;22231:3;22253:90;22339:3;22330:6;22253:90;:::i;:::-;22246:97;;22360:3;22353:10;;22104:265;;;;:::o;22375:239::-;22515:34;22511:1;22503:6;22499:14;22492:58;22584:22;22579:2;22571:6;22567:15;22560:47;22375:239;:::o;22620:366::-;22762:3;22783:67;22847:2;22842:3;22783:67;:::i;:::-;22776:74;;22859:93;22948:3;22859:93;:::i;:::-;22977:2;22972:3;22968:12;22961:19;;22620:366;;;:::o;22992:419::-;23158:4;23196:2;23185:9;23181:18;23173:26;;23245:9;23239:4;23235:20;23231:1;23220:9;23216:17;23209:47;23273:131;23399:4;23273:131;:::i;:::-;23265:139;;22992:419;;;:::o;23417:115::-;23502:23;23519:5;23502:23;:::i;:::-;23497:3;23490:36;23417:115;;:::o;23538:::-;23623:23;23640:5;23623:23;:::i;:::-;23618:3;23611:36;23538:115;;:::o;23659:719::-;23868:4;23906:3;23895:9;23891:19;23883:27;;23920:69;23986:1;23975:9;23971:17;23962:6;23920:69;:::i;:::-;24036:9;24030:4;24026:20;24021:2;24010:9;24006:18;23999:48;24064:76;24135:4;24126:6;24064:76;:::i;:::-;24056:84;;24150:70;24216:2;24205:9;24201:18;24192:6;24150:70;:::i;:::-;24267:9;24261:4;24257:20;24252:2;24241:9;24237:18;24230:48;24295:76;24366:4;24357:6;24295:76;:::i;:::-;24287:84;;23659:719;;;;;;;:::o;24384:373::-;24488:3;24516:38;24548:5;24516:38;:::i;:::-;24570:88;24651:6;24646:3;24570:88;:::i;:::-;24563:95;;24667:52;24712:6;24707:3;24700:4;24693:5;24689:16;24667:52;:::i;:::-;24744:6;24739:3;24735:16;24728:23;;24492:265;24384:373;;;;:::o;24763:271::-;24893:3;24915:93;25004:3;24995:6;24915:93;:::i;:::-;24908:100;;25025:3;25018:10;;24763:271;;;;:::o;25040:231::-;25180:34;25176:1;25168:6;25164:14;25157:58;25249:14;25244:2;25236:6;25232:15;25225:39;25040:231;:::o;25277:366::-;25419:3;25440:67;25504:2;25499:3;25440:67;:::i;:::-;25433:74;;25516:93;25605:3;25516:93;:::i;:::-;25634:2;25629:3;25625:12;25618:19;;25277:366;;;:::o;25649:419::-;25815:4;25853:2;25842:9;25838:18;25830:26;;25902:9;25896:4;25892:20;25888:1;25877:9;25873:17;25866:47;25930:131;26056:4;25930:131;:::i;:::-;25922:139;;25649:419;;;:::o;26074:220::-;26214:34;26210:1;26202:6;26198:14;26191:58;26283:3;26278:2;26270:6;26266:15;26259:28;26074:220;:::o;26300:366::-;26442:3;26463:67;26527:2;26522:3;26463:67;:::i;:::-;26456:74;;26539:93;26628:3;26539:93;:::i;:::-;26657:2;26652:3;26648:12;26641:19;;26300:366;;;:::o;26672:419::-;26838:4;26876:2;26865:9;26861:18;26853:26;;26925:9;26919:4;26915:20;26911:1;26900:9;26896:17;26889:47;26953:131;27079:4;26953:131;:::i;:::-;26945:139;;26672:419;;;:::o;27097:243::-;27237:34;27233:1;27225:6;27221:14;27214:58;27306:26;27301:2;27293:6;27289:15;27282:51;27097:243;:::o;27346:366::-;27488:3;27509:67;27573:2;27568:3;27509:67;:::i;:::-;27502:74;;27585:93;27674:3;27585:93;:::i;:::-;27703:2;27698:3;27694:12;27687:19;;27346:366;;;:::o;27718:419::-;27884:4;27922:2;27911:9;27907:18;27899:26;;27971:9;27965:4;27961:20;27957:1;27946:9;27942:17;27935:47;27999:131;28125:4;27999:131;:::i;:::-;27991:139;;27718:419;;;:::o;28143:230::-;28283:34;28279:1;28271:6;28267:14;28260:58;28352:13;28347:2;28339:6;28335:15;28328:38;28143:230;:::o;28379:366::-;28521:3;28542:67;28606:2;28601:3;28542:67;:::i;:::-;28535:74;;28618:93;28707:3;28618:93;:::i;:::-;28736:2;28731:3;28727:12;28720:19;;28379:366;;;:::o;28751:419::-;28917:4;28955:2;28944:9;28940:18;28932:26;;29004:9;28998:4;28994:20;28990:1;28979:9;28975:17;28968:47;29032:131;29158:4;29032:131;:::i;:::-;29024:139;;28751:419;;;:::o;29176:236::-;29316:34;29312:1;29304:6;29300:14;29293:58;29385:19;29380:2;29372:6;29368:15;29361:44;29176:236;:::o;29418:366::-;29560:3;29581:67;29645:2;29640:3;29581:67;:::i;:::-;29574:74;;29657:93;29746:3;29657:93;:::i;:::-;29775:2;29770:3;29766:12;29759:19;;29418:366;;;:::o;29790:419::-;29956:4;29994:2;29983:9;29979:18;29971:26;;30043:9;30037:4;30033:20;30029:1;30018:9;30014:17;30007:47;30071:131;30197:4;30071:131;:::i;:::-;30063:139;;29790:419;;;:::o;30215:182::-;30355:34;30351:1;30343:6;30339:14;30332:58;30215:182;:::o;30403:366::-;30545:3;30566:67;30630:2;30625:3;30566:67;:::i;:::-;30559:74;;30642:93;30731:3;30642:93;:::i;:::-;30760:2;30755:3;30751:12;30744:19;;30403:366;;;:::o;30775:419::-;30941:4;30979:2;30968:9;30964:18;30956:26;;31028:9;31022:4;31018:20;31014:1;31003:9;30999:17;30992:47;31056:131;31182:4;31056:131;:::i;:::-;31048:139;;30775:419;;;:::o;31200:114::-;;:::o;31320:398::-;31479:3;31500:83;31581:1;31576:3;31500:83;:::i;:::-;31493:90;;31592:93;31681:3;31592:93;:::i;:::-;31710:1;31705:3;31701:11;31694:18;;31320:398;;;:::o;31724:379::-;31908:3;31930:147;32073:3;31930:147;:::i;:::-;31923:154;;32094:3;32087:10;;31724:379;;;:::o;32109:226::-;32249:34;32245:1;32237:6;32233:14;32226:58;32318:9;32313:2;32305:6;32301:15;32294:34;32109:226;:::o;32341:366::-;32483:3;32504:67;32568:2;32563:3;32504:67;:::i;:::-;32497:74;;32580:93;32669:3;32580:93;:::i;:::-;32698:2;32693:3;32689:12;32682:19;;32341:366;;;:::o;32713:419::-;32879:4;32917:2;32906:9;32902:18;32894:26;;32966:9;32960:4;32956:20;32952:1;32941:9;32937:17;32930:47;32994:131;33120:4;32994:131;:::i;:::-;32986:139;;32713:419;;;:::o;33138:228::-;33278:34;33274:1;33266:6;33262:14;33255:58;33347:11;33342:2;33334:6;33330:15;33323:36;33138:228;:::o;33372:366::-;33514:3;33535:67;33599:2;33594:3;33535:67;:::i;:::-;33528:74;;33611:93;33700:3;33611:93;:::i;:::-;33729:2;33724:3;33720:12;33713:19;;33372:366;;;:::o;33744:419::-;33910:4;33948:2;33937:9;33933:18;33925:26;;33997:9;33991:4;33987:20;33983:1;33972:9;33968:17;33961:47;34025:131;34151:4;34025:131;:::i;:::-;34017:139;;33744:419;;;:::o;34169:228::-;34309:34;34305:1;34297:6;34293:14;34286:58;34378:11;34373:2;34365:6;34361:15;34354:36;34169:228;:::o;34403:366::-;34545:3;34566:67;34630:2;34625:3;34566:67;:::i;:::-;34559:74;;34642:93;34731:3;34642:93;:::i;:::-;34760:2;34755:3;34751:12;34744:19;;34403:366;;;:::o;34775:419::-;34941:4;34979:2;34968:9;34964:18;34956:26;;35028:9;35022:4;35018:20;35014:1;35003:9;34999:17;34992:47;35056:131;35182:4;35056:131;:::i;:::-;35048:139;;34775:419;;;:::o;35200:180::-;35248:77;35245:1;35238:88;35345:4;35342:1;35335:15;35369:4;35366:1;35359:15;35386:305;35426:3;35445:20;35463:1;35445:20;:::i;:::-;35440:25;;35479:20;35497:1;35479:20;:::i;:::-;35474:25;;35633:1;35565:66;35561:74;35558:1;35555:81;35552:107;;;35639:18;;:::i;:::-;35552:107;35683:1;35680;35676:9;35669:16;;35386:305;;;;:::o;35697:221::-;35837:34;35833:1;35825:6;35821:14;35814:58;35906:4;35901:2;35893:6;35889:15;35882:29;35697:221;:::o;35924:366::-;36066:3;36087:67;36151:2;36146:3;36087:67;:::i;:::-;36080:74;;36163:93;36252:3;36163:93;:::i;:::-;36281:2;36276:3;36272:12;36265:19;;35924:366;;;:::o;36296:419::-;36462:4;36500:2;36489:9;36485:18;36477:26;;36549:9;36543:4;36539:20;36535:1;36524:9;36520:17;36513:47;36577:131;36703:4;36577:131;:::i;:::-;36569:139;;36296:419;;;:::o;36721:233::-;36760:3;36783:24;36801:5;36783:24;:::i;:::-;36774:33;;36829:66;36822:5;36819:77;36816:103;;;36899:18;;:::i;:::-;36816:103;36946:1;36939:5;36935:13;36928:20;;36721:233;;;:::o;36960:229::-;37100:34;37096:1;37088:6;37084:14;37077:58;37169:12;37164:2;37156:6;37152:15;37145:37;36960:229;:::o;37195:366::-;37337:3;37358:67;37422:2;37417:3;37358:67;:::i;:::-;37351:74;;37434:93;37523:3;37434:93;:::i;:::-;37552:2;37547:3;37543:12;37536:19;;37195:366;;;:::o;37567:419::-;37733:4;37771:2;37760:9;37756:18;37748:26;;37820:9;37814:4;37810:20;37806:1;37795:9;37791:17;37784:47;37848:131;37974:4;37848:131;:::i;:::-;37840:139;;37567:419;;;:::o;37992:234::-;38132:34;38128:1;38120:6;38116:14;38109:58;38201:17;38196:2;38188:6;38184:15;38177:42;37992:234;:::o;38232:366::-;38374:3;38395:67;38459:2;38454:3;38395:67;:::i;:::-;38388:74;;38471:93;38560:3;38471:93;:::i;:::-;38589:2;38584:3;38580:12;38573:19;;38232:366;;;:::o;38604:419::-;38770:4;38808:2;38797:9;38793:18;38785:26;;38857:9;38851:4;38847:20;38843:1;38832:9;38828:17;38821:47;38885:131;39011:4;38885:131;:::i;:::-;38877:139;;38604:419;;;:::o;39029:148::-;39131:11;39168:3;39153:18;;39029:148;;;;:::o;39183:377::-;39289:3;39317:39;39350:5;39317:39;:::i;:::-;39372:89;39454:6;39449:3;39372:89;:::i;:::-;39365:96;;39470:52;39515:6;39510:3;39503:4;39496:5;39492:16;39470:52;:::i;:::-;39547:6;39542:3;39538:16;39531:23;;39293:267;39183:377;;;;:::o;39566:435::-;39746:3;39768:95;39859:3;39850:6;39768:95;:::i;:::-;39761:102;;39880:95;39971:3;39962:6;39880:95;:::i;:::-;39873:102;;39992:3;39985:10;;39566:435;;;;;:::o;40007:221::-;40147:34;40143:1;40135:6;40131:14;40124:58;40216:4;40211:2;40203:6;40199:15;40192:29;40007:221;:::o;40234:366::-;40376:3;40397:67;40461:2;40456:3;40397:67;:::i;:::-;40390:74;;40473:93;40562:3;40473:93;:::i;:::-;40591:2;40586:3;40582:12;40575:19;;40234:366;;;:::o;40606:419::-;40772:4;40810:2;40799:9;40795:18;40787:26;;40859:9;40853:4;40849:20;40845:1;40834:9;40830:17;40823:47;40887:131;41013:4;40887:131;:::i;:::-;40879:139;;40606:419;;;:::o;41031:233::-;41171:34;41167:1;41159:6;41155:14;41148:58;41240:16;41235:2;41227:6;41223:15;41216:41;41031:233;:::o;41270:366::-;41412:3;41433:67;41497:2;41492:3;41433:67;:::i;:::-;41426:74;;41509:93;41598:3;41509:93;:::i;:::-;41627:2;41622:3;41618:12;41611:19;;41270:366;;;:::o;41642:419::-;41808:4;41846:2;41835:9;41831:18;41823:26;;41895:9;41889:4;41885:20;41881:1;41870:9;41866:17;41859:47;41923:131;42049:4;41923:131;:::i;:::-;41915:139;;41642:419;;;:::o;42067:332::-;42188:4;42226:2;42215:9;42211:18;42203:26;;42239:71;42307:1;42296:9;42292:17;42283:6;42239:71;:::i;:::-;42320:72;42388:2;42377:9;42373:18;42364:6;42320:72;:::i;:::-;42067:332;;;;;:::o;42405:96::-;42439:8;42488:5;42483:3;42479:15;42458:36;;42405:96;;;:::o;42507:94::-;42545:7;42574:21;42589:5;42574:21;:::i;:::-;42563:32;;42507:94;;;:::o;42607:153::-;42710:43;42729:23;42746:5;42729:23;:::i;:::-;42710:43;:::i;:::-;42705:3;42698:56;42607:153;;:::o;42766:79::-;42805:7;42834:5;42823:16;;42766:79;;;:::o;42851:157::-;42956:45;42976:24;42994:5;42976:24;:::i;:::-;42956:45;:::i;:::-;42951:3;42944:58;42851:157;;:::o;43014:392::-;43152:3;43167:73;43236:3;43227:6;43167:73;:::i;:::-;43265:1;43260:3;43256:11;43249:18;;43277:75;43348:3;43339:6;43277:75;:::i;:::-;43377:2;43372:3;43368:12;43361:19;;43397:3;43390:10;;43014:392;;;;;:::o;43412:822::-;43645:4;43683:3;43672:9;43668:19;43660:27;;43697:69;43763:1;43752:9;43748:17;43739:6;43697:69;:::i;:::-;43776:72;43844:2;43833:9;43829:18;43820:6;43776:72;:::i;:::-;43895:9;43889:4;43885:20;43880:2;43869:9;43865:18;43858:48;43923:76;43994:4;43985:6;43923:76;:::i;:::-;43915:84;;44009:66;44071:2;44060:9;44056:18;44047:6;44009:66;:::i;:::-;44123:9;44117:4;44113:20;44107:3;44096:9;44092:19;44085:49;44151:76;44222:4;44213:6;44151:76;:::i;:::-;44143:84;;43412:822;;;;;;;;:::o;44240:143::-;44297:5;44328:6;44322:13;44313:22;;44344:33;44371:5;44344:33;:::i;:::-;44240:143;;;;:::o;44389:507::-;44468:6;44476;44525:2;44513:9;44504:7;44500:23;44496:32;44493:119;;;44531:79;;:::i;:::-;44493:119;44651:1;44676:64;44732:7;44723:6;44712:9;44708:22;44676:64;:::i;:::-;44666:74;;44622:128;44789:2;44815:64;44871:7;44862:6;44851:9;44847:22;44815:64;:::i;:::-;44805:74;;44760:129;44389:507;;;;;:::o;44902:306::-;45042:34;45038:1;45030:6;45026:14;45019:58;45111:34;45106:2;45098:6;45094:15;45087:59;45180:20;45175:2;45167:6;45163:15;45156:45;44902:306;:::o;45214:366::-;45356:3;45377:67;45441:2;45436:3;45377:67;:::i;:::-;45370:74;;45453:93;45542:3;45453:93;:::i;:::-;45571:2;45566:3;45562:12;45555:19;;45214:366;;;:::o;45586:419::-;45752:4;45790:2;45779:9;45775:18;45767:26;;45839:9;45833:4;45829:20;45825:1;45814:9;45810:17;45803:47;45867:131;45993:4;45867:131;:::i;:::-;45859:139;;45586:419;;;:::o;46033:798::-;46116:3;46153:5;46147:12;46182:36;46208:9;46182:36;:::i;:::-;46234:70;46297:6;46292:3;46234:70;:::i;:::-;46227:77;;46335:1;46324:9;46320:17;46351:1;46346:135;;;;46495:1;46490:335;;;;46313:512;;46346:135;46430:4;46426:9;46415;46411:25;46406:3;46399:38;46466:4;46461:3;46457:14;46450:21;;46346:135;;46490:335;46557:37;46588:5;46557:37;:::i;:::-;46616:1;46630:154;46644:6;46641:1;46638:13;46630:154;;;46718:7;46712:14;46708:1;46703:3;46699:11;46692:35;46768:1;46759:7;46755:15;46744:26;;46666:4;46663:1;46659:12;46654:17;;46630:154;;;46813:1;46808:3;46804:11;46797:18;;46497:328;;46313:512;;46120:711;;46033:798;;;;:::o;46837:104::-;46882:7;46911:24;46929:5;46911:24;:::i;:::-;46900:35;;46837:104;;;:::o;46947:142::-;47050:32;47076:5;47050:32;:::i;:::-;47045:3;47038:45;46947:142;;:::o;47095:1058::-;47393:4;47431:3;47420:9;47416:19;47408:27;;47445:69;47511:1;47500:9;47496:17;47487:6;47445:69;:::i;:::-;47561:9;47555:4;47551:20;47546:2;47535:9;47531:18;47524:48;47589:73;47657:4;47648:6;47589:73;:::i;:::-;47581:81;;47709:9;47703:4;47699:20;47694:2;47683:9;47679:18;47672:48;47737:76;47808:4;47799:6;47737:76;:::i;:::-;47729:84;;47823:88;47907:2;47896:9;47892:18;47883:6;47823:88;:::i;:::-;47921:73;47989:3;47978:9;47974:19;47965:6;47921:73;:::i;:::-;48042:9;48036:4;48032:20;48026:3;48015:9;48011:19;48004:49;48070:76;48141:4;48132:6;48070:76;:::i;:::-;48062:84;;47095:1058;;;;;;;;;:::o;48159:225::-;48299:34;48295:1;48287:6;48283:14;48276:58;48368:8;48363:2;48355:6;48351:15;48344:33;48159:225;:::o;48390:366::-;48532:3;48553:67;48617:2;48612:3;48553:67;:::i;:::-;48546:74;;48629:93;48718:3;48629:93;:::i;:::-;48747:2;48742:3;48738:12;48731:19;;48390:366;;;:::o;48762:419::-;48928:4;48966:2;48955:9;48951:18;48943:26;;49015:9;49009:4;49005:20;49001:1;48990:9;48986:17;48979:47;49043:131;49169:4;49043:131;:::i;:::-;49035:139;;48762:419;;;:::o;49209:314::-;49323:3;49344:88;49425:6;49420:3;49344:88;:::i;:::-;49337:95;;49442:43;49478:6;49473:3;49466:5;49442:43;:::i;:::-;49510:6;49505:3;49501:16;49494:23;;49209:314;;;;;:::o;49529:291::-;49669:3;49691:103;49790:3;49781:6;49773;49691:103;:::i;:::-;49684:110;;49811:3;49804:10;;49529:291;;;;;:::o;49826:176::-;49966:28;49962:1;49954:6;49950:14;49943:52;49826:176;:::o;50008:366::-;50150:3;50171:67;50235:2;50230:3;50171:67;:::i;:::-;50164:74;;50247:93;50336:3;50247:93;:::i;:::-;50365:2;50360:3;50356:12;50349:19;;50008:366;;;:::o;50380:419::-;50546:4;50584:2;50573:9;50569:18;50561:26;;50633:9;50627:4;50623:20;50619:1;50608:9;50604:17;50597:47;50661:131;50787:4;50661:131;:::i;:::-;50653:139;;50380:419;;;:::o;50827:301::-;50923:3;50944:70;51007:6;51002:3;50944:70;:::i;:::-;50937:77;;51024:43;51060:6;51055:3;51048:5;51024:43;:::i;:::-;51092:29;51114:6;51092:29;:::i;:::-;51087:3;51083:39;51076:46;;50827:301;;;;;:::o;51134:739::-;51353:4;51391:3;51380:9;51376:19;51368:27;;51405:69;51471:1;51460:9;51456:17;51447:6;51405:69;:::i;:::-;51521:9;51515:4;51511:20;51506:2;51495:9;51491:18;51484:48;51549:76;51620:4;51611:6;51549:76;:::i;:::-;51541:84;;51635:70;51701:2;51690:9;51686:18;51677:6;51635:70;:::i;:::-;51752:9;51746:4;51742:20;51737:2;51726:9;51722:18;51715:48;51780:86;51861:4;51852:6;51844;51780:86;:::i;:::-;51772:94;;51134:739;;;;;;;;:::o;51879:225::-;52019:34;52015:1;52007:6;52003:14;51996:58;52088:8;52083:2;52075:6;52071:15;52064:33;51879:225;:::o;52110:366::-;52252:3;52273:67;52337:2;52332:3;52273:67;:::i;:::-;52266:74;;52349:93;52438:3;52349:93;:::i;:::-;52467:2;52462:3;52458:12;52451:19;;52110:366;;;:::o;52482:419::-;52648:4;52686:2;52675:9;52671:18;52663:26;;52735:9;52729:4;52725:20;52721:1;52710:9;52706:17;52699:47;52763:131;52889:4;52763:131;:::i;:::-;52755:139;;52482:419;;;:::o;52907:138::-;52988:32;53014:5;52988:32;:::i;:::-;52981:5;52978:43;52968:71;;53035:1;53032;53025:12;52968:71;52907:138;:::o;53051:159::-;53116:5;53147:6;53141:13;53132:22;;53163:41;53198:5;53163:41;:::i;:::-;53051:159;;;;:::o;53216:523::-;53303:6;53311;53360:2;53348:9;53339:7;53335:23;53331:32;53328:119;;;53366:79;;:::i;:::-;53328:119;53486:1;53511:72;53575:7;53566:6;53555:9;53551:22;53511:72;:::i;:::-;53501:82;;53457:136;53632:2;53658:64;53714:7;53705:6;53694:9;53690:22;53658:64;:::i;:::-;53648:74;;53603:129;53216:523;;;;;:::o;53745:231::-;53885:34;53881:1;53873:6;53869:14;53862:58;53954:14;53949:2;53941:6;53937:15;53930:39;53745:231;:::o;53982:366::-;54124:3;54145:67;54209:2;54204:3;54145:67;:::i;:::-;54138:74;;54221:93;54310:3;54221:93;:::i;:::-;54339:2;54334:3;54330:12;54323:19;;53982:366;;;:::o;54354:419::-;54520:4;54558:2;54547:9;54543:18;54535:26;;54607:9;54601:4;54597:20;54593:1;54582:9;54578:17;54571:47;54635:131;54761:4;54635:131;:::i;:::-;54627:139;;54354:419;;;:::o;54779:228::-;54919:34;54915:1;54907:6;54903:14;54896:58;54988:11;54983:2;54975:6;54971:15;54964:36;54779:228;:::o;55013:366::-;55155:3;55176:67;55240:2;55235:3;55176:67;:::i;:::-;55169:74;;55252:93;55341:3;55252:93;:::i;:::-;55370:2;55365:3;55361:12;55354:19;;55013:366;;;:::o;55385:419::-;55551:4;55589:2;55578:9;55574:18;55566:26;;55638:9;55632:4;55628:20;55624:1;55613:9;55609:17;55602:47;55666:131;55792:4;55666:131;:::i;:::-;55658:139;;55385:419;;;:::o;55810:223::-;55950:34;55946:1;55938:6;55934:14;55927:58;56019:6;56014:2;56006:6;56002:15;55995:31;55810:223;:::o;56039:366::-;56181:3;56202:67;56266:2;56261:3;56202:67;:::i;:::-;56195:74;;56278:93;56367:3;56278:93;:::i;:::-;56396:2;56391:3;56387:12;56380:19;;56039:366;;;:::o;56411:419::-;56577:4;56615:2;56604:9;56600:18;56592:26;;56664:9;56658:4;56654:20;56650:1;56639:9;56635:17;56628:47;56692:131;56818:4;56692:131;:::i;:::-;56684:139;;56411:419;;;:::o;56836:191::-;56876:4;56896:20;56914:1;56896:20;:::i;:::-;56891:25;;56930:20;56948:1;56930:20;:::i;:::-;56925:25;;56969:1;56966;56963:8;56960:34;;;56974:18;;:::i;:::-;56960:34;57019:1;57016;57012:9;57004:17;;56836:191;;;;:::o;57033:175::-;57173:27;57169:1;57161:6;57157:14;57150:51;57033:175;:::o;57214:366::-;57356:3;57377:67;57441:2;57436:3;57377:67;:::i;:::-;57370:74;;57453:93;57542:3;57453:93;:::i;:::-;57571:2;57566:3;57562:12;57555:19;;57214:366;;;:::o;57586:419::-;57752:4;57790:2;57779:9;57775:18;57767:26;;57839:9;57833:4;57829:20;57825:1;57814:9;57810:17;57803:47;57867:131;57993:4;57867:131;:::i;:::-;57859:139;;57586:419;;;:::o;58011:237::-;58151:34;58147:1;58139:6;58135:14;58128:58;58220:20;58215:2;58207:6;58203:15;58196:45;58011:237;:::o;58254:366::-;58396:3;58417:67;58481:2;58476:3;58417:67;:::i;:::-;58410:74;;58493:93;58582:3;58493:93;:::i;:::-;58611:2;58606:3;58602:12;58595:19;;58254:366;;;:::o;58626:419::-;58792:4;58830:2;58819:9;58815:18;58807:26;;58879:9;58873:4;58869:20;58865:1;58854:9;58850:17;58843:47;58907:131;59033:4;58907:131;:::i;:::-;58899:139;;58626:419;;;:::o;59051:180::-;59099:77;59096:1;59089:88;59196:4;59193:1;59186:15;59220:4;59217:1;59210:15;59237:185;59277:1;59294:20;59312:1;59294:20;:::i;:::-;59289:25;;59328:20;59346:1;59328:20;:::i;:::-;59323:25;;59367:1;59357:35;;59372:18;;:::i;:::-;59357:35;59414:1;59411;59407:9;59402:14;;59237:185;;;;:::o;59428:176::-;59460:1;59477:20;59495:1;59477:20;:::i;:::-;59472:25;;59511:20;59529:1;59511:20;:::i;:::-;59506:25;;59550:1;59540:35;;59555:18;;:::i;:::-;59540:35;59596:1;59593;59589:9;59584:14;;59428:176;;;;:::o;59610:180::-;59658:77;59655:1;59648:88;59755:4;59752:1;59745:15;59779:4;59776:1;59769:15;59796:640;59991:4;60029:3;60018:9;60014:19;60006:27;;60043:71;60111:1;60100:9;60096:17;60087:6;60043:71;:::i;:::-;60124:72;60192:2;60181:9;60177:18;60168:6;60124:72;:::i;:::-;60206;60274:2;60263:9;60259:18;60250:6;60206:72;:::i;:::-;60325:9;60319:4;60315:20;60310:2;60299:9;60295:18;60288:48;60353:76;60424:4;60415:6;60353:76;:::i;:::-;60345:84;;59796:640;;;;;;;:::o;60442:141::-;60498:5;60529:6;60523:13;60514:22;;60545:32;60571:5;60545:32;:::i;:::-;60442:141;;;;:::o;60589:349::-;60658:6;60707:2;60695:9;60686:7;60682:23;60678:32;60675:119;;;60713:79;;:::i;:::-;60675:119;60833:1;60858:63;60913:7;60904:6;60893:9;60889:22;60858:63;:::i;:::-;60848:73;;60804:127;60589:349;;;;:::o;60944:182::-;61084:34;61080:1;61072:6;61068:14;61061:58;60944:182;:::o;61132:366::-;61274:3;61295:67;61359:2;61354:3;61295:67;:::i;:::-;61288:74;;61371:93;61460:3;61371:93;:::i;:::-;61489:2;61484:3;61480:12;61473:19;;61132:366;;;:::o;61504:419::-;61670:4;61708:2;61697:9;61693:18;61685:26;;61757:9;61751:4;61747:20;61743:1;61732:9;61728:17;61721:47;61785:131;61911:4;61785:131;:::i;:::-;61777:139;;61504:419;;;:::o
Swarm Source
ipfs://be9c579fad7b558e030ac8f8db8ace3ed8d6c76bdbf1023f0afff7b7693d11b7
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.