Token NFTRoyale
Overview ERC-721
Total Supply:
11 NFTRYL
Holders:
2 addresses
Profile Summary
Contract:
Balance
10 NFTRYL
[ Download CSV Export ]
[ Download CSV Export ]
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
NFTRoyale
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-23 */ // File: @openzeppelin/contracts/utils/cryptography/MerkleProof.sol // OpenZeppelin Contracts (last updated v4.5.0) (utils/cryptography/MerkleProof.sol) pragma solidity ^0.8.0; /** * @dev These functions deal with verification of Merkle Trees proofs. * * The proofs can be generated using the JavaScript library * https://github.com/miguelmota/merkletreejs[merkletreejs]. * Note: the hashing algorithm should be keccak256 and pair sorting should be enabled. * * See `test/utils/cryptography/MerkleProof.test.js` for some examples. */ library MerkleProof { /** * @dev Returns true if a `leaf` can be proved to be a part of a Merkle tree * defined by `root`. For this, a `proof` must be provided, containing * sibling hashes on the branch from the leaf to the root of the tree. Each * pair of leaves and each pair of pre-images are assumed to be sorted. */ function verify( bytes32[] memory proof, bytes32 root, bytes32 leaf ) internal pure returns (bool) { return processProof(proof, leaf) == root; } /** * @dev Returns the rebuilt hash obtained by traversing a Merklee tree up * from `leaf` using `proof`. A `proof` is valid if and only if the rebuilt * hash matches the root of the tree. When processing the proof, the pairs * of leafs & pre-images are assumed to be sorted. * * _Available since v4.4._ */ function processProof(bytes32[] memory proof, bytes32 leaf) internal pure returns (bytes32) { bytes32 computedHash = leaf; for (uint256 i = 0; i < proof.length; i++) { bytes32 proofElement = proof[i]; if (computedHash <= proofElement) { // Hash(current computed hash + current element of the proof) computedHash = _efficientHash(computedHash, proofElement); } else { // Hash(current element of the proof + current computed hash) computedHash = _efficientHash(proofElement, computedHash); } } return computedHash; } function _efficientHash(bytes32 a, bytes32 b) private pure returns (bytes32 value) { assembly { mstore(0x00, a) mstore(0x20, b) value := keccak256(0x00, 0x40) } } } // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @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 (last updated v4.5.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); _afterTokenTransfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); _afterTokenTransfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer from incorrect owner"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); _afterTokenTransfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} /** * @dev Hook that is called after any transfer of tokens. This includes * minting and burning. * * Calling conditions: * * - when `from` and `to` are both non-zero. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: HuntRoyale.sol pragma solidity >=0.7.0 <0.9.0; contract NFTRoyale is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; mapping (address => uint) hunterCounts; bytes32 constant merkleRoot = 0xa81682d80bb19f95b0f54b6763d7a4f3cbe9964f7d37527abde729429d34180b; string public uriPrefix = "https://api.nftroyale.com/h/"; string public uriSuffix = ""; uint256 constant cost = 0.1 ether; uint256 constant maxSupply = 10000; uint256 constant maxMintAmountPerTx = 10; uint256 constant maxMintAmountPerWallet = 10; bool public isWhitelistMintActive = false; bool public isPublicMintActive = false; constructor() ERC721("NFTRoyale", "NFTRYL") {} modifier onlyOrigin () { require(msg.sender == tx.origin, "Contract calls are not allowed"); _; } modifier mintCompliance(uint256 _mintAmount) { require(_mintAmount > 0 && _mintAmount <= maxMintAmountPerTx, "Invalid mint amount!"); require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function publicSaleMintHunter(uint256 _mintAmount) external payable mintCompliance(_mintAmount) onlyOrigin { require(isPublicMintActive, "Public mint is not active!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(hunterCounts[msg.sender] + _mintAmount <= maxMintAmountPerWallet, "Exceeds mint amount per wallet!"); hunterCounts[msg.sender] += _mintAmount; _mintLoop(msg.sender, _mintAmount); } function preSaleMintHunter(uint256 _mintAmount, bytes32[] calldata proof) external payable mintCompliance(_mintAmount) onlyOrigin { require(isWhitelistMintActive, "Whitelist mint is not active!"); require(msg.value >= cost * _mintAmount, "Insufficient funds!"); require(hunterCounts[msg.sender] + _mintAmount <= maxMintAmountPerWallet, "Exceeds mint amount per wallet!"); require(MerkleProof.verify(proof, merkleRoot, keccak256(abi.encodePacked(msg.sender))), "You are not whitelisted!"); hunterCounts[msg.sender] += _mintAmount; _mintLoop(msg.sender, _mintAmount); } function studioMint(uint256 _mintAmount) external onlyOwner { _mintLoop(msg.sender, _mintAmount); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); _safeMint(_receiver, supply.current()); } } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require(_exists(_tokenId), "Non-existent hunter token given!"); string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } function totalSupply() external view returns (uint256) { return supply.current(); } function setUriPrefix(string memory _uriPrefix) external onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) external onlyOwner { uriSuffix = _uriSuffix; } function setIsWhitelistMintActive(bool _state) external onlyOwner { isWhitelistMintActive = _state; } function setIsPublicMintActive(bool _state) external onlyOwner { isPublicMintActive = _state; } function withdrawAll() external onlyOwner { uint256 balance = address(this).balance; require(balance > 0); _withdraw(payable(0xC13109635A71D00A8701F1607105B3ca476dFE39), (balance * 100) / 100); _withdraw(owner(), address(this).balance); } function _withdraw(address _address, uint256 _amount) private { (bool success, ) = _address.call{value: _amount}(""); require(success, "Transfer failed."); } }
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isPublicMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"isWhitelistMintActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"bytes32[]","name":"proof","type":"bytes32[]"}],"name":"preSaleMintHunter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"publicSaleMintHunter","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsPublicMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setIsWhitelistMintActive","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"studioMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"uriPrefix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"uriSuffix","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawAll","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280601c81526020017f68747470733a2f2f6170692e6e6674726f79616c652e636f6d2f682f00000000815250600990805190602001906200005192919062000252565b5060405180602001604052806000815250600a90805190602001906200007992919062000252565b506000600b60006101000a81548160ff0219169083151502179055506000600b60016101000a81548160ff021916908315150217905550348015620000bd57600080fd5b506040518060400160405280600981526020017f4e4654526f79616c6500000000000000000000000000000000000000000000008152506040518060400160405280600681526020017f4e465452594c000000000000000000000000000000000000000000000000000081525081600090805190602001906200014292919062000252565b5080600190805190602001906200015b92919062000252565b5050506200017e620001726200018460201b60201c565b6200018c60201b60201c565b62000367565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002609062000302565b90600052602060002090601f016020900481019282620002845760008555620002d0565b82601f106200029f57805160ff1916838001178555620002d0565b82800160010185558215620002d0579182015b82811115620002cf578251825591602001919060010190620002b2565b5b509050620002df9190620002e3565b5090565b5b80821115620002fe576000816000905550600101620002e4565b5090565b600060028204905060018216806200031b57607f821691505b6020821081141562000332576200033162000338565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b6143c080620003776000396000f3fe6080604052600436106101c25760003560e01c806370a08231116100f7578063ae55b5f411610095578063e4ad183811610064578063e4ad1838146105fc578063e985e9c514610625578063f2fde38b14610662578063fabd1d2d1461068b576101c2565b8063ae55b5f414610551578063b88d4fde1461057a578063c10e2a4e146105a3578063c87b56dd146105bf576101c2565b8063853828b6116100d1578063853828b6146104bb5780638da5cb5b146104d257806395d89b41146104fd578063a22cb46514610528576101c2565b806370a082311461043e578063715018a61461047b5780637ec4a65914610492576101c2565b806323f631231161016457806342842e0e1161013e57806342842e0e146103825780635503a0e8146103ab57806362b99ad4146103d65780636352211e14610401576101c2565b806323f6312314610312578063246f167b1461033b5780632d6b622414610357576101c2565b8063095ea7b3116101a0578063095ea7b31461026c57806316ba10e01461029557806318160ddd146102be57806323b872dd146102e9576101c2565b806301ffc9a7146101c757806306fdde0314610204578063081812fc1461022f575b600080fd5b3480156101d357600080fd5b506101ee60048036038101906101e99190612e47565b6106b6565b6040516101fb9190613533565b60405180910390f35b34801561021057600080fd5b50610219610798565b604051610226919061354e565b60405180910390f35b34801561023b57600080fd5b5061025660048036038101906102519190612eea565b61082a565b60405161026391906134cc565b60405180910390f35b34801561027857600080fd5b50610293600480360381019061028e9190612dda565b6108af565b005b3480156102a157600080fd5b506102bc60048036038101906102b79190612ea1565b6109c7565b005b3480156102ca57600080fd5b506102d3610a5d565b6040516102e09190613890565b60405180910390f35b3480156102f557600080fd5b50610310600480360381019061030b9190612cc4565b610a6e565b005b34801561031e57600080fd5b5061033960048036038101906103349190612e1a565b610ace565b005b61035560048036038101906103509190612eea565b610b67565b005b34801561036357600080fd5b5061036c610e16565b6040516103799190613533565b60405180910390f35b34801561038e57600080fd5b506103a960048036038101906103a49190612cc4565b610e29565b005b3480156103b757600080fd5b506103c0610e49565b6040516103cd919061354e565b60405180910390f35b3480156103e257600080fd5b506103eb610ed7565b6040516103f8919061354e565b60405180910390f35b34801561040d57600080fd5b5061042860048036038101906104239190612eea565b610f65565b60405161043591906134cc565b60405180910390f35b34801561044a57600080fd5b5061046560048036038101906104609190612c57565b611017565b6040516104729190613890565b60405180910390f35b34801561048757600080fd5b506104906110cf565b005b34801561049e57600080fd5b506104b960048036038101906104b49190612ea1565b611157565b005b3480156104c757600080fd5b506104d06111ed565b005b3480156104de57600080fd5b506104e76112c4565b6040516104f491906134cc565b60405180910390f35b34801561050957600080fd5b506105126112ee565b60405161051f919061354e565b60405180910390f35b34801561053457600080fd5b5061054f600480360381019061054a9190612d9a565b611380565b005b34801561055d57600080fd5b5061057860048036038101906105739190612eea565b611396565b005b34801561058657600080fd5b506105a1600480360381019061059c9190612d17565b61141f565b005b6105bd60048036038101906105b89190612f17565b611481565b005b3480156105cb57600080fd5b506105e660048036038101906105e19190612eea565b611806565b6040516105f3919061354e565b60405180910390f35b34801561060857600080fd5b50610623600480360381019061061e9190612e1a565b6118b0565b005b34801561063157600080fd5b5061064c60048036038101906106479190612c84565b611949565b6040516106599190613533565b60405180910390f35b34801561066e57600080fd5b5061068960048036038101906106849190612c57565b6119dd565b005b34801561069757600080fd5b506106a0611ad5565b6040516106ad9190613533565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061078157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610791575061079082611ae8565b5b9050919050565b6060600080546107a790613b60565b80601f01602080910402602001604051908101604052809291908181526020018280546107d390613b60565b80156108205780601f106107f557610100808354040283529160200191610820565b820191906000526020600020905b81548152906001019060200180831161080357829003601f168201915b5050505050905090565b600061083582611b52565b610874576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161086b90613750565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60006108ba82610f65565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561092b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610922906137b0565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff1661094a611bbe565b73ffffffffffffffffffffffffffffffffffffffff161480610979575061097881610973611bbe565b611949565b5b6109b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109af906136d0565b60405180910390fd5b6109c28383611bc6565b505050565b6109cf611bbe565b73ffffffffffffffffffffffffffffffffffffffff166109ed6112c4565b73ffffffffffffffffffffffffffffffffffffffff1614610a43576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610a3a90613770565b60405180910390fd5b80600a9080519060200190610a59929190612a15565b5050565b6000610a696007611c7f565b905090565b610a7f610a79611bbe565b82611c8d565b610abe576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ab590613810565b60405180910390fd5b610ac9838383611d6b565b505050565b610ad6611bbe565b73ffffffffffffffffffffffffffffffffffffffff16610af46112c4565b73ffffffffffffffffffffffffffffffffffffffff1614610b4a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b4190613770565b60405180910390fd5b80600b60006101000a81548160ff02191690831515021790555050565b80600081118015610b795750600a8111155b610bb8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610baf906135f0565b60405180910390fd5b61271081610bc66007611c7f565b610bd09190613995565b1115610c11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c08906137d0565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614610c7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c7690613850565b60405180910390fd5b600b60019054906101000a900460ff16610cce576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc590613670565b60405180910390fd5b8167016345785d8a0000610ce29190613a1c565b341015610d24576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d1b90613870565b60405180910390fd5b600a82600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054610d719190613995565b1115610db2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610da990613790565b60405180910390fd5b81600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e019190613995565b92505081905550610e123383611fd2565b5050565b600b60019054906101000a900460ff1681565b610e448383836040518060200160405280600081525061141f565b505050565b600a8054610e5690613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054610e8290613b60565b8015610ecf5780601f10610ea457610100808354040283529160200191610ecf565b820191906000526020600020905b815481529060010190602001808311610eb257829003601f168201915b505050505081565b60098054610ee490613b60565b80601f0160208091040260200160405190810160405280929190818152602001828054610f1090613b60565b8015610f5d5780601f10610f3257610100808354040283529160200191610f5d565b820191906000526020600020905b815481529060010190602001808311610f4057829003601f168201915b505050505081565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561100e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161100590613710565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611088576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161107f906136f0565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6110d7611bbe565b73ffffffffffffffffffffffffffffffffffffffff166110f56112c4565b73ffffffffffffffffffffffffffffffffffffffff161461114b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161114290613770565b60405180910390fd5b6111556000612012565b565b61115f611bbe565b73ffffffffffffffffffffffffffffffffffffffff1661117d6112c4565b73ffffffffffffffffffffffffffffffffffffffff16146111d3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ca90613770565b60405180910390fd5b80600990805190602001906111e9929190612a15565b5050565b6111f5611bbe565b73ffffffffffffffffffffffffffffffffffffffff166112136112c4565b73ffffffffffffffffffffffffffffffffffffffff1614611269576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161126090613770565b60405180910390fd5b60004790506000811161127b57600080fd5b6112b073c13109635a71d00a8701f1607105b3ca476dfe39606480846112a19190613a1c565b6112ab91906139eb565b6120d8565b6112c16112bb6112c4565b476120d8565b50565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6060600180546112fd90613b60565b80601f016020809104026020016040519081016040528092919081815260200182805461132990613b60565b80156113765780601f1061134b57610100808354040283529160200191611376565b820191906000526020600020905b81548152906001019060200180831161135957829003601f168201915b5050505050905090565b61139261138b611bbe565b8383612189565b5050565b61139e611bbe565b73ffffffffffffffffffffffffffffffffffffffff166113bc6112c4565b73ffffffffffffffffffffffffffffffffffffffff1614611412576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161140990613770565b60405180910390fd5b61141c3382611fd2565b50565b61143061142a611bbe565b83611c8d565b61146f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161146690613810565b60405180910390fd5b61147b848484846122f6565b50505050565b826000811180156114935750600a8111155b6114d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114c9906135f0565b60405180910390fd5b612710816114e06007611c7f565b6114ea9190613995565b111561152b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611522906137d0565b60405180910390fd5b3273ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611599576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161159090613850565b60405180910390fd5b600b60009054906101000a900460ff166115e8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115df90613830565b60405180910390fd5b8367016345785d8a00006115fc9190613a1c565b34101561163e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161163590613870565b60405180910390fd5b600a84600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205461168b9190613995565b11156116cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c390613790565b60405180910390fd5b611761838380806020026020016040519081016040528093929190818152602001838360200280828437600081840152601f19601f820116905080830192505050505050507fa81682d80bb19f95b0f54b6763d7a4f3cbe9964f7d37527abde729429d34180b60001b33604051602001611746919061346b565b60405160208183030381529060405280519060200120612352565b6117a0576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161179790613610565b60405180910390fd5b83600860003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117ef9190613995565b925050819055506118003385611fd2565b50505050565b606061181182611b52565b611850576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611847906136b0565b60405180910390fd5b600061185a612369565b9050600081511161187a57604051806020016040528060008152506118a8565b80611884846123fb565b600a60405160200161189893929190613486565b6040516020818303038152906040525b915050919050565b6118b8611bbe565b73ffffffffffffffffffffffffffffffffffffffff166118d66112c4565b73ffffffffffffffffffffffffffffffffffffffff161461192c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161192390613770565b60405180910390fd5b80600b60016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6119e5611bbe565b73ffffffffffffffffffffffffffffffffffffffff16611a036112c4565b73ffffffffffffffffffffffffffffffffffffffff1614611a59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a5090613770565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611ac9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ac090613590565b60405180910390fd5b611ad281612012565b50565b600b60009054906101000a900460ff1681565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16611c3983610f65565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6000611c9882611b52565b611cd7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cce90613690565b60405180910390fd5b6000611ce283610f65565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480611d5157508373ffffffffffffffffffffffffffffffffffffffff16611d398461082a565b73ffffffffffffffffffffffffffffffffffffffff16145b80611d625750611d618185611949565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff16611d8b82610f65565b73ffffffffffffffffffffffffffffffffffffffff1614611de1576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dd8906135b0565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611e51576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4890613630565b60405180910390fd5b611e5c83838361255c565b611e67600082611bc6565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611eb79190613a76565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611f0e9190613995565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4611fcd838383612561565b505050565b60005b8181101561200d57611fe76007612566565b611ffa83611ff56007611c7f565b61257c565b808061200590613bc3565b915050611fd5565b505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60008273ffffffffffffffffffffffffffffffffffffffff16826040516120fe906134b7565b60006040518083038185875af1925050503d806000811461213b576040519150601f19603f3d011682016040523d82523d6000602084013e612140565b606091505b5050905080612184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217b906137f0565b60405180910390fd5b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156121f8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121ef90613650565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516122e99190613533565b60405180910390a3505050565b612301848484611d6b565b61230d8484848461259a565b61234c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161234390613570565b60405180910390fd5b50505050565b60008261235f8584612731565b1490509392505050565b60606009805461237890613b60565b80601f01602080910402602001604051908101604052809291908181526020018280546123a490613b60565b80156123f15780601f106123c6576101008083540402835291602001916123f1565b820191906000526020600020905b8154815290600101906020018083116123d457829003601f168201915b5050505050905090565b60606000821415612443576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612557565b600082905060005b6000821461247557808061245e90613bc3565b915050600a8261246e91906139eb565b915061244b565b60008167ffffffffffffffff81111561249157612490613d1d565b5b6040519080825280601f01601f1916602001820160405280156124c35781602001600182028036833780820191505090505b5090505b60008514612550576001826124dc9190613a76565b9150600a856124eb9190613c30565b60306124f79190613995565b60f81b81838151811061250d5761250c613cee565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561254991906139eb565b94506124c7565b8093505050505b919050565b505050565b505050565b6001816000016000828254019250508190555050565b6125968282604051806020016040528060008152506127a6565b5050565b60006125bb8473ffffffffffffffffffffffffffffffffffffffff16612801565b15612724578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026125e4611bbe565b8786866040518563ffffffff1660e01b815260040161260694939291906134e7565b602060405180830381600087803b15801561262057600080fd5b505af192505050801561265157506040513d601f19601f8201168201806040525081019061264e9190612e74565b60015b6126d4573d8060008114612681576040519150601f19603f3d011682016040523d82523d6000602084013e612686565b606091505b506000815114156126cc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c390613570565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612729565b600190505b949350505050565b60008082905060005b845181101561279b57600085828151811061275857612757613cee565b5b6020026020010151905080831161277a576127738382612824565b9250612787565b6127848184612824565b92505b50808061279390613bc3565b91505061273a565b508091505092915050565b6127b0838361283b565b6127bd600084848461259a565b6127fc576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127f390613570565b60405180910390fd5b505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b600082600052816020526040600020905092915050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156128ab576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128a290613730565b60405180910390fd5b6128b481611b52565b156128f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128eb906135d0565b60405180910390fd5b6129006000838361255c565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546129509190613995565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4612a1160008383612561565b5050565b828054612a2190613b60565b90600052602060002090601f016020900481019282612a435760008555612a8a565b82601f10612a5c57805160ff1916838001178555612a8a565b82800160010185558215612a8a579182015b82811115612a89578251825591602001919060010190612a6e565b5b509050612a979190612a9b565b5090565b5b80821115612ab4576000816000905550600101612a9c565b5090565b6000612acb612ac6846138d0565b6138ab565b905082815260208101848484011115612ae757612ae6613d5b565b5b612af2848285613b1e565b509392505050565b6000612b0d612b0884613901565b6138ab565b905082815260208101848484011115612b2957612b28613d5b565b5b612b34848285613b1e565b509392505050565b600081359050612b4b8161432e565b92915050565b60008083601f840112612b6757612b66613d51565b5b8235905067ffffffffffffffff811115612b8457612b83613d4c565b5b602083019150836020820283011115612ba057612b9f613d56565b5b9250929050565b600081359050612bb681614345565b92915050565b600081359050612bcb8161435c565b92915050565b600081519050612be08161435c565b92915050565b600082601f830112612bfb57612bfa613d51565b5b8135612c0b848260208601612ab8565b91505092915050565b600082601f830112612c2957612c28613d51565b5b8135612c39848260208601612afa565b91505092915050565b600081359050612c5181614373565b92915050565b600060208284031215612c6d57612c6c613d65565b5b6000612c7b84828501612b3c565b91505092915050565b60008060408385031215612c9b57612c9a613d65565b5b6000612ca985828601612b3c565b9250506020612cba85828601612b3c565b9150509250929050565b600080600060608486031215612cdd57612cdc613d65565b5b6000612ceb86828701612b3c565b9350506020612cfc86828701612b3c565b9250506040612d0d86828701612c42565b9150509250925092565b60008060008060808587031215612d3157612d30613d65565b5b6000612d3f87828801612b3c565b9450506020612d5087828801612b3c565b9350506040612d6187828801612c42565b925050606085013567ffffffffffffffff811115612d8257612d81613d60565b5b612d8e87828801612be6565b91505092959194509250565b60008060408385031215612db157612db0613d65565b5b6000612dbf85828601612b3c565b9250506020612dd085828601612ba7565b9150509250929050565b60008060408385031215612df157612df0613d65565b5b6000612dff85828601612b3c565b9250506020612e1085828601612c42565b9150509250929050565b600060208284031215612e3057612e2f613d65565b5b6000612e3e84828501612ba7565b91505092915050565b600060208284031215612e5d57612e5c613d65565b5b6000612e6b84828501612bbc565b91505092915050565b600060208284031215612e8a57612e89613d65565b5b6000612e9884828501612bd1565b91505092915050565b600060208284031215612eb757612eb6613d65565b5b600082013567ffffffffffffffff811115612ed557612ed4613d60565b5b612ee184828501612c14565b91505092915050565b600060208284031215612f0057612eff613d65565b5b6000612f0e84828501612c42565b91505092915050565b600080600060408486031215612f3057612f2f613d65565b5b6000612f3e86828701612c42565b935050602084013567ffffffffffffffff811115612f5f57612f5e613d60565b5b612f6b86828701612b51565b92509250509250925092565b612f8081613aaa565b82525050565b612f97612f9282613aaa565b613c0c565b82525050565b612fa681613abc565b82525050565b6000612fb782613947565b612fc1818561395d565b9350612fd1818560208601613b2d565b612fda81613d6a565b840191505092915050565b6000612ff082613952565b612ffa8185613979565b935061300a818560208601613b2d565b61301381613d6a565b840191505092915050565b600061302982613952565b613033818561398a565b9350613043818560208601613b2d565b80840191505092915050565b6000815461305c81613b60565b613066818661398a565b945060018216600081146130815760018114613092576130c5565b60ff198316865281860193506130c5565b61309b85613932565b60005b838110156130bd5781548189015260018201915060208101905061309e565b838801955050505b50505092915050565b60006130db603283613979565b91506130e682613d88565b604082019050919050565b60006130fe602683613979565b915061310982613dd7565b604082019050919050565b6000613121602583613979565b915061312c82613e26565b604082019050919050565b6000613144601c83613979565b915061314f82613e75565b602082019050919050565b6000613167601483613979565b915061317282613e9e565b602082019050919050565b600061318a601883613979565b915061319582613ec7565b602082019050919050565b60006131ad602483613979565b91506131b882613ef0565b604082019050919050565b60006131d0601983613979565b91506131db82613f3f565b602082019050919050565b60006131f3601a83613979565b91506131fe82613f68565b602082019050919050565b6000613216602c83613979565b915061322182613f91565b604082019050919050565b6000613239602083613979565b915061324482613fe0565b602082019050919050565b600061325c603883613979565b915061326782614009565b604082019050919050565b600061327f602a83613979565b915061328a82614058565b604082019050919050565b60006132a2602983613979565b91506132ad826140a7565b604082019050919050565b60006132c5602083613979565b91506132d0826140f6565b602082019050919050565b60006132e8602c83613979565b91506132f38261411f565b604082019050919050565b600061330b602083613979565b91506133168261416e565b602082019050919050565b600061332e601f83613979565b915061333982614197565b602082019050919050565b6000613351602183613979565b915061335c826141c0565b604082019050919050565b600061337460008361396e565b915061337f8261420f565b600082019050919050565b6000613397601483613979565b91506133a282614212565b602082019050919050565b60006133ba601083613979565b91506133c58261423b565b602082019050919050565b60006133dd603183613979565b91506133e882614264565b604082019050919050565b6000613400601d83613979565b915061340b826142b3565b602082019050919050565b6000613423601e83613979565b915061342e826142dc565b602082019050919050565b6000613446601383613979565b915061345182614305565b602082019050919050565b61346581613b14565b82525050565b60006134778284612f86565b60148201915081905092915050565b6000613492828661301e565b915061349e828561301e565b91506134aa828461304f565b9150819050949350505050565b60006134c282613367565b9150819050919050565b60006020820190506134e16000830184612f77565b92915050565b60006080820190506134fc6000830187612f77565b6135096020830186612f77565b613516604083018561345c565b81810360608301526135288184612fac565b905095945050505050565b60006020820190506135486000830184612f9d565b92915050565b600060208201905081810360008301526135688184612fe5565b905092915050565b60006020820190508181036000830152613589816130ce565b9050919050565b600060208201905081810360008301526135a9816130f1565b9050919050565b600060208201905081810360008301526135c981613114565b9050919050565b600060208201905081810360008301526135e981613137565b9050919050565b600060208201905081810360008301526136098161315a565b9050919050565b600060208201905081810360008301526136298161317d565b9050919050565b60006020820190508181036000830152613649816131a0565b9050919050565b60006020820190508181036000830152613669816131c3565b9050919050565b60006020820190508181036000830152613689816131e6565b9050919050565b600060208201905081810360008301526136a981613209565b9050919050565b600060208201905081810360008301526136c98161322c565b9050919050565b600060208201905081810360008301526136e98161324f565b9050919050565b6000602082019050818103600083015261370981613272565b9050919050565b6000602082019050818103600083015261372981613295565b9050919050565b60006020820190508181036000830152613749816132b8565b9050919050565b60006020820190508181036000830152613769816132db565b9050919050565b60006020820190508181036000830152613789816132fe565b9050919050565b600060208201905081810360008301526137a981613321565b9050919050565b600060208201905081810360008301526137c981613344565b9050919050565b600060208201905081810360008301526137e98161338a565b9050919050565b60006020820190508181036000830152613809816133ad565b9050919050565b60006020820190508181036000830152613829816133d0565b9050919050565b60006020820190508181036000830152613849816133f3565b9050919050565b6000602082019050818103600083015261386981613416565b9050919050565b6000602082019050818103600083015261388981613439565b9050919050565b60006020820190506138a5600083018461345c565b92915050565b60006138b56138c6565b90506138c18282613b92565b919050565b6000604051905090565b600067ffffffffffffffff8211156138eb576138ea613d1d565b5b6138f482613d6a565b9050602081019050919050565b600067ffffffffffffffff82111561391c5761391b613d1d565b5b61392582613d6a565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006139a082613b14565b91506139ab83613b14565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156139e0576139df613c61565b5b828201905092915050565b60006139f682613b14565b9150613a0183613b14565b925082613a1157613a10613c90565b5b828204905092915050565b6000613a2782613b14565b9150613a3283613b14565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613a6b57613a6a613c61565b5b828202905092915050565b6000613a8182613b14565b9150613a8c83613b14565b925082821015613a9f57613a9e613c61565b5b828203905092915050565b6000613ab582613af4565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015613b4b578082015181840152602081019050613b30565b83811115613b5a576000848401525b50505050565b60006002820490506001821680613b7857607f821691505b60208210811415613b8c57613b8b613cbf565b5b50919050565b613b9b82613d6a565b810181811067ffffffffffffffff82111715613bba57613bb9613d1d565b5b80604052505050565b6000613bce82613b14565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613c0157613c00613c61565b5b600182019050919050565b6000613c1782613c1e565b9050919050565b6000613c2982613d7b565b9050919050565b6000613c3b82613b14565b9150613c4683613b14565b925082613c5657613c55613c90565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160601b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e736665722066726f6d20696e636f72726563742060008201527f6f776e6572000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f496e76616c6964206d696e7420616d6f756e7421000000000000000000000000600082015250565b7f596f7520617265206e6f742077686974656c6973746564210000000000000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f5075626c6963206d696e74206973206e6f742061637469766521000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4e6f6e2d6578697374656e742068756e74657220746f6b656e20676976656e21600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f45786365656473206d696e7420616d6f756e74207065722077616c6c65742100600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f5472616e73666572206661696c65642e00000000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f57686974656c697374206d696e74206973206e6f742061637469766521000000600082015250565b7f436f6e74726163742063616c6c7320617265206e6f7420616c6c6f7765640000600082015250565b7f496e73756666696369656e742066756e64732100000000000000000000000000600082015250565b61433781613aaa565b811461434257600080fd5b50565b61434e81613abc565b811461435957600080fd5b50565b61436581613ac8565b811461437057600080fd5b50565b61437c81613b14565b811461438757600080fd5b5056fea26469706673582212202f5de79c6fd20c41c8eeaffed6575c590c0e829843db7328410fabcaaa26fe2b64736f6c63430008070033
Deployed ByteCode Sourcemap
41151:3936:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;27963:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28908:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30467:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29990:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44305:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44100:91;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31217:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44413:109;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42228:457;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41775:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31627:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41515:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41454:56;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28602:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28332:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8584:103;;;;;;;;;;;;;:::i;:::-;;44197:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;44637:271;;;;;;;;;;;;;:::i;:::-;;7933:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29077:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30760:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43303:107;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31883:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42691:604;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43626:358;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;44528:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;30986:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;8842:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41729:41;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27963:305;28065:4;28117:25;28102:40;;;:11;:40;;;;:105;;;;28174:33;28159:48;;;:11;:48;;;;28102:105;:158;;;;28224:36;28248:11;28224:23;:36::i;:::-;28102:158;28082:178;;27963:305;;;:::o;28908:100::-;28962:13;28995:5;28988:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;28908:100;:::o;30467:221::-;30543:7;30571:16;30579:7;30571;:16::i;:::-;30563:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;30656:15;:24;30672:7;30656:24;;;;;;;;;;;;;;;;;;;;;30649:31;;30467:221;;;:::o;29990:411::-;30071:13;30087:23;30102:7;30087:14;:23::i;:::-;30071:39;;30135:5;30129:11;;:2;:11;;;;30121:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;30229:5;30213:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;30238:37;30255:5;30262:12;:10;:12::i;:::-;30238:16;:37::i;:::-;30213:62;30191:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;30372:21;30381:2;30385:7;30372:8;:21::i;:::-;30060:341;29990:411;;:::o;44305:102::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44391:10:::1;44379:9;:22;;;;;;;;;;;;:::i;:::-;;44305:102:::0;:::o;44100:91::-;44146:7;44169:16;:6;:14;:16::i;:::-;44162:23;;44100:91;:::o;31217:339::-;31412:41;31431:12;:10;:12::i;:::-;31445:7;31412:18;:41::i;:::-;31404:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;31520:28;31530:4;31536:2;31540:7;31520:9;:28::i;:::-;31217:339;;;:::o;44413:109::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44510:6:::1;44486:21;;:30;;;;;;;;;;;;;;;;;;44413:109:::0;:::o;42228:457::-;42311:11;42062:1;42048:11;:15;:52;;;;;41671:2;42067:11;:33;;42048:52;42040:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41619:5;42159:11;42140:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;42132:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41924:9:::1;41910:23;;:10;:23;;;41902:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42350:18:::2;;;;;;;;;;;42342:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;42434:11;41576:9;42427:18;;;;:::i;:::-;42414:9;:31;;42406:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41720:2;42511:11;42484:12;:24;42497:10;42484:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:64;;42476:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;42625:11;42597:12;:24;42610:10;42597:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;42645:34;42655:10;42667:11;42645:9;:34::i;:::-;42228:457:::0;;:::o;41775:38::-;;;;;;;;;;;;;:::o;31627:185::-;31765:39;31782:4;31788:2;31792:7;31765:39;;;;;;;;;;;;:16;:39::i;:::-;31627:185;;;:::o;41515:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41454:56::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;28602:239::-;28674:7;28694:13;28710:7;:16;28718:7;28710:16;;;;;;;;;;;;;;;;;;;;;28694:32;;28762:1;28745:19;;:5;:19;;;;28737:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28828:5;28821:12;;;28602:239;;;:::o;28332:208::-;28404:7;28449:1;28432:19;;:5;:19;;;;28424:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;28516:9;:16;28526:5;28516:16;;;;;;;;;;;;;;;;28509:23;;28332:208;;;:::o;8584:103::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8649:30:::1;8676:1;8649:18;:30::i;:::-;8584:103::o:0;44197:102::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44283:10:::1;44271:9;:22;;;;;;;;;;;;:::i;:::-;;44197:102:::0;:::o;44637:271::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44686:15:::1;44704:21;44686:39;;44750:1;44740:7;:11;44732:20;;;::::0;::::1;;44761:85;44779:42;44842:3;44835::::0;44825:7:::1;:13;;;;:::i;:::-;44824:21;;;;:::i;:::-;44761:9;:85::i;:::-;44861:41;44871:7;:5;:7::i;:::-;44880:21;44861:9;:41::i;:::-;44679:229;44637:271::o:0;7933:87::-;7979:7;8006:6;;;;;;;;;;;7999:13;;7933:87;:::o;29077:104::-;29133:13;29166:7;29159:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;29077:104;:::o;30760:155::-;30855:52;30874:12;:10;:12::i;:::-;30888:8;30898;30855:18;:52::i;:::-;30760:155;;:::o;43303:107::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;43370:34:::1;43380:10;43392:11;43370:9;:34::i;:::-;43303:107:::0;:::o;31883:328::-;32058:41;32077:12;:10;:12::i;:::-;32091:7;32058:18;:41::i;:::-;32050:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;32164:39;32178:4;32184:2;32188:7;32197:5;32164:13;:39::i;:::-;31883:328;;;;:::o;42691:604::-;42797:11;42062:1;42048:11;:15;:52;;;;;41671:2;42067:11;:33;;42048:52;42040:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41619:5;42159:11;42140:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;42132:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;41924:9:::1;41910:23;;:10;:23;;;41902:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;42836:21:::2;;;;;;;;;;;42828:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;42926:11;41576:9;42919:18;;;;:::i;:::-;42906:9;:31;;42898:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;41720:2;43003:11;42976:12;:24;42989:10;42976:24;;;;;;;;;;;;;;;;:38;;;;:::i;:::-;:64;;42968:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;43091:78;43110:5;;43091:78;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41379:66;43117:10;;43156;43139:28;;;;;;;;:::i;:::-;;;;;;;;;;;;;43129:39;;;;;;43091:18;:78::i;:::-;43083:115;;;;;;;;;;;;:::i;:::-;;;;;;;;;43235:11;43207:12;:24;43220:10;43207:24;;;;;;;;;;;;;;;;:39;;;;;;;:::i;:::-;;;;;;;;43255:34;43265:10;43277:11;43255:9;:34::i;:::-;42691:604:::0;;;;:::o;43626:358::-;43700:13;43730:17;43738:8;43730:7;:17::i;:::-;43722:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;43793:28;43824:10;:8;:10::i;:::-;43793:41;;43879:1;43854:14;43848:28;:32;:130;;;;;;;;;;;;;;;;;43916:14;43932:19;:8;:17;:19::i;:::-;43953:9;43899:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;43848:130;43841:137;;;43626:358;;;:::o;44528:103::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;44619:6:::1;44598:18;;:27;;;;;;;;;;;;;;;;;;44528:103:::0;:::o;30986:164::-;31083:4;31107:18;:25;31126:5;31107:25;;;;;;;;;;;;;;;:35;31133:8;31107:35;;;;;;;;;;;;;;;;;;;;;;;;;31100:42;;30986:164;;;;:::o;8842:201::-;8164:12;:10;:12::i;:::-;8153:23;;:7;:5;:7::i;:::-;:23;;;8145:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;8951:1:::1;8931:22;;:8;:22;;;;8923:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;9007:28;9026:8;9007:18;:28::i;:::-;8842:201:::0;:::o;41729:41::-;;;;;;;;;;;;;:::o;20717:157::-;20802:4;20841:25;20826:40;;;:11;:40;;;;20819:47;;20717:157;;;:::o;33721:127::-;33786:4;33838:1;33810:30;;:7;:16;33818:7;33810:16;;;;;;;;;;;;;;;;;;;;;:30;;;;33803:37;;33721:127;;;:::o;6657:98::-;6710:7;6737:10;6730:17;;6657:98;:::o;37867:174::-;37969:2;37942:15;:24;37958:7;37942:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;38025:7;38021:2;37987:46;;37996:23;38011:7;37996:14;:23::i;:::-;37987:46;;;;;;;;;;;;37867:174;;:::o;3261:114::-;3326:7;3353;:14;;;3346:21;;3261:114;;;:::o;34015:348::-;34108:4;34133:16;34141:7;34133;:16::i;:::-;34125:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34209:13;34225:23;34240:7;34225:14;:23::i;:::-;34209:39;;34278:5;34267:16;;:7;:16;;;:51;;;;34311:7;34287:31;;:20;34299:7;34287:11;:20::i;:::-;:31;;;34267:51;:87;;;;34322:32;34339:5;34346:7;34322:16;:32::i;:::-;34267:87;34259:96;;;34015:348;;;;:::o;37124:625::-;37283:4;37256:31;;:23;37271:7;37256:14;:23::i;:::-;:31;;;37248:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;37362:1;37348:16;;:2;:16;;;;37340:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;37418:39;37439:4;37445:2;37449:7;37418:20;:39::i;:::-;37522:29;37539:1;37543:7;37522:8;:29::i;:::-;37583:1;37564:9;:15;37574:4;37564:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;37612:1;37595:9;:13;37605:2;37595:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;37643:2;37624:7;:16;37632:7;37624:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;37682:7;37678:2;37663:27;;37672:4;37663:27;;;;;;;;;;;;37703:38;37723:4;37729:2;37733:7;37703:19;:38::i;:::-;37124:625;;;:::o;43416:204::-;43496:9;43491:124;43515:11;43511:1;:15;43491:124;;;43542:18;:6;:16;:18::i;:::-;43569:38;43579:9;43590:16;:6;:14;:16::i;:::-;43569:9;:38::i;:::-;43528:3;;;;;:::i;:::-;;;;43491:124;;;;43416:204;;:::o;9203:191::-;9277:16;9296:6;;;;;;;;;;;9277:25;;9322:8;9313:6;;:17;;;;;;;;;;;;;;;;;;9377:8;9346:40;;9367:8;9346:40;;;;;;;;;;;;9266:128;9203:191;:::o;44914:170::-;44984:12;45002:8;:13;;45023:7;45002:33;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44983:52;;;45050:7;45042:36;;;;;;;;;;;;:::i;:::-;;;;;;;;;44976:108;44914:170;;:::o;38183:315::-;38338:8;38329:17;;:5;:17;;;;38321:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;38425:8;38387:18;:25;38406:5;38387:25;;;;;;;;;;;;;;;:35;38413:8;38387:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;38471:8;38449:41;;38464:5;38449:41;;;38481:8;38449:41;;;;;;:::i;:::-;;;;;;;;38183:315;;;:::o;33093:::-;33250:28;33260:4;33266:2;33270:7;33250:9;:28::i;:::-;33297:48;33320:4;33326:2;33330:7;33339:5;33297:22;:48::i;:::-;33289:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;33093:315;;;;:::o;923:190::-;1048:4;1101;1072:25;1085:5;1092:4;1072:12;:25::i;:::-;:33;1065:40;;923:190;;;;;:::o;43990:104::-;44050:13;44079:9;44072:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43990:104;:::o;4219:723::-;4275:13;4505:1;4496:5;:10;4492:53;;;4523:10;;;;;;;;;;;;;;;;;;;;;4492:53;4555:12;4570:5;4555:20;;4586:14;4611:78;4626:1;4618:4;:9;4611:78;;4644:8;;;;;:::i;:::-;;;;4675:2;4667:10;;;;;:::i;:::-;;;4611:78;;;4699:19;4731:6;4721:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;4699:39;;4749:154;4765:1;4756:5;:10;4749:154;;4793:1;4783:11;;;;;:::i;:::-;;;4860:2;4852:5;:10;;;;:::i;:::-;4839:2;:24;;;;:::i;:::-;4826:39;;4809:6;4816;4809:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;4889:2;4880:11;;;;;:::i;:::-;;;4749:154;;;4927:6;4913:21;;;;;4219:723;;;;:::o;40434:126::-;;;;:::o;40945:125::-;;;;:::o;3383:127::-;3490:1;3472:7;:14;;;:19;;;;;;;;;;;3383:127;:::o;34705:110::-;34781:26;34791:2;34795:7;34781:26;;;;;;;;;;;;:9;:26::i;:::-;34705:110;;:::o;39063:799::-;39218:4;39239:15;:2;:13;;;:15::i;:::-;39235:620;;;39291:2;39275:36;;;39312:12;:10;:12::i;:::-;39326:4;39332:7;39341:5;39275:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39271:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39534:1;39517:6;:13;:18;39513:272;;;39560:60;;;;;;;;;;:::i;:::-;;;;;;;;39513:272;39735:6;39729:13;39720:6;39716:2;39712:15;39705:38;39271:529;39408:41;;;39398:51;;;:6;:51;;;;39391:58;;;;;39235:620;39839:4;39832:11;;39063:799;;;;;;;:::o;1475:675::-;1558:7;1578:20;1601:4;1578:27;;1621:9;1616:497;1640:5;:12;1636:1;:16;1616:497;;;1674:20;1697:5;1703:1;1697:8;;;;;;;;:::i;:::-;;;;;;;;1674:31;;1740:12;1724;:28;1720:382;;1867:42;1882:12;1896;1867:14;:42::i;:::-;1852:57;;1720:382;;;2044:42;2059:12;2073;2044:14;:42::i;:::-;2029:57;;1720:382;1659:454;1654:3;;;;;:::i;:::-;;;;1616:497;;;;2130:12;2123:19;;;1475:675;;;;:::o;35042:321::-;35172:18;35178:2;35182:7;35172:5;:18::i;:::-;35223:54;35254:1;35258:2;35262:7;35271:5;35223:22;:54::i;:::-;35201:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;35042:321;;;:::o;10634:326::-;10694:4;10951:1;10929:7;:19;;;:23;10922:30;;10634:326;;;:::o;2158:224::-;2226:13;2289:1;2283:4;2276:15;2318:1;2312:4;2305:15;2359:4;2353;2343:21;2334:30;;2158:224;;;;:::o;35699:439::-;35793:1;35779:16;;:2;:16;;;;35771:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;35852:16;35860:7;35852;:16::i;:::-;35851:17;35843:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;35914:45;35943:1;35947:2;35951:7;35914:20;:45::i;:::-;35989:1;35972:9;:13;35982:2;35972:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;36020:2;36001:7;:16;36009:7;36001:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;36065:7;36061:2;36040:33;;36057:1;36040:33;;;;;;;;;;;;36086:44;36114:1;36118:2;36122:7;36086:19;:44::i;:::-;35699:439;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:323::-;6267:6;6316:2;6304:9;6295:7;6291:23;6287:32;6284:119;;;6322:79;;:::i;:::-;6284:119;6442:1;6467:50;6509:7;6500:6;6489:9;6485:22;6467:50;:::i;:::-;6457:60;;6413:114;6211:323;;;;:::o;6540:327::-;6598:6;6647:2;6635:9;6626:7;6622:23;6618:32;6615:119;;;6653:79;;:::i;:::-;6615:119;6773:1;6798:52;6842:7;6833:6;6822:9;6818:22;6798:52;:::i;:::-;6788:62;;6744:116;6540:327;;;;:::o;6873:349::-;6942:6;6991:2;6979:9;6970:7;6966:23;6962:32;6959:119;;;6997:79;;:::i;:::-;6959:119;7117:1;7142:63;7197:7;7188:6;7177:9;7173:22;7142:63;:::i;:::-;7132:73;;7088:127;6873:349;;;;:::o;7228:509::-;7297:6;7346:2;7334:9;7325:7;7321:23;7317:32;7314:119;;;7352:79;;:::i;:::-;7314:119;7500:1;7489:9;7485:17;7472:31;7530:18;7522:6;7519:30;7516:117;;;7552:79;;:::i;:::-;7516:117;7657:63;7712:7;7703:6;7692:9;7688:22;7657:63;:::i;:::-;7647:73;;7443:287;7228:509;;;;:::o;7743:329::-;7802:6;7851:2;7839:9;7830:7;7826:23;7822:32;7819:119;;;7857:79;;:::i;:::-;7819:119;7977:1;8002:53;8047:7;8038:6;8027:9;8023:22;8002:53;:::i;:::-;7992:63;;7948:117;7743:329;;;;:::o;8078:704::-;8173:6;8181;8189;8238:2;8226:9;8217:7;8213:23;8209:32;8206:119;;;8244:79;;:::i;:::-;8206:119;8364:1;8389:53;8434:7;8425:6;8414:9;8410:22;8389:53;:::i;:::-;8379:63;;8335:117;8519:2;8508:9;8504:18;8491:32;8550:18;8542:6;8539:30;8536:117;;;8572:79;;:::i;:::-;8536:117;8685:80;8757:7;8748:6;8737:9;8733:22;8685:80;:::i;:::-;8667:98;;;;8462:313;8078:704;;;;;:::o;8788:118::-;8875:24;8893:5;8875:24;:::i;:::-;8870:3;8863:37;8788:118;;:::o;8912:157::-;9017:45;9037:24;9055:5;9037:24;:::i;:::-;9017:45;:::i;:::-;9012:3;9005:58;8912:157;;:::o;9075:109::-;9156:21;9171:5;9156:21;:::i;:::-;9151:3;9144:34;9075:109;;:::o;9190:360::-;9276:3;9304:38;9336:5;9304:38;:::i;:::-;9358:70;9421:6;9416:3;9358:70;:::i;:::-;9351:77;;9437:52;9482:6;9477:3;9470:4;9463:5;9459:16;9437:52;:::i;:::-;9514:29;9536:6;9514:29;:::i;:::-;9509:3;9505:39;9498:46;;9280:270;9190:360;;;;:::o;9556:364::-;9644:3;9672:39;9705:5;9672:39;:::i;:::-;9727:71;9791:6;9786:3;9727:71;:::i;:::-;9720:78;;9807:52;9852:6;9847:3;9840:4;9833:5;9829:16;9807:52;:::i;:::-;9884:29;9906:6;9884:29;:::i;:::-;9879:3;9875:39;9868:46;;9648:272;9556:364;;;;:::o;9926:377::-;10032:3;10060:39;10093:5;10060:39;:::i;:::-;10115:89;10197:6;10192:3;10115:89;:::i;:::-;10108:96;;10213:52;10258:6;10253:3;10246:4;10239:5;10235:16;10213:52;:::i;:::-;10290:6;10285:3;10281:16;10274:23;;10036:267;9926:377;;;;:::o;10333:845::-;10436:3;10473:5;10467:12;10502:36;10528:9;10502:36;:::i;:::-;10554:89;10636:6;10631:3;10554:89;:::i;:::-;10547:96;;10674:1;10663:9;10659:17;10690:1;10685:137;;;;10836:1;10831:341;;;;10652:520;;10685:137;10769:4;10765:9;10754;10750:25;10745:3;10738:38;10805:6;10800:3;10796:16;10789:23;;10685:137;;10831:341;10898:38;10930:5;10898:38;:::i;:::-;10958:1;10972:154;10986:6;10983:1;10980:13;10972:154;;;11060:7;11054:14;11050:1;11045:3;11041:11;11034:35;11110:1;11101:7;11097:15;11086:26;;11008:4;11005:1;11001:12;10996:17;;10972:154;;;11155:6;11150:3;11146:16;11139:23;;10838:334;;10652:520;;10440:738;;10333:845;;;;:::o;11184:366::-;11326:3;11347:67;11411:2;11406:3;11347:67;:::i;:::-;11340:74;;11423:93;11512:3;11423:93;:::i;:::-;11541:2;11536:3;11532:12;11525:19;;11184:366;;;:::o;11556:::-;11698:3;11719:67;11783:2;11778:3;11719:67;:::i;:::-;11712:74;;11795:93;11884:3;11795:93;:::i;:::-;11913:2;11908:3;11904:12;11897:19;;11556:366;;;:::o;11928:::-;12070:3;12091:67;12155:2;12150:3;12091:67;:::i;:::-;12084:74;;12167:93;12256:3;12167:93;:::i;:::-;12285:2;12280:3;12276:12;12269:19;;11928:366;;;:::o;12300:::-;12442:3;12463:67;12527:2;12522:3;12463:67;:::i;:::-;12456:74;;12539:93;12628:3;12539:93;:::i;:::-;12657:2;12652:3;12648:12;12641:19;;12300:366;;;:::o;12672:::-;12814:3;12835:67;12899:2;12894:3;12835:67;:::i;:::-;12828:74;;12911:93;13000:3;12911:93;:::i;:::-;13029:2;13024:3;13020:12;13013:19;;12672:366;;;:::o;13044:::-;13186:3;13207:67;13271:2;13266:3;13207:67;:::i;:::-;13200:74;;13283:93;13372:3;13283:93;:::i;:::-;13401:2;13396:3;13392:12;13385:19;;13044:366;;;:::o;13416:::-;13558:3;13579:67;13643:2;13638:3;13579:67;:::i;:::-;13572:74;;13655:93;13744:3;13655:93;:::i;:::-;13773:2;13768:3;13764:12;13757:19;;13416:366;;;:::o;13788:::-;13930:3;13951:67;14015:2;14010:3;13951:67;:::i;:::-;13944:74;;14027:93;14116:3;14027:93;:::i;:::-;14145:2;14140:3;14136:12;14129:19;;13788:366;;;:::o;14160:::-;14302:3;14323:67;14387:2;14382:3;14323:67;:::i;:::-;14316:74;;14399:93;14488:3;14399:93;:::i;:::-;14517:2;14512:3;14508:12;14501:19;;14160:366;;;:::o;14532:::-;14674:3;14695:67;14759:2;14754:3;14695:67;:::i;:::-;14688:74;;14771:93;14860:3;14771:93;:::i;:::-;14889:2;14884:3;14880:12;14873:19;;14532:366;;;:::o;14904:::-;15046:3;15067:67;15131:2;15126:3;15067:67;:::i;:::-;15060:74;;15143:93;15232:3;15143:93;:::i;:::-;15261:2;15256:3;15252:12;15245:19;;14904:366;;;:::o;15276:::-;15418:3;15439:67;15503:2;15498:3;15439:67;:::i;:::-;15432:74;;15515:93;15604:3;15515:93;:::i;:::-;15633:2;15628:3;15624:12;15617:19;;15276:366;;;:::o;15648:::-;15790:3;15811:67;15875:2;15870:3;15811:67;:::i;:::-;15804:74;;15887:93;15976:3;15887:93;:::i;:::-;16005:2;16000:3;15996:12;15989:19;;15648:366;;;:::o;16020:::-;16162:3;16183:67;16247:2;16242:3;16183:67;:::i;:::-;16176:74;;16259:93;16348:3;16259:93;:::i;:::-;16377:2;16372:3;16368:12;16361:19;;16020:366;;;:::o;16392:::-;16534:3;16555:67;16619:2;16614:3;16555:67;:::i;:::-;16548:74;;16631:93;16720:3;16631:93;:::i;:::-;16749:2;16744:3;16740:12;16733:19;;16392:366;;;:::o;16764:::-;16906:3;16927:67;16991:2;16986:3;16927:67;:::i;:::-;16920:74;;17003:93;17092:3;17003:93;:::i;:::-;17121:2;17116:3;17112:12;17105:19;;16764:366;;;:::o;17136:::-;17278:3;17299:67;17363:2;17358:3;17299:67;:::i;:::-;17292:74;;17375:93;17464:3;17375:93;:::i;:::-;17493:2;17488:3;17484:12;17477:19;;17136:366;;;:::o;17508:::-;17650:3;17671:67;17735:2;17730:3;17671:67;:::i;:::-;17664:74;;17747:93;17836:3;17747:93;:::i;:::-;17865:2;17860:3;17856:12;17849:19;;17508:366;;;:::o;17880:::-;18022:3;18043:67;18107:2;18102:3;18043:67;:::i;:::-;18036:74;;18119:93;18208:3;18119:93;:::i;:::-;18237:2;18232:3;18228:12;18221:19;;17880:366;;;:::o;18252:398::-;18411:3;18432:83;18513:1;18508:3;18432:83;:::i;:::-;18425:90;;18524:93;18613:3;18524:93;:::i;:::-;18642:1;18637:3;18633:11;18626:18;;18252:398;;;:::o;18656:366::-;18798:3;18819:67;18883:2;18878:3;18819:67;:::i;:::-;18812:74;;18895:93;18984:3;18895:93;:::i;:::-;19013:2;19008:3;19004:12;18997:19;;18656:366;;;:::o;19028:::-;19170:3;19191:67;19255:2;19250:3;19191:67;:::i;:::-;19184:74;;19267:93;19356:3;19267:93;:::i;:::-;19385:2;19380:3;19376:12;19369:19;;19028:366;;;:::o;19400:::-;19542:3;19563:67;19627:2;19622:3;19563:67;:::i;:::-;19556:74;;19639:93;19728:3;19639:93;:::i;:::-;19757:2;19752:3;19748:12;19741:19;;19400:366;;;:::o;19772:::-;19914:3;19935:67;19999:2;19994:3;19935:67;:::i;:::-;19928:74;;20011:93;20100:3;20011:93;:::i;:::-;20129:2;20124:3;20120:12;20113:19;;19772:366;;;:::o;20144:::-;20286:3;20307:67;20371:2;20366:3;20307:67;:::i;:::-;20300:74;;20383:93;20472:3;20383:93;:::i;:::-;20501:2;20496:3;20492:12;20485:19;;20144:366;;;:::o;20516:::-;20658:3;20679:67;20743:2;20738:3;20679:67;:::i;:::-;20672:74;;20755:93;20844:3;20755:93;:::i;:::-;20873:2;20868:3;20864:12;20857:19;;20516:366;;;:::o;20888:118::-;20975:24;20993:5;20975:24;:::i;:::-;20970:3;20963:37;20888:118;;:::o;21012:256::-;21124:3;21139:75;21210:3;21201:6;21139:75;:::i;:::-;21239:2;21234:3;21230:12;21223:19;;21259:3;21252:10;;21012:256;;;;:::o;21274:589::-;21499:3;21521:95;21612:3;21603:6;21521:95;:::i;:::-;21514:102;;21633:95;21724:3;21715:6;21633:95;:::i;:::-;21626:102;;21745:92;21833:3;21824:6;21745:92;:::i;:::-;21738:99;;21854:3;21847:10;;21274:589;;;;;;:::o;21869:379::-;22053:3;22075:147;22218:3;22075:147;:::i;:::-;22068:154;;22239:3;22232:10;;21869:379;;;:::o;22254:222::-;22347:4;22385:2;22374:9;22370:18;22362:26;;22398:71;22466:1;22455:9;22451:17;22442:6;22398:71;:::i;:::-;22254:222;;;;:::o;22482:640::-;22677:4;22715:3;22704:9;22700:19;22692:27;;22729:71;22797:1;22786:9;22782:17;22773:6;22729:71;:::i;:::-;22810:72;22878:2;22867:9;22863:18;22854:6;22810:72;:::i;:::-;22892;22960:2;22949:9;22945:18;22936:6;22892:72;:::i;:::-;23011:9;23005:4;23001:20;22996:2;22985:9;22981:18;22974:48;23039:76;23110:4;23101:6;23039:76;:::i;:::-;23031:84;;22482:640;;;;;;;:::o;23128:210::-;23215:4;23253:2;23242:9;23238:18;23230:26;;23266:65;23328:1;23317:9;23313:17;23304:6;23266:65;:::i;:::-;23128:210;;;;:::o;23344:313::-;23457:4;23495:2;23484:9;23480:18;23472:26;;23544:9;23538:4;23534:20;23530:1;23519:9;23515:17;23508:47;23572:78;23645:4;23636:6;23572:78;:::i;:::-;23564:86;;23344:313;;;;:::o;23663:419::-;23829:4;23867:2;23856:9;23852:18;23844:26;;23916:9;23910:4;23906:20;23902:1;23891:9;23887:17;23880:47;23944:131;24070:4;23944:131;:::i;:::-;23936:139;;23663:419;;;:::o;24088:::-;24254:4;24292:2;24281:9;24277:18;24269:26;;24341:9;24335:4;24331:20;24327:1;24316:9;24312:17;24305:47;24369:131;24495:4;24369:131;:::i;:::-;24361:139;;24088:419;;;:::o;24513:::-;24679:4;24717:2;24706:9;24702:18;24694:26;;24766:9;24760:4;24756:20;24752:1;24741:9;24737:17;24730:47;24794:131;24920:4;24794:131;:::i;:::-;24786:139;;24513:419;;;:::o;24938:::-;25104:4;25142:2;25131:9;25127:18;25119:26;;25191:9;25185:4;25181:20;25177:1;25166:9;25162:17;25155:47;25219:131;25345:4;25219:131;:::i;:::-;25211:139;;24938:419;;;:::o;25363:::-;25529:4;25567:2;25556:9;25552:18;25544:26;;25616:9;25610:4;25606:20;25602:1;25591:9;25587:17;25580:47;25644:131;25770:4;25644:131;:::i;:::-;25636:139;;25363:419;;;:::o;25788:::-;25954:4;25992:2;25981:9;25977:18;25969:26;;26041:9;26035:4;26031:20;26027:1;26016:9;26012:17;26005:47;26069:131;26195:4;26069:131;:::i;:::-;26061:139;;25788:419;;;:::o;26213:::-;26379:4;26417:2;26406:9;26402:18;26394:26;;26466:9;26460:4;26456:20;26452:1;26441:9;26437:17;26430:47;26494:131;26620:4;26494:131;:::i;:::-;26486:139;;26213:419;;;:::o;26638:::-;26804:4;26842:2;26831:9;26827:18;26819:26;;26891:9;26885:4;26881:20;26877:1;26866:9;26862:17;26855:47;26919:131;27045:4;26919:131;:::i;:::-;26911:139;;26638:419;;;:::o;27063:::-;27229:4;27267:2;27256:9;27252:18;27244:26;;27316:9;27310:4;27306:20;27302:1;27291:9;27287:17;27280:47;27344:131;27470:4;27344:131;:::i;:::-;27336:139;;27063:419;;;:::o;27488:::-;27654:4;27692:2;27681:9;27677:18;27669:26;;27741:9;27735:4;27731:20;27727:1;27716:9;27712:17;27705:47;27769:131;27895:4;27769:131;:::i;:::-;27761:139;;27488:419;;;:::o;27913:::-;28079:4;28117:2;28106:9;28102:18;28094:26;;28166:9;28160:4;28156:20;28152:1;28141:9;28137:17;28130:47;28194:131;28320:4;28194:131;:::i;:::-;28186:139;;27913:419;;;:::o;28338:::-;28504:4;28542:2;28531:9;28527:18;28519:26;;28591:9;28585:4;28581:20;28577:1;28566:9;28562:17;28555:47;28619:131;28745:4;28619:131;:::i;:::-;28611:139;;28338:419;;;:::o;28763:::-;28929:4;28967:2;28956:9;28952:18;28944:26;;29016:9;29010:4;29006:20;29002:1;28991:9;28987:17;28980:47;29044:131;29170:4;29044:131;:::i;:::-;29036:139;;28763:419;;;:::o;29188:::-;29354:4;29392:2;29381:9;29377:18;29369:26;;29441:9;29435:4;29431:20;29427:1;29416:9;29412:17;29405:47;29469:131;29595:4;29469:131;:::i;:::-;29461:139;;29188:419;;;:::o;29613:::-;29779:4;29817:2;29806:9;29802:18;29794:26;;29866:9;29860:4;29856:20;29852:1;29841:9;29837:17;29830:47;29894:131;30020:4;29894:131;:::i;:::-;29886:139;;29613:419;;;:::o;30038:::-;30204:4;30242:2;30231:9;30227:18;30219:26;;30291:9;30285:4;30281:20;30277:1;30266:9;30262:17;30255:47;30319:131;30445:4;30319:131;:::i;:::-;30311:139;;30038:419;;;:::o;30463:::-;30629:4;30667:2;30656:9;30652:18;30644:26;;30716:9;30710:4;30706:20;30702:1;30691:9;30687:17;30680:47;30744:131;30870:4;30744:131;:::i;:::-;30736:139;;30463:419;;;:::o;30888:::-;31054:4;31092:2;31081:9;31077:18;31069:26;;31141:9;31135:4;31131:20;31127:1;31116:9;31112:17;31105:47;31169:131;31295:4;31169:131;:::i;:::-;31161:139;;30888:419;;;:::o;31313:::-;31479:4;31517:2;31506:9;31502:18;31494:26;;31566:9;31560:4;31556:20;31552:1;31541:9;31537:17;31530:47;31594:131;31720:4;31594:131;:::i;:::-;31586:139;;31313:419;;;:::o;31738:::-;31904:4;31942:2;31931:9;31927:18;31919:26;;31991:9;31985:4;31981:20;31977:1;31966:9;31962:17;31955:47;32019:131;32145:4;32019:131;:::i;:::-;32011:139;;31738:419;;;:::o;32163:::-;32329:4;32367:2;32356:9;32352:18;32344:26;;32416:9;32410:4;32406:20;32402:1;32391:9;32387:17;32380:47;32444:131;32570:4;32444:131;:::i;:::-;32436:139;;32163:419;;;:::o;32588:::-;32754:4;32792:2;32781:9;32777:18;32769:26;;32841:9;32835:4;32831:20;32827:1;32816:9;32812:17;32805:47;32869:131;32995:4;32869:131;:::i;:::-;32861:139;;32588:419;;;:::o;33013:::-;33179:4;33217:2;33206:9;33202:18;33194:26;;33266:9;33260:4;33256:20;33252:1;33241:9;33237:17;33230:47;33294:131;33420:4;33294:131;:::i;:::-;33286:139;;33013:419;;;:::o;33438:::-;33604:4;33642:2;33631:9;33627:18;33619:26;;33691:9;33685:4;33681:20;33677:1;33666:9;33662:17;33655:47;33719:131;33845:4;33719:131;:::i;:::-;33711:139;;33438:419;;;:::o;33863:::-;34029:4;34067:2;34056:9;34052:18;34044:26;;34116:9;34110:4;34106:20;34102:1;34091:9;34087:17;34080:47;34144:131;34270:4;34144:131;:::i;:::-;34136:139;;33863:419;;;:::o;34288:222::-;34381:4;34419:2;34408:9;34404:18;34396:26;;34432:71;34500:1;34489:9;34485:17;34476:6;34432:71;:::i;:::-;34288:222;;;;:::o;34516:129::-;34550:6;34577:20;;:::i;:::-;34567:30;;34606:33;34634:4;34626:6;34606:33;:::i;:::-;34516:129;;;:::o;34651:75::-;34684:6;34717:2;34711:9;34701:19;;34651:75;:::o;34732:307::-;34793:4;34883:18;34875:6;34872:30;34869:56;;;34905:18;;:::i;:::-;34869:56;34943:29;34965:6;34943:29;:::i;:::-;34935:37;;35027:4;35021;35017:15;35009:23;;34732:307;;;:::o;35045:308::-;35107:4;35197:18;35189:6;35186:30;35183:56;;;35219:18;;:::i;:::-;35183:56;35257:29;35279:6;35257:29;:::i;:::-;35249:37;;35341:4;35335;35331:15;35323:23;;35045:308;;;:::o;35359:141::-;35408:4;35431:3;35423:11;;35454:3;35451:1;35444:14;35488:4;35485:1;35475:18;35467:26;;35359:141;;;:::o;35506:98::-;35557:6;35591:5;35585:12;35575:22;;35506:98;;;:::o;35610:99::-;35662:6;35696:5;35690:12;35680:22;;35610:99;;;:::o;35715:168::-;35798:11;35832:6;35827:3;35820:19;35872:4;35867:3;35863:14;35848:29;;35715:168;;;;:::o;35889:147::-;35990:11;36027:3;36012:18;;35889:147;;;;:::o;36042:169::-;36126:11;36160:6;36155:3;36148:19;36200:4;36195:3;36191:14;36176:29;;36042:169;;;;:::o;36217:148::-;36319:11;36356:3;36341:18;;36217:148;;;;:::o;36371:305::-;36411:3;36430:20;36448:1;36430:20;:::i;:::-;36425:25;;36464:20;36482:1;36464:20;:::i;:::-;36459:25;;36618:1;36550:66;36546:74;36543:1;36540:81;36537:107;;;36624:18;;:::i;:::-;36537:107;36668:1;36665;36661:9;36654:16;;36371:305;;;;:::o;36682:185::-;36722:1;36739:20;36757:1;36739:20;:::i;:::-;36734:25;;36773:20;36791:1;36773:20;:::i;:::-;36768:25;;36812:1;36802:35;;36817:18;;:::i;:::-;36802:35;36859:1;36856;36852:9;36847:14;;36682:185;;;;:::o;36873:348::-;36913:7;36936:20;36954:1;36936:20;:::i;:::-;36931:25;;36970:20;36988:1;36970:20;:::i;:::-;36965:25;;37158:1;37090:66;37086:74;37083:1;37080:81;37075:1;37068:9;37061:17;37057:105;37054:131;;;37165:18;;:::i;:::-;37054:131;37213:1;37210;37206:9;37195:20;;36873:348;;;;:::o;37227:191::-;37267:4;37287:20;37305:1;37287:20;:::i;:::-;37282:25;;37321:20;37339:1;37321:20;:::i;:::-;37316:25;;37360:1;37357;37354:8;37351:34;;;37365:18;;:::i;:::-;37351:34;37410:1;37407;37403:9;37395:17;;37227:191;;;;:::o;37424:96::-;37461:7;37490:24;37508:5;37490:24;:::i;:::-;37479:35;;37424:96;;;:::o;37526:90::-;37560:7;37603:5;37596:13;37589:21;37578:32;;37526:90;;;:::o;37622:149::-;37658:7;37698:66;37691:5;37687:78;37676:89;;37622:149;;;:::o;37777:126::-;37814:7;37854:42;37847:5;37843:54;37832:65;;37777:126;;;:::o;37909:77::-;37946:7;37975:5;37964:16;;37909:77;;;:::o;37992:154::-;38076:6;38071:3;38066;38053:30;38138:1;38129:6;38124:3;38120:16;38113:27;37992:154;;;:::o;38152:307::-;38220:1;38230:113;38244:6;38241:1;38238:13;38230:113;;;38329:1;38324:3;38320:11;38314:18;38310:1;38305:3;38301:11;38294:39;38266:2;38263:1;38259:10;38254:15;;38230:113;;;38361:6;38358:1;38355:13;38352:101;;;38441:1;38432:6;38427:3;38423:16;38416:27;38352:101;38201:258;38152:307;;;:::o;38465:320::-;38509:6;38546:1;38540:4;38536:12;38526:22;;38593:1;38587:4;38583:12;38614:18;38604:81;;38670:4;38662:6;38658:17;38648:27;;38604:81;38732:2;38724:6;38721:14;38701:18;38698:38;38695:84;;;38751:18;;:::i;:::-;38695:84;38516:269;38465:320;;;:::o;38791:281::-;38874:27;38896:4;38874:27;:::i;:::-;38866:6;38862:40;39004:6;38992:10;38989:22;38968:18;38956:10;38953:34;38950:62;38947:88;;;39015:18;;:::i;:::-;38947:88;39055:10;39051:2;39044:22;38834:238;38791:281;;:::o;39078:233::-;39117:3;39140:24;39158:5;39140:24;:::i;:::-;39131:33;;39186:66;39179:5;39176:77;39173:103;;;39256:18;;:::i;:::-;39173:103;39303:1;39296:5;39292:13;39285:20;;39078:233;;;:::o;39317:100::-;39356:7;39385:26;39405:5;39385:26;:::i;:::-;39374:37;;39317:100;;;:::o;39423:94::-;39462:7;39491:20;39505:5;39491:20;:::i;:::-;39480:31;;39423:94;;;:::o;39523:176::-;39555:1;39572:20;39590:1;39572:20;:::i;:::-;39567:25;;39606:20;39624:1;39606:20;:::i;:::-;39601:25;;39645:1;39635:35;;39650:18;;:::i;:::-;39635:35;39691:1;39688;39684:9;39679:14;;39523:176;;;;:::o;39705:180::-;39753:77;39750:1;39743:88;39850:4;39847:1;39840:15;39874:4;39871:1;39864:15;39891:180;39939:77;39936:1;39929:88;40036:4;40033:1;40026:15;40060:4;40057:1;40050:15;40077:180;40125:77;40122:1;40115:88;40222:4;40219:1;40212:15;40246:4;40243:1;40236:15;40263:180;40311:77;40308:1;40301:88;40408:4;40405:1;40398:15;40432:4;40429:1;40422:15;40449:180;40497:77;40494:1;40487:88;40594:4;40591:1;40584:15;40618:4;40615:1;40608:15;40635:117;40744:1;40741;40734:12;40758:117;40867:1;40864;40857:12;40881:117;40990:1;40987;40980:12;41004:117;41113:1;41110;41103:12;41127:117;41236:1;41233;41226:12;41250:117;41359:1;41356;41349:12;41373:102;41414:6;41465:2;41461:7;41456:2;41449:5;41445:14;41441:28;41431:38;;41373:102;;;:::o;41481:94::-;41514:8;41562:5;41558:2;41554:14;41533:35;;41481:94;;;:::o;41581:237::-;41721:34;41717:1;41709:6;41705:14;41698:58;41790:20;41785:2;41777:6;41773:15;41766:45;41581:237;:::o;41824:225::-;41964:34;41960:1;41952:6;41948:14;41941:58;42033:8;42028:2;42020:6;42016:15;42009:33;41824:225;:::o;42055:224::-;42195:34;42191:1;42183:6;42179:14;42172:58;42264:7;42259:2;42251:6;42247:15;42240:32;42055:224;:::o;42285:178::-;42425:30;42421:1;42413:6;42409:14;42402:54;42285:178;:::o;42469:170::-;42609:22;42605:1;42597:6;42593:14;42586:46;42469:170;:::o;42645:174::-;42785:26;42781:1;42773:6;42769:14;42762:50;42645:174;:::o;42825:223::-;42965:34;42961:1;42953:6;42949:14;42942:58;43034:6;43029:2;43021:6;43017:15;43010:31;42825:223;:::o;43054:175::-;43194:27;43190:1;43182:6;43178:14;43171:51;43054:175;:::o;43235:176::-;43375:28;43371:1;43363:6;43359:14;43352:52;43235:176;:::o;43417:231::-;43557:34;43553:1;43545:6;43541:14;43534:58;43626:14;43621:2;43613:6;43609:15;43602:39;43417:231;:::o;43654:182::-;43794:34;43790:1;43782:6;43778:14;43771:58;43654:182;:::o;43842:243::-;43982:34;43978:1;43970:6;43966:14;43959:58;44051:26;44046:2;44038:6;44034:15;44027:51;43842:243;:::o;44091:229::-;44231:34;44227:1;44219:6;44215:14;44208:58;44300:12;44295:2;44287:6;44283:15;44276:37;44091:229;:::o;44326:228::-;44466:34;44462:1;44454:6;44450:14;44443:58;44535:11;44530:2;44522:6;44518:15;44511:36;44326:228;:::o;44560:182::-;44700:34;44696:1;44688:6;44684:14;44677:58;44560:182;:::o;44748:231::-;44888:34;44884:1;44876:6;44872:14;44865:58;44957:14;44952:2;44944:6;44940:15;44933:39;44748:231;:::o;44985:182::-;45125:34;45121:1;45113:6;45109:14;45102:58;44985:182;:::o;45173:181::-;45313:33;45309:1;45301:6;45297:14;45290:57;45173:181;:::o;45360:220::-;45500:34;45496:1;45488:6;45484:14;45477:58;45569:3;45564:2;45556:6;45552:15;45545:28;45360:220;:::o;45586:114::-;;:::o;45706:170::-;45846:22;45842:1;45834:6;45830:14;45823:46;45706:170;:::o;45882:166::-;46022:18;46018:1;46010:6;46006:14;45999:42;45882:166;:::o;46054:236::-;46194:34;46190:1;46182:6;46178:14;46171:58;46263:19;46258:2;46250:6;46246:15;46239:44;46054:236;:::o;46296:179::-;46436:31;46432:1;46424:6;46420:14;46413:55;46296:179;:::o;46481:180::-;46621:32;46617:1;46609:6;46605:14;46598:56;46481:180;:::o;46667:169::-;46807:21;46803:1;46795:6;46791:14;46784:45;46667:169;:::o;46842:122::-;46915:24;46933:5;46915:24;:::i;:::-;46908:5;46905:35;46895:63;;46954:1;46951;46944:12;46895:63;46842:122;:::o;46970:116::-;47040:21;47055:5;47040:21;:::i;:::-;47033:5;47030:32;47020:60;;47076:1;47073;47066:12;47020:60;46970:116;:::o;47092:120::-;47164:23;47181:5;47164:23;:::i;:::-;47157:5;47154:34;47144:62;;47202:1;47199;47192:12;47144:62;47092:120;:::o;47218:122::-;47291:24;47309:5;47291:24;:::i;:::-;47284:5;47281:35;47271:63;;47330:1;47327;47320:12;47271:63;47218:122;:::o
Swarm Source
ipfs://2f5de79c6fd20c41c8eeaffed6575c590c0e829843db7328410fabcaaa26fe2b