ERC-721
Overview
Max Total Supply
1,000 BG
Holders
58
Total Transfers
-
Market
Onchain Market Cap
$0.00
Circulating Supply Market Cap
-
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
Contract Name:
BOXEDGenerals
Compiler Version
v0.8.9+commit.e5eed63a
Contract Source Code (Solidity)
/** *Submitted for verification at ftmscan.com on 2022-01-14 */ // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; /** * @dev Interface of the ERC20 standard as defined in the EIP. */ interface IERC20 { /** * @dev Returns the amount of tokens in existence. */ function totalSupply() external view returns (uint256); /** * @dev Returns the amount of tokens owned by `account`. */ function balanceOf(address account) external view returns (uint256); /** * @dev Moves `amount` tokens from the caller's account to `recipient`. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transfer(address recipient, uint256 amount) external returns (bool); /** * @dev Returns the remaining number of tokens that `spender` will be * allowed to spend on behalf of `owner` through {transferFrom}. This is * zero by default. * * This value changes when {approve} or {transferFrom} are called. */ function allowance(address owner, address spender) external view returns (uint256); /** * @dev Sets `amount` as the allowance of `spender` over the caller's tokens. * * Returns a boolean value indicating whether the operation succeeded. * * IMPORTANT: Beware that changing an allowance with this method brings the risk * that someone may use both the old and the new allowance by unfortunate * transaction ordering. One possible solution to mitigate this race * condition is to first reduce the spender's allowance to 0 and set the * desired value afterwards: * https://github.com/ethereum/EIPs/issues/20#issuecomment-263524729 * * Emits an {Approval} event. */ function approve(address spender, uint256 amount) external returns (bool); /** * @dev Moves `amount` tokens from `sender` to `recipient` using the * allowance mechanism. `amount` is then deducted from the caller's * allowance. * * Returns a boolean value indicating whether the operation succeeded. * * Emits a {Transfer} event. */ function transferFrom( address sender, address recipient, uint256 amount ) external returns (bool); /** * @dev Emitted when `value` tokens are moved from one account (`from`) to * another (`to`). * * Note that `value` may be zero. */ event Transfer(address indexed from, address indexed to, uint256 value); /** * @dev Emitted when the allowance of a `spender` for an `owner` is set by * a call to {approve}. `value` is the new allowance. */ event Approval( address indexed owner, address indexed spender, uint256 value ); } // File: @openzeppelin/contracts/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/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/IERC721Enumerable.sol pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/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/utils/Strings.sol pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Address.sol pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require( address(this).balance >= amount, "Address: insufficient balance" ); (bool success, ) = recipient.call{value: amount}(""); require( success, "Address: unable to send value, recipient may have reverted" ); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue( target, data, value, "Address: low-level call with value failed" ); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require( address(this).balance >= value, "Address: insufficient balance for call" ); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}( data ); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall( target, data, "Address: low-level static call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall( target, data, "Address: low-level delegate call failed" ); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/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/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/Context.sol pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol 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 { require(operator != _msgSender(), "ERC721: approve to caller"); _operatorApprovals[_msgSender()][operator] = approved; emit ApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require( _isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved" ); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require( _checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require( _exists(tokenId), "ERC721: operator query for nonexistent token" ); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _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); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require( ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own" ); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received( _msgSender(), from, tokenId, _data ) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert( "ERC721: transfer to non ERC721Receiver implementer" ); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require( index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds" ); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require( index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds" ); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: @openzeppelin/contracts/access/Ownable.sol pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred( address indexed previousOwner, address indexed newOwner ); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _setOwner(_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 { _setOwner(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" ); _setOwner(newOwner); } function _setOwner(address newOwner) private { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } pragma solidity >=0.7.0 <0.9.0; contract BOXEDGenerals is ERC721Enumerable, Ownable { using Strings for uint256; bool public alien; IERC20 dmd = IERC20(address(0x90E892FED501ae00596448aECF998C88816e5C0F)); address private AlienAddress = 0x365e82adAD2C86D38Bec033be04768c8eCd108e4; string baseURI; string public baseExtension = ".json"; uint256 public price = 15 ether; uint256 public MAX_SUPPLY = 1000; uint256 public constant MAX_MINT_PER_TX = 5; bool public paused = true; bool public revealed = false; string public notRevealedUri; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); alien = true; } // internal function _baseURI() internal view virtual override returns (string memory) { return baseURI; } // public function mint(uint256 _amount) public payable { uint256 supply = totalSupply(); if (alien == true) require( dmd.balanceOf(msg.sender) > 100000000000000000000 wei, "to buy NFT you need 100 DMD in your address" ); require(!paused); require( _amount > 0 && _amount <= MAX_MINT_PER_TX, "Can only mint between 1 and 5 tokens at once" ); require( supply + _amount <= MAX_SUPPLY, "Can't mint more than max supply" ); require(msg.value == price * _amount, "Wrong amount of FTM sent"); for (uint256 i = 1; i <= _amount; i++) { _safeMint(msg.sender, supply + i); } } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory tokenIds = new uint256[](ownerTokenCount); for (uint256 i; i < ownerTokenCount; i++) { tokenIds[i] = tokenOfOwnerByIndex(_owner, i); } return tokenIds; } function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require( _exists(tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return notRevealedUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string( abi.encodePacked( currentBaseURI, tokenId.toString(), baseExtension ) ) : ""; } function _alien() public onlyOwner { alien = !alien; } //only owner function showboobs() public onlyOwner { revealed = true; } function setPrice(uint256 _newprice) public onlyOwner { price = _newprice; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function pause(bool _state) public onlyOwner { paused = _state; } function burner (uint256 tokenId) public virtual { require(_isApprovedOrOwner(_msgSender(), tokenId), "You must own an NFT from this collection"); _burn(tokenId); } function SendNudes() public onlyOwner { uint256 Alien = ((address(this).balance * 100) / 100); payable(AlienAddress).transfer(Alien); } //in case ftm gets stuck or address change. function withdrawFTM(address payable _to, uint256 _amount) external onlyOwner { _to.transfer(_amount); } receive() external payable {} }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"_name","type":"string"},{"internalType":"string","name":"_symbol","type":"string"},{"internalType":"string","name":"_initBaseURI","type":"string"},{"internalType":"string","name":"_initNotRevealedUri","type":"string"}],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"MAX_MINT_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_SUPPLY","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"SendNudes","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"_alien","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"alien","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"burner","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"notRevealedUri","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":"bool","name":"_state","type":"bool"}],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"price","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"revealed","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newprice","type":"uint256"}],"name":"setPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"showboobs","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address payable","name":"_to","type":"address"},{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"withdrawFTM","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]
Contract Creation Code
60806040527390e892fed501ae00596448aecf998c88816e5c0f600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555073365e82adad2c86d38bec033be04768c8ecd108e4600c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600e9080519060200190620000fb92919062000462565b5067d02ab486cedc0000600f556103e86010556001601160006101000a81548160ff0219169083151502179055506000601160016101000a81548160ff0219169083151502179055503480156200015157600080fd5b5060405162005412380380620054128339818101604052810190620001779190620006af565b838381600090805190602001906200019192919062000462565b508060019080519060200190620001aa92919062000462565b505050620001cd620001c16200021460201b60201c565b6200021c60201b60201c565b620001de82620002e260201b60201c565b620001ef816200038d60201b60201c565b6001600a60146101000a81548160ff0219169083151502179055505050505062000885565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620002f26200021460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003186200043860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff161462000371576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200036890620007fe565b60405180910390fd5b80600d90805190602001906200038992919062000462565b5050565b6200039d6200021460201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003c36200043860201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200041c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200041390620007fe565b60405180910390fd5b80601290805190602001906200043492919062000462565b5050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b82805462000470906200084f565b90600052602060002090601f016020900481019282620004945760008555620004e0565b82601f10620004af57805160ff1916838001178555620004e0565b82800160010185558215620004e0579182015b82811115620004df578251825591602001919060010190620004c2565b5b509050620004ef9190620004f3565b5090565b5b808211156200050e576000816000905550600101620004f4565b5090565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200057b8262000530565b810181811067ffffffffffffffff821117156200059d576200059c62000541565b5b80604052505050565b6000620005b262000512565b9050620005c0828262000570565b919050565b600067ffffffffffffffff821115620005e357620005e262000541565b5b620005ee8262000530565b9050602081019050919050565b60005b838110156200061b578082015181840152602081019050620005fe565b838111156200062b576000848401525b50505050565b6000620006486200064284620005c5565b620005a6565b9050828152602081018484840111156200066757620006666200052b565b5b62000674848285620005fb565b509392505050565b600082601f83011262000694576200069362000526565b5b8151620006a684826020860162000631565b91505092915050565b60008060008060808587031215620006cc57620006cb6200051c565b5b600085015167ffffffffffffffff811115620006ed57620006ec62000521565b5b620006fb878288016200067c565b945050602085015167ffffffffffffffff8111156200071f576200071e62000521565b5b6200072d878288016200067c565b935050604085015167ffffffffffffffff81111562000751576200075062000521565b5b6200075f878288016200067c565b925050606085015167ffffffffffffffff81111562000783576200078262000521565b5b62000791878288016200067c565b91505092959194509250565b600082825260208201905092915050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000620007e66020836200079d565b9150620007f382620007ae565b602082019050919050565b600060208201905081810360008301526200081981620007d7565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200086857607f821691505b602082108114156200087f576200087e62000820565b5b50919050565b614b7d80620008956000396000f3fe6080604052600436106102345760003560e01c80636352211e1161012e578063a22cb465116100ab578063d4068acd1161006f578063d4068acd14610815578063da3ef23f1461083e578063e985e9c514610867578063f2c4ce1e146108a4578063f2fde38b146108cd5761023b565b8063a22cb46514610744578063b88d4fde1461076d578063be1963b514610796578063c6682862146107ad578063c87b56dd146107d85761023b565b806391b7f5ed116100f257806391b7f5ed1461067e578063948ea65c146106a757806395d89b41146106d2578063a035b1fe146106fd578063a0712d68146107285761023b565b80636352211e1461059757806370a08231146105d4578063715018a6146106115780638da5cb5b146106285780638ecad721146106535761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104c4578063518302271461050157806351d642741461052c57806355f804b3146105435780635c975abb1461056c5761023b565b80632f745c59146103df57806332cb6b0c1461041c57806342842e0e14610447578063438b63001461047057806347b5c007146104ad5761023b565b8063081c8c4411610203578063081c8c441461030e578063095ea7b31461033957806311db8d1b1461036257806318160ddd1461038b57806323b872dd146103b65761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061326f565b6108f6565b60405161027491906132b7565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f91906132fe565b610970565b005b3480156102b257600080fd5b506102bb610a09565b6040516102c891906133c4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061341c565b610a9b565b604051610305919061348a565b60405180910390f35b34801561031a57600080fd5b50610323610b20565b60405161033091906133c4565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906134d1565b610bae565b005b34801561036e57600080fd5b506103896004803603810190610384919061341c565b610cc6565b005b34801561039757600080fd5b506103a0610d22565b6040516103ad9190613520565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d8919061353b565b610d2f565b005b3480156103eb57600080fd5b50610406600480360381019061040191906134d1565b610d8f565b6040516104139190613520565b60405180910390f35b34801561042857600080fd5b50610431610e34565b60405161043e9190613520565b60405180910390f35b34801561045357600080fd5b5061046e6004803603810190610469919061353b565b610e3a565b005b34801561047c57600080fd5b506104976004803603810190610492919061358e565b610e5a565b6040516104a49190613679565b60405180910390f35b3480156104b957600080fd5b506104c2610f08565b005b3480156104d057600080fd5b506104eb60048036038101906104e6919061341c565b61100c565b6040516104f89190613520565b60405180910390f35b34801561050d57600080fd5b5061051661107d565b60405161052391906132b7565b60405180910390f35b34801561053857600080fd5b50610541611090565b005b34801561054f57600080fd5b5061056a600480360381019061056591906137d0565b611138565b005b34801561057857600080fd5b506105816111ce565b60405161058e91906132b7565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b9919061341c565b6111e1565b6040516105cb919061348a565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f6919061358e565b611293565b6040516106089190613520565b60405180910390f35b34801561061d57600080fd5b5061062661134b565b005b34801561063457600080fd5b5061063d6113d3565b60405161064a919061348a565b60405180910390f35b34801561065f57600080fd5b506106686113fd565b6040516106759190613520565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061341c565b611402565b005b3480156106b357600080fd5b506106bc611488565b6040516106c991906132b7565b60405180910390f35b3480156106de57600080fd5b506106e761149b565b6040516106f491906133c4565b60405180910390f35b34801561070957600080fd5b5061071261152d565b60405161071f9190613520565b60405180910390f35b610742600480360381019061073d919061341c565b611533565b005b34801561075057600080fd5b5061076b60048036038101906107669190613819565b611795565b005b34801561077957600080fd5b50610794600480360381019061078f91906138fa565b611916565b005b3480156107a257600080fd5b506107ab611978565b005b3480156107b957600080fd5b506107c2611a11565b6040516107cf91906133c4565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa919061341c565b611a9f565b60405161080c91906133c4565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906139bb565b611bf8565b005b34801561084a57600080fd5b50610865600480360381019061086091906137d0565b611cbf565b005b34801561087357600080fd5b5061088e600480360381019061088991906139fb565b611d55565b60405161089b91906132b7565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c691906137d0565b611de9565b005b3480156108d957600080fd5b506108f460048036038101906108ef919061358e565b611e7f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610969575061096882611f77565b5b9050919050565b610978612059565b73ffffffffffffffffffffffffffffffffffffffff166109966113d3565b73ffffffffffffffffffffffffffffffffffffffff16146109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390613a87565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a1890613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490613ad6565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aa682612061565b610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc90613b7a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610b2d90613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5990613ad6565b8015610ba65780601f10610b7b57610100808354040283529160200191610ba6565b820191906000526020600020905b815481529060010190602001808311610b8957829003601f168201915b505050505081565b6000610bb9826111e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190613c0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c49612059565b73ffffffffffffffffffffffffffffffffffffffff161480610c785750610c7781610c72612059565b611d55565b5b610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613c9e565b60405180910390fd5b610cc183836120cd565b505050565b610cd7610cd1612059565b82612186565b610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613d30565b60405180910390fd5b610d1f81612264565b50565b6000600880549050905090565b610d40610d3a612059565b82612186565b610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690613dc2565b60405180910390fd5b610d8a838383612375565b505050565b6000610d9a83611293565b8210610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613e54565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60105481565b610e5583838360405180602001604052806000815250611916565b505050565b60606000610e6783611293565b905060008167ffffffffffffffff811115610e8557610e846136a5565b5b604051908082528060200260200182016040528015610eb35781602001602082028036833780820191505090505b50905060005b82811015610efd57610ecb8582610d8f565b828281518110610ede57610edd613e74565b5b6020026020010181815250508080610ef590613ed2565b915050610eb9565b508092505050919050565b610f10612059565b73ffffffffffffffffffffffffffffffffffffffff16610f2e6113d3565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613a87565b60405180910390fd5b600060648047610f949190613f1b565b610f9e9190613fa4565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611008573d6000803e3d6000fd5b5050565b6000611016610d22565b8210611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90614047565b60405180910390fd5b6008828154811061106b5761106a613e74565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611098612059565b73ffffffffffffffffffffffffffffffffffffffff166110b66113d3565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390613a87565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b611140612059565b73ffffffffffffffffffffffffffffffffffffffff1661115e6113d3565b73ffffffffffffffffffffffffffffffffffffffff16146111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab90613a87565b60405180910390fd5b80600d90805190602001906111ca929190613160565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611281906140d9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb9061416b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611353612059565b73ffffffffffffffffffffffffffffffffffffffff166113716113d3565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613a87565b60405180910390fd5b6113d160006125d1565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600581565b61140a612059565b73ffffffffffffffffffffffffffffffffffffffff166114286113d3565b73ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613a87565b60405180910390fd5b80600f8190555050565b600a60149054906101000a900460ff1681565b6060600180546114aa90613ad6565b80601f01602080910402602001604051908101604052809291908181526020018280546114d690613ad6565b80156115235780601f106114f857610100808354040283529160200191611523565b820191906000526020600020905b81548152906001019060200180831161150657829003601f168201915b5050505050905090565b600f5481565b600061153d610d22565b905060011515600a60149054906101000a900460ff16151514156116515768056bc75e2d63100000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115c0919061348a565b60206040518083038186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161091906141a0565b11611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061423f565b60405180910390fd5b5b601160009054906101000a900460ff161561166b57600080fd5b60008211801561167c575060058211155b6116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906142d1565b60405180910390fd5b60105482826116ca91906142f1565b111561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614393565b60405180910390fd5b81600f546117199190613f1b565b341461175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611751906143ff565b60405180910390fd5b6000600190505b8281116117905761177d33828461177891906142f1565b612697565b808061178890613ed2565b915050611761565b505050565b61179d612059565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118029061446b565b60405180910390fd5b8060056000611818612059565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118c5612059565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190a91906132b7565b60405180910390a35050565b611927611921612059565b83612186565b611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90613dc2565b60405180910390fd5b611972848484846126b5565b50505050565b611980612059565b73ffffffffffffffffffffffffffffffffffffffff1661199e6113d3565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90613a87565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b600e8054611a1e90613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4a90613ad6565b8015611a975780601f10611a6c57610100808354040283529160200191611a97565b820191906000526020600020905b815481529060010190602001808311611a7a57829003601f168201915b505050505081565b6060611aaa82612061565b611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae0906144fd565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611b975760128054611b1290613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3e90613ad6565b8015611b8b5780601f10611b6057610100808354040283529160200191611b8b565b820191906000526020600020905b815481529060010190602001808311611b6e57829003601f168201915b50505050509050611bf3565b6000611ba1612711565b90506000815111611bc15760405180602001604052806000815250611bef565b80611bcb846127a3565b600e604051602001611bdf939291906145ed565b6040516020818303038152906040525b9150505b919050565b611c00612059565b73ffffffffffffffffffffffffffffffffffffffff16611c1e6113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90613a87565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cba573d6000803e3d6000fd5b505050565b611cc7612059565b73ffffffffffffffffffffffffffffffffffffffff16611ce56113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290613a87565b60405180910390fd5b80600e9080519060200190611d51929190613160565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611df1612059565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90613a87565b60405180910390fd5b8060129080519060200190611e7b929190613160565b5050565b611e87612059565b73ffffffffffffffffffffffffffffffffffffffff16611ea56113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef290613a87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614690565b60405180910390fd5b611f74816125d1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061204257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612052575061205182612904565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612140836111e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061219182612061565b6121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614722565b60405180910390fd5b60006121db836111e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061224a57508373ffffffffffffffffffffffffffffffffffffffff1661223284610a9b565b73ffffffffffffffffffffffffffffffffffffffff16145b8061225b575061225a8185611d55565b5b91505092915050565b600061226f826111e1565b905061227d8160008461296e565b6122886000836120cd565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d89190614742565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8273ffffffffffffffffffffffffffffffffffffffff16612395826111e1565b73ffffffffffffffffffffffffffffffffffffffff16146123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e2906147e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561245b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124529061487a565b60405180910390fd5b61246683838361296e565b6124716000826120cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c19190614742565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251891906142f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126b1828260405180602001604052806000815250612a82565b5050565b6126c0848484612375565b6126cc84848484612add565b61270b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127029061490c565b60405180910390fd5b50505050565b6060600d805461272090613ad6565b80601f016020809104026020016040519081016040528092919081815260200182805461274c90613ad6565b80156127995780601f1061276e57610100808354040283529160200191612799565b820191906000526020600020905b81548152906001019060200180831161277c57829003601f168201915b5050505050905090565b606060008214156127eb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ff565b600082905060005b6000821461281d57808061280690613ed2565b915050600a826128169190613fa4565b91506127f3565b60008167ffffffffffffffff811115612839576128386136a5565b5b6040519080825280601f01601f19166020018201604052801561286b5781602001600182028036833780820191505090505b5090505b600085146128f8576001826128849190614742565b9150600a85612893919061492c565b603061289f91906142f1565b60f81b8183815181106128b5576128b4613e74565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f19190613fa4565b945061286f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612979838383612c74565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129bc576129b781612c79565b6129fb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129fa576129f98382612cc2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3e57612a3981612e2f565b612a7d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a7c57612a7b8282612f00565b5b5b505050565b612a8c8383612f7f565b612a996000848484612add565b612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf9061490c565b60405180910390fd5b505050565b6000612afe8473ffffffffffffffffffffffffffffffffffffffff1661314d565b15612c67578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b27612059565b8786866040518563ffffffff1660e01b8152600401612b4994939291906149b2565b602060405180830381600087803b158015612b6357600080fd5b505af1925050508015612b9457506040513d601f19601f82011682018060405250810190612b919190614a13565b60015b612c17573d8060008114612bc4576040519150601f19603f3d011682016040523d82523d6000602084013e612bc9565b606091505b50600081511415612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c069061490c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c6c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ccf84611293565b612cd99190614742565b9050600060076000848152602001908152602001600020549050818114612dbe576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e439190614742565b9050600060096000848152602001908152602001600020549050600060088381548110612e7357612e72613e74565b5b906000526020600020015490508060088381548110612e9557612e94613e74565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ee457612ee3614a40565b5b6001900381819060005260206000200160009055905550505050565b6000612f0b83611293565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe690614abb565b60405180910390fd5b612ff881612061565b15613038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302f90614b27565b60405180910390fd5b6130446000838361296e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461309491906142f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461316c90613ad6565b90600052602060002090601f01602090048101928261318e57600085556131d5565b82601f106131a757805160ff19168380011785556131d5565b828001600101855582156131d5579182015b828111156131d45782518255916020019190600101906131b9565b5b5090506131e291906131e6565b5090565b5b808211156131ff5760008160009055506001016131e7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61324c81613217565b811461325757600080fd5b50565b60008135905061326981613243565b92915050565b6000602082840312156132855761328461320d565b5b60006132938482850161325a565b91505092915050565b60008115159050919050565b6132b18161329c565b82525050565b60006020820190506132cc60008301846132a8565b92915050565b6132db8161329c565b81146132e657600080fd5b50565b6000813590506132f8816132d2565b92915050565b6000602082840312156133145761331361320d565b5b6000613322848285016132e9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561336557808201518184015260208101905061334a565b83811115613374576000848401525b50505050565b6000601f19601f8301169050919050565b60006133968261332b565b6133a08185613336565b93506133b0818560208601613347565b6133b98161337a565b840191505092915050565b600060208201905081810360008301526133de818461338b565b905092915050565b6000819050919050565b6133f9816133e6565b811461340457600080fd5b50565b600081359050613416816133f0565b92915050565b6000602082840312156134325761343161320d565b5b600061344084828501613407565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061347482613449565b9050919050565b61348481613469565b82525050565b600060208201905061349f600083018461347b565b92915050565b6134ae81613469565b81146134b957600080fd5b50565b6000813590506134cb816134a5565b92915050565b600080604083850312156134e8576134e761320d565b5b60006134f6858286016134bc565b925050602061350785828601613407565b9150509250929050565b61351a816133e6565b82525050565b60006020820190506135356000830184613511565b92915050565b6000806000606084860312156135545761355361320d565b5b6000613562868287016134bc565b9350506020613573868287016134bc565b925050604061358486828701613407565b9150509250925092565b6000602082840312156135a4576135a361320d565b5b60006135b2848285016134bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135f0816133e6565b82525050565b600061360283836135e7565b60208301905092915050565b6000602082019050919050565b6000613626826135bb565b61363081856135c6565b935061363b836135d7565b8060005b8381101561366c57815161365388826135f6565b975061365e8361360e565b92505060018101905061363f565b5085935050505092915050565b60006020820190508181036000830152613693818461361b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136dd8261337a565b810181811067ffffffffffffffff821117156136fc576136fb6136a5565b5b80604052505050565b600061370f613203565b905061371b82826136d4565b919050565b600067ffffffffffffffff82111561373b5761373a6136a5565b5b6137448261337a565b9050602081019050919050565b82818337600083830152505050565b600061377361376e84613720565b613705565b90508281526020810184848401111561378f5761378e6136a0565b5b61379a848285613751565b509392505050565b600082601f8301126137b7576137b661369b565b5b81356137c7848260208601613760565b91505092915050565b6000602082840312156137e6576137e561320d565b5b600082013567ffffffffffffffff81111561380457613803613212565b5b613810848285016137a2565b91505092915050565b600080604083850312156138305761382f61320d565b5b600061383e858286016134bc565b925050602061384f858286016132e9565b9150509250929050565b600067ffffffffffffffff821115613874576138736136a5565b5b61387d8261337a565b9050602081019050919050565b600061389d61389884613859565b613705565b9050828152602081018484840111156138b9576138b86136a0565b5b6138c4848285613751565b509392505050565b600082601f8301126138e1576138e061369b565b5b81356138f184826020860161388a565b91505092915050565b600080600080608085870312156139145761391361320d565b5b6000613922878288016134bc565b9450506020613933878288016134bc565b935050604061394487828801613407565b925050606085013567ffffffffffffffff81111561396557613964613212565b5b613971878288016138cc565b91505092959194509250565b600061398882613449565b9050919050565b6139988161397d565b81146139a357600080fd5b50565b6000813590506139b58161398f565b92915050565b600080604083850312156139d2576139d161320d565b5b60006139e0858286016139a6565b92505060206139f185828601613407565b9150509250929050565b60008060408385031215613a1257613a1161320d565b5b6000613a20858286016134bc565b9250506020613a31858286016134bc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a71602083613336565b9150613a7c82613a3b565b602082019050919050565b60006020820190508181036000830152613aa081613a64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aee57607f821691505b60208210811415613b0257613b01613aa7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b64602c83613336565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf6602183613336565b9150613c0182613b9a565b604082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613c88603883613336565b9150613c9382613c2c565b604082019050919050565b60006020820190508181036000830152613cb781613c7b565b9050919050565b7f596f75206d757374206f776e20616e204e46542066726f6d207468697320636f60008201527f6c6c656374696f6e000000000000000000000000000000000000000000000000602082015250565b6000613d1a602883613336565b9150613d2582613cbe565b604082019050919050565b60006020820190508181036000830152613d4981613d0d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613dac603183613336565b9150613db782613d50565b604082019050919050565b60006020820190508181036000830152613ddb81613d9f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e3e602b83613336565b9150613e4982613de2565b604082019050919050565b60006020820190508181036000830152613e6d81613e31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613edd826133e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1057613f0f613ea3565b5b600182019050919050565b6000613f26826133e6565b9150613f31836133e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f6a57613f69613ea3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613faf826133e6565b9150613fba836133e6565b925082613fca57613fc9613f75565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614031602c83613336565b915061403c82613fd5565b604082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006140c3602983613336565b91506140ce82614067565b604082019050919050565b600060208201905081810360008301526140f2816140b6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614155602a83613336565b9150614160826140f9565b604082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b60008151905061419a816133f0565b92915050565b6000602082840312156141b6576141b561320d565b5b60006141c48482850161418b565b91505092915050565b7f746f20627579204e465420796f75206e6565642031303020444d4420696e207960008201527f6f75722061646472657373000000000000000000000000000000000000000000602082015250565b6000614229602b83613336565b9150614234826141cd565b604082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b7f43616e206f6e6c79206d696e74206265747765656e203120616e64203520746f60008201527f6b656e73206174206f6e63650000000000000000000000000000000000000000602082015250565b60006142bb602c83613336565b91506142c68261425f565b604082019050919050565b600060208201905081810360008301526142ea816142ae565b9050919050565b60006142fc826133e6565b9150614307836133e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561433c5761433b613ea3565b5b828201905092915050565b7f43616e2774206d696e74206d6f7265207468616e206d617820737570706c7900600082015250565b600061437d601f83613336565b915061438882614347565b602082019050919050565b600060208201905081810360008301526143ac81614370565b9050919050565b7f57726f6e6720616d6f756e74206f662046544d2073656e740000000000000000600082015250565b60006143e9601883613336565b91506143f4826143b3565b602082019050919050565b60006020820190508181036000830152614418816143dc565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614455601983613336565b91506144608261441f565b602082019050919050565b6000602082019050818103600083015261448481614448565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144e7602f83613336565b91506144f28261448b565b604082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b600081905092915050565b60006145338261332b565b61453d818561451d565b935061454d818560208601613347565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461457b81613ad6565b614585818661451d565b945060018216600081146145a057600181146145b1576145e4565b60ff198316865281860193506145e4565b6145ba85614559565b60005b838110156145dc578154818901526001820191506020810190506145bd565b838801955050505b50505092915050565b60006145f98286614528565b91506146058285614528565b9150614611828461456e565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061467a602683613336565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061470c602c83613336565b9150614717826146b0565b604082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b600061474d826133e6565b9150614758836133e6565b92508282101561476b5761476a613ea3565b5b828203905092915050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006147d2602983613336565b91506147dd82614776565b604082019050919050565b60006020820190508181036000830152614801816147c5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614864602483613336565b915061486f82614808565b604082019050919050565b6000602082019050818103600083015261489381614857565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148f6603283613336565b91506149018261489a565b604082019050919050565b60006020820190508181036000830152614925816148e9565b9050919050565b6000614937826133e6565b9150614942836133e6565b92508261495257614951613f75565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149848261495d565b61498e8185614968565b935061499e818560208601613347565b6149a78161337a565b840191505092915050565b60006080820190506149c7600083018761347b565b6149d4602083018661347b565b6149e16040830185613511565b81810360608301526149f38184614979565b905095945050505050565b600081519050614a0d81613243565b92915050565b600060208284031215614a2957614a2861320d565b5b6000614a37848285016149fe565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614aa5602083613336565b9150614ab082614a6f565b602082019050919050565b60006020820190508181036000830152614ad481614a98565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b11601c83613336565b9150614b1c82614adb565b602082019050919050565b60006020820190508181036000830152614b4081614b04565b905091905056fea2646970667358221220fa9b6bcb523893f24eeaa597ab5fb44eb9b707d957ce550dcc2fb41b3487ad6f64736f6c63430008090033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000d426f78656447656e6572616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024247000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f68747470733a2f2f646d642e6d7970696e6174612e636c6f75642f697066732f516d5655574e7a655755644357564c5a524c393854426a6d634b586e67656a36323848417469343278743363644d2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106102345760003560e01c80636352211e1161012e578063a22cb465116100ab578063d4068acd1161006f578063d4068acd14610815578063da3ef23f1461083e578063e985e9c514610867578063f2c4ce1e146108a4578063f2fde38b146108cd5761023b565b8063a22cb46514610744578063b88d4fde1461076d578063be1963b514610796578063c6682862146107ad578063c87b56dd146107d85761023b565b806391b7f5ed116100f257806391b7f5ed1461067e578063948ea65c146106a757806395d89b41146106d2578063a035b1fe146106fd578063a0712d68146107285761023b565b80636352211e1461059757806370a08231146105d4578063715018a6146106115780638da5cb5b146106285780638ecad721146106535761023b565b80632f745c59116101bc5780634f6ccce7116101805780634f6ccce7146104c4578063518302271461050157806351d642741461052c57806355f804b3146105435780635c975abb1461056c5761023b565b80632f745c59146103df57806332cb6b0c1461041c57806342842e0e14610447578063438b63001461047057806347b5c007146104ad5761023b565b8063081c8c4411610203578063081c8c441461030e578063095ea7b31461033957806311db8d1b1461036257806318160ddd1461038b57806323b872dd146103b65761023b565b806301ffc9a71461024057806302329a291461027d57806306fdde03146102a6578063081812fc146102d15761023b565b3661023b57005b600080fd5b34801561024c57600080fd5b506102676004803603810190610262919061326f565b6108f6565b60405161027491906132b7565b60405180910390f35b34801561028957600080fd5b506102a4600480360381019061029f91906132fe565b610970565b005b3480156102b257600080fd5b506102bb610a09565b6040516102c891906133c4565b60405180910390f35b3480156102dd57600080fd5b506102f860048036038101906102f3919061341c565b610a9b565b604051610305919061348a565b60405180910390f35b34801561031a57600080fd5b50610323610b20565b60405161033091906133c4565b60405180910390f35b34801561034557600080fd5b50610360600480360381019061035b91906134d1565b610bae565b005b34801561036e57600080fd5b506103896004803603810190610384919061341c565b610cc6565b005b34801561039757600080fd5b506103a0610d22565b6040516103ad9190613520565b60405180910390f35b3480156103c257600080fd5b506103dd60048036038101906103d8919061353b565b610d2f565b005b3480156103eb57600080fd5b50610406600480360381019061040191906134d1565b610d8f565b6040516104139190613520565b60405180910390f35b34801561042857600080fd5b50610431610e34565b60405161043e9190613520565b60405180910390f35b34801561045357600080fd5b5061046e6004803603810190610469919061353b565b610e3a565b005b34801561047c57600080fd5b506104976004803603810190610492919061358e565b610e5a565b6040516104a49190613679565b60405180910390f35b3480156104b957600080fd5b506104c2610f08565b005b3480156104d057600080fd5b506104eb60048036038101906104e6919061341c565b61100c565b6040516104f89190613520565b60405180910390f35b34801561050d57600080fd5b5061051661107d565b60405161052391906132b7565b60405180910390f35b34801561053857600080fd5b50610541611090565b005b34801561054f57600080fd5b5061056a600480360381019061056591906137d0565b611138565b005b34801561057857600080fd5b506105816111ce565b60405161058e91906132b7565b60405180910390f35b3480156105a357600080fd5b506105be60048036038101906105b9919061341c565b6111e1565b6040516105cb919061348a565b60405180910390f35b3480156105e057600080fd5b506105fb60048036038101906105f6919061358e565b611293565b6040516106089190613520565b60405180910390f35b34801561061d57600080fd5b5061062661134b565b005b34801561063457600080fd5b5061063d6113d3565b60405161064a919061348a565b60405180910390f35b34801561065f57600080fd5b506106686113fd565b6040516106759190613520565b60405180910390f35b34801561068a57600080fd5b506106a560048036038101906106a0919061341c565b611402565b005b3480156106b357600080fd5b506106bc611488565b6040516106c991906132b7565b60405180910390f35b3480156106de57600080fd5b506106e761149b565b6040516106f491906133c4565b60405180910390f35b34801561070957600080fd5b5061071261152d565b60405161071f9190613520565b60405180910390f35b610742600480360381019061073d919061341c565b611533565b005b34801561075057600080fd5b5061076b60048036038101906107669190613819565b611795565b005b34801561077957600080fd5b50610794600480360381019061078f91906138fa565b611916565b005b3480156107a257600080fd5b506107ab611978565b005b3480156107b957600080fd5b506107c2611a11565b6040516107cf91906133c4565b60405180910390f35b3480156107e457600080fd5b506107ff60048036038101906107fa919061341c565b611a9f565b60405161080c91906133c4565b60405180910390f35b34801561082157600080fd5b5061083c600480360381019061083791906139bb565b611bf8565b005b34801561084a57600080fd5b50610865600480360381019061086091906137d0565b611cbf565b005b34801561087357600080fd5b5061088e600480360381019061088991906139fb565b611d55565b60405161089b91906132b7565b60405180910390f35b3480156108b057600080fd5b506108cb60048036038101906108c691906137d0565b611de9565b005b3480156108d957600080fd5b506108f460048036038101906108ef919061358e565b611e7f565b005b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610969575061096882611f77565b5b9050919050565b610978612059565b73ffffffffffffffffffffffffffffffffffffffff166109966113d3565b73ffffffffffffffffffffffffffffffffffffffff16146109ec576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016109e390613a87565b60405180910390fd5b80601160006101000a81548160ff02191690831515021790555050565b606060008054610a1890613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054610a4490613ad6565b8015610a915780601f10610a6657610100808354040283529160200191610a91565b820191906000526020600020905b815481529060010190602001808311610a7457829003601f168201915b5050505050905090565b6000610aa682612061565b610ae5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610adc90613b7a565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60128054610b2d90613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054610b5990613ad6565b8015610ba65780601f10610b7b57610100808354040283529160200191610ba6565b820191906000526020600020905b815481529060010190602001808311610b8957829003601f168201915b505050505081565b6000610bb9826111e1565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610c2a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c2190613c0c565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610c49612059565b73ffffffffffffffffffffffffffffffffffffffff161480610c785750610c7781610c72612059565b611d55565b5b610cb7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cae90613c9e565b60405180910390fd5b610cc183836120cd565b505050565b610cd7610cd1612059565b82612186565b610d16576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d0d90613d30565b60405180910390fd5b610d1f81612264565b50565b6000600880549050905090565b610d40610d3a612059565b82612186565b610d7f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7690613dc2565b60405180910390fd5b610d8a838383612375565b505050565b6000610d9a83611293565b8210610ddb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dd290613e54565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b60105481565b610e5583838360405180602001604052806000815250611916565b505050565b60606000610e6783611293565b905060008167ffffffffffffffff811115610e8557610e846136a5565b5b604051908082528060200260200182016040528015610eb35781602001602082028036833780820191505090505b50905060005b82811015610efd57610ecb8582610d8f565b828281518110610ede57610edd613e74565b5b6020026020010181815250508080610ef590613ed2565b915050610eb9565b508092505050919050565b610f10612059565b73ffffffffffffffffffffffffffffffffffffffff16610f2e6113d3565b73ffffffffffffffffffffffffffffffffffffffff1614610f84576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f7b90613a87565b60405180910390fd5b600060648047610f949190613f1b565b610f9e9190613fa4565b9050600c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611008573d6000803e3d6000fd5b5050565b6000611016610d22565b8210611057576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161104e90614047565b60405180910390fd5b6008828154811061106b5761106a613e74565b5b90600052602060002001549050919050565b601160019054906101000a900460ff1681565b611098612059565b73ffffffffffffffffffffffffffffffffffffffff166110b66113d3565b73ffffffffffffffffffffffffffffffffffffffff161461110c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161110390613a87565b60405180910390fd5b600a60149054906101000a900460ff1615600a60146101000a81548160ff021916908315150217905550565b611140612059565b73ffffffffffffffffffffffffffffffffffffffff1661115e6113d3565b73ffffffffffffffffffffffffffffffffffffffff16146111b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111ab90613a87565b60405180910390fd5b80600d90805190602001906111ca929190613160565b5050565b601160009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561128a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611281906140d9565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611304576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112fb9061416b565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b611353612059565b73ffffffffffffffffffffffffffffffffffffffff166113716113d3565b73ffffffffffffffffffffffffffffffffffffffff16146113c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113be90613a87565b60405180910390fd5b6113d160006125d1565b565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600581565b61140a612059565b73ffffffffffffffffffffffffffffffffffffffff166114286113d3565b73ffffffffffffffffffffffffffffffffffffffff161461147e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161147590613a87565b60405180910390fd5b80600f8190555050565b600a60149054906101000a900460ff1681565b6060600180546114aa90613ad6565b80601f01602080910402602001604051908101604052809291908181526020018280546114d690613ad6565b80156115235780601f106114f857610100808354040283529160200191611523565b820191906000526020600020905b81548152906001019060200180831161150657829003601f168201915b5050505050905090565b600f5481565b600061153d610d22565b905060011515600a60149054906101000a900460ff16151514156116515768056bc75e2d63100000600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166370a08231336040518263ffffffff1660e01b81526004016115c0919061348a565b60206040518083038186803b1580156115d857600080fd5b505afa1580156115ec573d6000803e3d6000fd5b505050506040513d601f19601f8201168201806040525081019061161091906141a0565b11611650576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116479061423f565b60405180910390fd5b5b601160009054906101000a900460ff161561166b57600080fd5b60008211801561167c575060058211155b6116bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116b2906142d1565b60405180910390fd5b60105482826116ca91906142f1565b111561170b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161170290614393565b60405180910390fd5b81600f546117199190613f1b565b341461175a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611751906143ff565b60405180910390fd5b6000600190505b8281116117905761177d33828461177891906142f1565b612697565b808061178890613ed2565b915050611761565b505050565b61179d612059565b73ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561180b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118029061446b565b60405180910390fd5b8060056000611818612059565b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff166118c5612059565b73ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c318360405161190a91906132b7565b60405180910390a35050565b611927611921612059565b83612186565b611966576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195d90613dc2565b60405180910390fd5b611972848484846126b5565b50505050565b611980612059565b73ffffffffffffffffffffffffffffffffffffffff1661199e6113d3565b73ffffffffffffffffffffffffffffffffffffffff16146119f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb90613a87565b60405180910390fd5b6001601160016101000a81548160ff021916908315150217905550565b600e8054611a1e90613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054611a4a90613ad6565b8015611a975780601f10611a6c57610100808354040283529160200191611a97565b820191906000526020600020905b815481529060010190602001808311611a7a57829003601f168201915b505050505081565b6060611aaa82612061565b611ae9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ae0906144fd565b60405180910390fd5b60001515601160019054906101000a900460ff1615151415611b975760128054611b1290613ad6565b80601f0160208091040260200160405190810160405280929190818152602001828054611b3e90613ad6565b8015611b8b5780601f10611b6057610100808354040283529160200191611b8b565b820191906000526020600020905b815481529060010190602001808311611b6e57829003601f168201915b50505050509050611bf3565b6000611ba1612711565b90506000815111611bc15760405180602001604052806000815250611bef565b80611bcb846127a3565b600e604051602001611bdf939291906145ed565b6040516020818303038152906040525b9150505b919050565b611c00612059565b73ffffffffffffffffffffffffffffffffffffffff16611c1e6113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611c74576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c6b90613a87565b60405180910390fd5b8173ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015611cba573d6000803e3d6000fd5b505050565b611cc7612059565b73ffffffffffffffffffffffffffffffffffffffff16611ce56113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611d3b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d3290613a87565b60405180910390fd5b80600e9080519060200190611d51929190613160565b5050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611df1612059565b73ffffffffffffffffffffffffffffffffffffffff16611e0f6113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611e65576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5c90613a87565b60405180910390fd5b8060129080519060200190611e7b929190613160565b5050565b611e87612059565b73ffffffffffffffffffffffffffffffffffffffff16611ea56113d3565b73ffffffffffffffffffffffffffffffffffffffff1614611efb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ef290613a87565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611f6b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f6290614690565b60405180910390fd5b611f74816125d1565b50565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061204257507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80612052575061205182612904565b5b9050919050565b600033905090565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612140836111e1565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600061219182612061565b6121d0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121c790614722565b60405180910390fd5b60006121db836111e1565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff16148061224a57508373ffffffffffffffffffffffffffffffffffffffff1661223284610a9b565b73ffffffffffffffffffffffffffffffffffffffff16145b8061225b575061225a8185611d55565b5b91505092915050565b600061226f826111e1565b905061227d8160008461296e565b6122886000836120cd565b6001600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546122d89190614742565b925050819055506002600083815260200190815260200160002060006101000a81549073ffffffffffffffffffffffffffffffffffffffff021916905581600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b8273ffffffffffffffffffffffffffffffffffffffff16612395826111e1565b73ffffffffffffffffffffffffffffffffffffffff16146123eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123e2906147e8565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561245b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124529061487a565b60405180910390fd5b61246683838361296e565b6124716000826120cd565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546124c19190614742565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461251891906142f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6126b1828260405180602001604052806000815250612a82565b5050565b6126c0848484612375565b6126cc84848484612add565b61270b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127029061490c565b60405180910390fd5b50505050565b6060600d805461272090613ad6565b80601f016020809104026020016040519081016040528092919081815260200182805461274c90613ad6565b80156127995780601f1061276e57610100808354040283529160200191612799565b820191906000526020600020905b81548152906001019060200180831161277c57829003601f168201915b5050505050905090565b606060008214156127eb576040518060400160405280600181526020017f300000000000000000000000000000000000000000000000000000000000000081525090506128ff565b600082905060005b6000821461281d57808061280690613ed2565b915050600a826128169190613fa4565b91506127f3565b60008167ffffffffffffffff811115612839576128386136a5565b5b6040519080825280601f01601f19166020018201604052801561286b5781602001600182028036833780820191505090505b5090505b600085146128f8576001826128849190614742565b9150600a85612893919061492c565b603061289f91906142f1565b60f81b8183815181106128b5576128b4613e74565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a856128f19190613fa4565b945061286f565b8093505050505b919050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612979838383612c74565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156129bc576129b781612c79565b6129fb565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16146129fa576129f98382612cc2565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612a3e57612a3981612e2f565b612a7d565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612a7c57612a7b8282612f00565b5b5b505050565b612a8c8383612f7f565b612a996000848484612add565b612ad8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612acf9061490c565b60405180910390fd5b505050565b6000612afe8473ffffffffffffffffffffffffffffffffffffffff1661314d565b15612c67578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612b27612059565b8786866040518563ffffffff1660e01b8152600401612b4994939291906149b2565b602060405180830381600087803b158015612b6357600080fd5b505af1925050508015612b9457506040513d601f19601f82011682018060405250810190612b919190614a13565b60015b612c17573d8060008114612bc4576040519150601f19603f3d011682016040523d82523d6000602084013e612bc9565b606091505b50600081511415612c0f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612c069061490c565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612c6c565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b60006001612ccf84611293565b612cd99190614742565b9050600060076000848152602001908152602001600020549050818114612dbe576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b60006001600880549050612e439190614742565b9050600060096000848152602001908152602001600020549050600060088381548110612e7357612e72613e74565b5b906000526020600020015490508060088381548110612e9557612e94613e74565b5b906000526020600020018190555081600960008381526020019081526020016000208190555060096000858152602001908152602001600020600090556008805480612ee457612ee3614a40565b5b6001900381819060005260206000200160009055905550505050565b6000612f0b83611293565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612fef576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fe690614abb565b60405180910390fd5b612ff881612061565b15613038576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161302f90614b27565b60405180910390fd5b6130446000838361296e565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461309491906142f1565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b82805461316c90613ad6565b90600052602060002090601f01602090048101928261318e57600085556131d5565b82601f106131a757805160ff19168380011785556131d5565b828001600101855582156131d5579182015b828111156131d45782518255916020019190600101906131b9565b5b5090506131e291906131e6565b5090565b5b808211156131ff5760008160009055506001016131e7565b5090565b6000604051905090565b600080fd5b600080fd5b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b61324c81613217565b811461325757600080fd5b50565b60008135905061326981613243565b92915050565b6000602082840312156132855761328461320d565b5b60006132938482850161325a565b91505092915050565b60008115159050919050565b6132b18161329c565b82525050565b60006020820190506132cc60008301846132a8565b92915050565b6132db8161329c565b81146132e657600080fd5b50565b6000813590506132f8816132d2565b92915050565b6000602082840312156133145761331361320d565b5b6000613322848285016132e9565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561336557808201518184015260208101905061334a565b83811115613374576000848401525b50505050565b6000601f19601f8301169050919050565b60006133968261332b565b6133a08185613336565b93506133b0818560208601613347565b6133b98161337a565b840191505092915050565b600060208201905081810360008301526133de818461338b565b905092915050565b6000819050919050565b6133f9816133e6565b811461340457600080fd5b50565b600081359050613416816133f0565b92915050565b6000602082840312156134325761343161320d565b5b600061344084828501613407565b91505092915050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b600061347482613449565b9050919050565b61348481613469565b82525050565b600060208201905061349f600083018461347b565b92915050565b6134ae81613469565b81146134b957600080fd5b50565b6000813590506134cb816134a5565b92915050565b600080604083850312156134e8576134e761320d565b5b60006134f6858286016134bc565b925050602061350785828601613407565b9150509250929050565b61351a816133e6565b82525050565b60006020820190506135356000830184613511565b92915050565b6000806000606084860312156135545761355361320d565b5b6000613562868287016134bc565b9350506020613573868287016134bc565b925050604061358486828701613407565b9150509250925092565b6000602082840312156135a4576135a361320d565b5b60006135b2848285016134bc565b91505092915050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b6135f0816133e6565b82525050565b600061360283836135e7565b60208301905092915050565b6000602082019050919050565b6000613626826135bb565b61363081856135c6565b935061363b836135d7565b8060005b8381101561366c57815161365388826135f6565b975061365e8361360e565b92505060018101905061363f565b5085935050505092915050565b60006020820190508181036000830152613693818461361b565b905092915050565b600080fd5b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6136dd8261337a565b810181811067ffffffffffffffff821117156136fc576136fb6136a5565b5b80604052505050565b600061370f613203565b905061371b82826136d4565b919050565b600067ffffffffffffffff82111561373b5761373a6136a5565b5b6137448261337a565b9050602081019050919050565b82818337600083830152505050565b600061377361376e84613720565b613705565b90508281526020810184848401111561378f5761378e6136a0565b5b61379a848285613751565b509392505050565b600082601f8301126137b7576137b661369b565b5b81356137c7848260208601613760565b91505092915050565b6000602082840312156137e6576137e561320d565b5b600082013567ffffffffffffffff81111561380457613803613212565b5b613810848285016137a2565b91505092915050565b600080604083850312156138305761382f61320d565b5b600061383e858286016134bc565b925050602061384f858286016132e9565b9150509250929050565b600067ffffffffffffffff821115613874576138736136a5565b5b61387d8261337a565b9050602081019050919050565b600061389d61389884613859565b613705565b9050828152602081018484840111156138b9576138b86136a0565b5b6138c4848285613751565b509392505050565b600082601f8301126138e1576138e061369b565b5b81356138f184826020860161388a565b91505092915050565b600080600080608085870312156139145761391361320d565b5b6000613922878288016134bc565b9450506020613933878288016134bc565b935050604061394487828801613407565b925050606085013567ffffffffffffffff81111561396557613964613212565b5b613971878288016138cc565b91505092959194509250565b600061398882613449565b9050919050565b6139988161397d565b81146139a357600080fd5b50565b6000813590506139b58161398f565b92915050565b600080604083850312156139d2576139d161320d565b5b60006139e0858286016139a6565b92505060206139f185828601613407565b9150509250929050565b60008060408385031215613a1257613a1161320d565b5b6000613a20858286016134bc565b9250506020613a31858286016134bc565b9150509250929050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613a71602083613336565b9150613a7c82613a3b565b602082019050919050565b60006020820190508181036000830152613aa081613a64565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680613aee57607f821691505b60208210811415613b0257613b01613aa7565b5b50919050565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b6000613b64602c83613336565b9150613b6f82613b08565b604082019050919050565b60006020820190508181036000830152613b9381613b57565b9050919050565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b6000613bf6602183613336565b9150613c0182613b9a565b604082019050919050565b60006020820190508181036000830152613c2581613be9565b9050919050565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b6000613c88603883613336565b9150613c9382613c2c565b604082019050919050565b60006020820190508181036000830152613cb781613c7b565b9050919050565b7f596f75206d757374206f776e20616e204e46542066726f6d207468697320636f60008201527f6c6c656374696f6e000000000000000000000000000000000000000000000000602082015250565b6000613d1a602883613336565b9150613d2582613cbe565b604082019050919050565b60006020820190508181036000830152613d4981613d0d565b9050919050565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b6000613dac603183613336565b9150613db782613d50565b604082019050919050565b60006020820190508181036000830152613ddb81613d9f565b9050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b6000613e3e602b83613336565b9150613e4982613de2565b604082019050919050565b60006020820190508181036000830152613e6d81613e31565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000613edd826133e6565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415613f1057613f0f613ea3565b5b600182019050919050565b6000613f26826133e6565b9150613f31836133e6565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615613f6a57613f69613ea3565b5b828202905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b6000613faf826133e6565b9150613fba836133e6565b925082613fca57613fc9613f75565b5b828204905092915050565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6000614031602c83613336565b915061403c82613fd5565b604082019050919050565b6000602082019050818103600083015261406081614024565b9050919050565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b60006140c3602983613336565b91506140ce82614067565b604082019050919050565b600060208201905081810360008301526140f2816140b6565b9050919050565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b6000614155602a83613336565b9150614160826140f9565b604082019050919050565b6000602082019050818103600083015261418481614148565b9050919050565b60008151905061419a816133f0565b92915050565b6000602082840312156141b6576141b561320d565b5b60006141c48482850161418b565b91505092915050565b7f746f20627579204e465420796f75206e6565642031303020444d4420696e207960008201527f6f75722061646472657373000000000000000000000000000000000000000000602082015250565b6000614229602b83613336565b9150614234826141cd565b604082019050919050565b600060208201905081810360008301526142588161421c565b9050919050565b7f43616e206f6e6c79206d696e74206265747765656e203120616e64203520746f60008201527f6b656e73206174206f6e63650000000000000000000000000000000000000000602082015250565b60006142bb602c83613336565b91506142c68261425f565b604082019050919050565b600060208201905081810360008301526142ea816142ae565b9050919050565b60006142fc826133e6565b9150614307836133e6565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561433c5761433b613ea3565b5b828201905092915050565b7f43616e2774206d696e74206d6f7265207468616e206d617820737570706c7900600082015250565b600061437d601f83613336565b915061438882614347565b602082019050919050565b600060208201905081810360008301526143ac81614370565b9050919050565b7f57726f6e6720616d6f756e74206f662046544d2073656e740000000000000000600082015250565b60006143e9601883613336565b91506143f4826143b3565b602082019050919050565b60006020820190508181036000830152614418816143dc565b9050919050565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b6000614455601983613336565b91506144608261441f565b602082019050919050565b6000602082019050818103600083015261448481614448565b9050919050565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b60006144e7602f83613336565b91506144f28261448b565b604082019050919050565b60006020820190508181036000830152614516816144da565b9050919050565b600081905092915050565b60006145338261332b565b61453d818561451d565b935061454d818560208601613347565b80840191505092915050565b60008190508160005260206000209050919050565b6000815461457b81613ad6565b614585818661451d565b945060018216600081146145a057600181146145b1576145e4565b60ff198316865281860193506145e4565b6145ba85614559565b60005b838110156145dc578154818901526001820191506020810190506145bd565b838801955050505b50505092915050565b60006145f98286614528565b91506146058285614528565b9150614611828461456e565b9150819050949350505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061467a602683613336565b91506146858261461e565b604082019050919050565b600060208201905081810360008301526146a98161466d565b9050919050565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b600061470c602c83613336565b9150614717826146b0565b604082019050919050565b6000602082019050818103600083015261473b816146ff565b9050919050565b600061474d826133e6565b9150614758836133e6565b92508282101561476b5761476a613ea3565b5b828203905092915050565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b60006147d2602983613336565b91506147dd82614776565b604082019050919050565b60006020820190508181036000830152614801816147c5565b9050919050565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b6000614864602483613336565b915061486f82614808565b604082019050919050565b6000602082019050818103600083015261489381614857565b9050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b60006148f6603283613336565b91506149018261489a565b604082019050919050565b60006020820190508181036000830152614925816148e9565b9050919050565b6000614937826133e6565b9150614942836133e6565b92508261495257614951613f75565b5b828206905092915050565b600081519050919050565b600082825260208201905092915050565b60006149848261495d565b61498e8185614968565b935061499e818560208601613347565b6149a78161337a565b840191505092915050565b60006080820190506149c7600083018761347b565b6149d4602083018661347b565b6149e16040830185613511565b81810360608301526149f38184614979565b905095945050505050565b600081519050614a0d81613243565b92915050565b600060208284031215614a2957614a2861320d565b5b6000614a37848285016149fe565b91505092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b6000614aa5602083613336565b9150614ab082614a6f565b602082019050919050565b60006020820190508181036000830152614ad481614a98565b9050919050565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b6000614b11601c83613336565b9150614b1c82614adb565b602082019050919050565b60006020820190508181036000830152614b4081614b04565b905091905056fea2646970667358221220fa9b6bcb523893f24eeaa597ab5fb44eb9b707d957ce550dcc2fb41b3487ad6f64736f6c63430008090033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000180000000000000000000000000000000000000000000000000000000000000000d426f78656447656e6572616c730000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000024247000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000004f68747470733a2f2f646d642e6d7970696e6174612e636c6f75642f697066732f516d5655574e7a655755644357564c5a524c393854426a6d634b586e67656a36323848417469343278743363644d2f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): BoxedGenerals
Arg [1] : _symbol (string): BG
Arg [2] : _initBaseURI (string): https://dmd.mypinata.cloud/ipfs/QmVUWNzeWUdCWVLZRL98TBjmcKXngej628HAti42xt3cdM/
Arg [3] : _initNotRevealedUri (string):
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000180
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000d
Arg [5] : 426f78656447656e6572616c7300000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4247000000000000000000000000000000000000000000000000000000000000
Arg [8] : 000000000000000000000000000000000000000000000000000000000000004f
Arg [9] : 68747470733a2f2f646d642e6d7970696e6174612e636c6f75642f697066732f
Arg [10] : 516d5655574e7a655755644357564c5a524c393854426a6d634b586e67656a36
Arg [11] : 323848417469343278743363644d2f0000000000000000000000000000000000
Arg [12] : 0000000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
47964:4304:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39185:300;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51590:79;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26349:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28042:308;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48499:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27565:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51677:187;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39988:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29101:376;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39569:343;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48343:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;29548:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;49782:390;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51872:158;;;;;;;;;;;;;:::i;:::-;;40178:320;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48464:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50913:68;;;;;;;;;;;;;:::i;:::-;;51319:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48432:25;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25956:326;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25599:295;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47263:94;;;;;;;;;;;;;:::i;:::-;;46612:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48382:43;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51087:90;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48057:17;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26518:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48305:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48996:778;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28422:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29804:365;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51007:72;;;;;;;;;;;;;:::i;:::-;;48261:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;50180:725;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;52087:141;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;51431:151;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28820:214;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;51185:126;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47512:229;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39185:300;39332:4;39389:35;39374:50;;;:11;:50;;;;:103;;;;39441:36;39465:11;39441:23;:36::i;:::-;39374:103;39354:123;;39185:300;;;:::o;51590:79::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51655:6:::1;51646;;:15;;;;;;;;;;;;;;;;;;51590:79:::0;:::o;26349:100::-;26403:13;26436:5;26429:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26349:100;:::o;28042:308::-;28163:7;28210:16;28218:7;28210;:16::i;:::-;28188:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;28318:15;:24;28334:7;28318:24;;;;;;;;;;;;;;;;;;;;;28311:31;;28042:308;;;:::o;48499:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;27565:411::-;27646:13;27662:23;27677:7;27662:14;:23::i;:::-;27646:39;;27710:5;27704:11;;:2;:11;;;;27696:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27804:5;27788:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27813:37;27830:5;27837:12;:10;:12::i;:::-;27813:16;:37::i;:::-;27788:62;27766:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27947:21;27956:2;27960:7;27947:8;:21::i;:::-;27635:341;27565:411;;:::o;51677:187::-;51745:41;51764:12;:10;:12::i;:::-;51778:7;51745:18;:41::i;:::-;51737:94;;;;;;;;;;;;:::i;:::-;;;;;;;;;51842:14;51848:7;51842:5;:14::i;:::-;51677:187;:::o;39988:113::-;40049:7;40076:10;:17;;;;40069:24;;39988:113;:::o;29101:376::-;29310:41;29329:12;:10;:12::i;:::-;29343:7;29310:18;:41::i;:::-;29288:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;29441:28;29451:4;29457:2;29461:7;29441:9;:28::i;:::-;29101:376;;;:::o;39569:343::-;39711:7;39766:23;39783:5;39766:16;:23::i;:::-;39758:5;:31;39736:124;;;;;;;;;;;;:::i;:::-;;;;;;;;;39878:12;:19;39891:5;39878:19;;;;;;;;;;;;;;;:26;39898:5;39878:26;;;;;;;;;;;;39871:33;;39569:343;;;;:::o;48343:32::-;;;;:::o;29548:185::-;29686:39;29703:4;29709:2;29713:7;29686:39;;;;;;;;;;;;:16;:39::i;:::-;29548:185;;;:::o;49782:390::-;49869:16;49903:23;49929:17;49939:6;49929:9;:17::i;:::-;49903:43;;49957:25;49999:15;49985:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;49957:58;;50031:9;50026:113;50046:15;50042:1;:19;50026:113;;;50097:30;50117:6;50125:1;50097:19;:30::i;:::-;50083:8;50092:1;50083:11;;;;;;;;:::i;:::-;;;;;;;:44;;;;;50063:3;;;;;:::i;:::-;;;;50026:113;;;;50156:8;50149:15;;;;49782:390;;;:::o;51872:158::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51921:13:::1;51970:3;51963::::0;51939:21:::1;:27;;;;:::i;:::-;51938:35;;;;:::i;:::-;51921:53;;51993:12;;;;;;;;;;;51985:30;;:37;52016:5;51985:37;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;51910:120;51872:158::o:0;40178:320::-;40298:7;40353:30;:28;:30::i;:::-;40345:5;:38;40323:132;;;;;;;;;;;;:::i;:::-;;;;;;;;;40473:10;40484:5;40473:17;;;;;;;;:::i;:::-;;;;;;;;;;40466:24;;40178:320;;;:::o;48464:28::-;;;;;;;;;;;;;:::o;50913:68::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;50968:5:::1;;;;;;;;;;;50967:6;50959:5;;:14;;;;;;;;;;;;;;;;;;50913:68::o:0;51319:104::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51404:11:::1;51394:7;:21;;;;;;;;;;;;:::i;:::-;;51319:104:::0;:::o;48432:25::-;;;;;;;;;;;;;:::o;25956:326::-;26073:7;26098:13;26114:7;:16;26122:7;26114:16;;;;;;;;;;;;;;;;;;;;;26098:32;;26180:1;26163:19;;:5;:19;;;;26141:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;26269:5;26262:12;;;25956:326;;;:::o;25599:295::-;25716:7;25780:1;25763:19;;:5;:19;;;;25741:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;25870:9;:16;25880:5;25870:16;;;;;;;;;;;;;;;;25863:23;;25599:295;;;:::o;47263:94::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47328:21:::1;47346:1;47328:9;:21::i;:::-;47263:94::o:0;46612:87::-;46658:7;46685:6;;;;;;;;;;;46678:13;;46612:87;:::o;48382:43::-;48424:1;48382:43;:::o;51087:90::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51160:9:::1;51152:5;:17;;;;51087:90:::0;:::o;48057:17::-;;;;;;;;;;;;;:::o;26518:104::-;26574:13;26607:7;26600:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26518:104;:::o;48305:31::-;;;;:::o;48996:778::-;49053:14;49070:13;:11;:13::i;:::-;49053:30;;49107:4;49098:13;;:5;;;;;;;;;;;:13;;;49094:190;;;49180:25;49152:3;;;;;;;;;;;:13;;;49166:10;49152:25;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:53;49126:158;;;;;;;;;;;;:::i;:::-;;;;;;;;;49094:190;49304:6;;;;;;;;;;;49303:7;49295:16;;;;;;49354:1;49344:7;:11;:41;;;;;48424:1;49359:7;:26;;49344:41;49322:135;;;;;;;;;;;;:::i;:::-;;;;;;;;;49510:10;;49499:7;49490:6;:16;;;;:::i;:::-;:30;;49468:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;49619:7;49611:5;;:15;;;;:::i;:::-;49598:9;:28;49590:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;49673:9;49685:1;49673:13;;49668:99;49693:7;49688:1;:12;49668:99;;49722:33;49732:10;49753:1;49744:6;:10;;;;:::i;:::-;49722:9;:33::i;:::-;49702:3;;;;;:::i;:::-;;;;49668:99;;;;49042:732;48996:778;:::o;28422:327::-;28569:12;:10;:12::i;:::-;28557:24;;:8;:24;;;;28549:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;28669:8;28624:18;:32;28643:12;:10;:12::i;:::-;28624:32;;;;;;;;;;;;;;;:42;28657:8;28624:42;;;;;;;;;;;;;;;;:53;;;;;;;;;;;;;;;;;;28722:8;28693:48;;28708:12;:10;:12::i;:::-;28693:48;;;28732:8;28693:48;;;;;;:::i;:::-;;;;;;;;28422:327;;:::o;29804:365::-;29993:41;30012:12;:10;:12::i;:::-;30026:7;29993:18;:41::i;:::-;29971:140;;;;;;;;;;;;:::i;:::-;;;;;;;;;30122:39;30136:4;30142:2;30146:7;30155:5;30122:13;:39::i;:::-;29804:365;;;;:::o;51007:72::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51067:4:::1;51056:8;;:15;;;;;;;;;;;;;;;;;;51007:72::o:0;48261:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;50180:725::-;50298:13;50351:16;50359:7;50351;:16::i;:::-;50329:113;;;;;;;;;;;;:::i;:::-;;;;;;;;;50471:5;50459:17;;:8;;;;;;;;;;;:17;;;50455:71;;;50500:14;50493:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50455:71;50538:28;50569:10;:8;:10::i;:::-;50538:41;;50641:1;50616:14;50610:28;:32;:287;;;;;;;;;;;;;;;;;50734:14;50775:18;:7;:16;:18::i;:::-;50820:13;50691:165;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;50610:287;50590:307;;;50180:725;;;;:::o;52087:141::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;52199:3:::1;:12;;:21;52212:7;52199:21;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;52087:141:::0;;:::o;51431:151::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51557:17:::1;51541:13;:33;;;;;;;;;;;;:::i;:::-;;51431:151:::0;:::o;28820:214::-;28962:4;28991:18;:25;29010:5;28991:25;;;;;;;;;;;;;;;:35;29017:8;28991:35;;;;;;;;;;;;;;;;;;;;;;;;;28984:42;;28820:214;;;;:::o;51185:126::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;51288:15:::1;51271:14;:32;;;;;;;;;;;;:::i;:::-;;51185:126:::0;:::o;47512:229::-;46843:12;:10;:12::i;:::-;46832:23;;:7;:5;:7::i;:::-;:23;;;46824:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;47635:1:::1;47615:22;;:8;:22;;;;47593:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;47714:19;47724:8;47714:9;:19::i;:::-;47512:229:::0;:::o;25180:355::-;25327:4;25384:25;25369:40;;;:11;:40;;;;:105;;;;25441:33;25426:48;;;:11;:48;;;;25369:105;:158;;;;25491:36;25515:11;25491:23;:36::i;:::-;25369:158;25349:178;;25180:355;;;:::o;23654:98::-;23707:7;23734:10;23727:17;;23654:98;:::o;31716:127::-;31781:4;31833:1;31805:30;;:7;:16;31813:7;31805:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31798:37;;31716:127;;;:::o;35839:174::-;35941:2;35914:15;:24;35930:7;35914:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35997:7;35993:2;35959:46;;35968:23;35983:7;35968:14;:23::i;:::-;35959:46;;;;;;;;;;;;35839:174;;:::o;32010:452::-;32139:4;32183:16;32191:7;32183;:16::i;:::-;32161:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;32282:13;32298:23;32313:7;32298:14;:23::i;:::-;32282:39;;32351:5;32340:16;;:7;:16;;;:64;;;;32397:7;32373:31;;:20;32385:7;32373:11;:20::i;:::-;:31;;;32340:64;:113;;;;32421:32;32438:5;32445:7;32421:16;:32::i;:::-;32340:113;32332:122;;;32010:452;;;;:::o;34409:360::-;34469:13;34485:23;34500:7;34485:14;:23::i;:::-;34469:39;;34521:48;34542:5;34557:1;34561:7;34521:20;:48::i;:::-;34610:29;34627:1;34631:7;34610:8;:29::i;:::-;34672:1;34652:9;:16;34662:5;34652:16;;;;;;;;;;;;;;;;:21;;;;;;;:::i;:::-;;;;;;;;34691:7;:16;34699:7;34691:16;;;;;;;;;;;;34684:23;;;;;;;;;;;34753:7;34749:1;34725:36;;34734:5;34725:36;;;;;;;;;;;;34458:311;34409:360;:::o;35106:615::-;35279:4;35252:31;;:23;35267:7;35252:14;:23::i;:::-;:31;;;35230:122;;;;;;;;;;;;:::i;:::-;;;;;;;;;35385:1;35371:16;;:2;:16;;;;35363:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;35441:39;35462:4;35468:2;35472:7;35441:20;:39::i;:::-;35545:29;35562:1;35566:7;35545:8;:29::i;:::-;35606:1;35587:9;:15;35597:4;35587:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;35635:1;35618:9;:13;35628:2;35618:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;35666:2;35647:7;:16;35655:7;35647:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;35705:7;35701:2;35686:27;;35695:4;35686:27;;;;;;;;;;;;35106:615;;;:::o;47749:173::-;47805:16;47824:6;;;;;;;;;;;47805:25;;47850:8;47841:6;;:17;;;;;;;;;;;;;;;;;;47905:8;47874:40;;47895:8;47874:40;;;;;;;;;;;;47794:128;47749:173;:::o;32804:110::-;32880:26;32890:2;32894:7;32880:26;;;;;;;;;;;;:9;:26::i;:::-;32804:110;;:::o;31051:352::-;31208:28;31218:4;31224:2;31228:7;31208:9;:28::i;:::-;31269:48;31292:4;31298:2;31302:7;31311:5;31269:22;:48::i;:::-;31247:148;;;;;;;;;;;;:::i;:::-;;;;;;;;;31051:352;;;;:::o;48865:108::-;48925:13;48958:7;48951:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;48865:108;:::o;10999:723::-;11055:13;11285:1;11276:5;:10;11272:53;;;11303:10;;;;;;;;;;;;;;;;;;;;;11272:53;11335:12;11350:5;11335:20;;11366:14;11391:78;11406:1;11398:4;:9;11391:78;;11424:8;;;;;:::i;:::-;;;;11455:2;11447:10;;;;;:::i;:::-;;;11391:78;;;11479:19;11511:6;11501:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;11479:39;;11529:154;11545:1;11536:5;:10;11529:154;;11573:1;11563:11;;;;;:::i;:::-;;;11640:2;11632:5;:10;;;;:::i;:::-;11619:2;:24;;;;:::i;:::-;11606:39;;11589:6;11596;11589:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;11669:2;11660:11;;;;;:::i;:::-;;;11529:154;;;11707:6;11693:21;;;;;10999:723;;;;:::o;10478:207::-;10608:4;10652:25;10637:40;;;:11;:40;;;;10630:47;;10478:207;;;:::o;41111:589::-;41255:45;41282:4;41288:2;41292:7;41255:26;:45::i;:::-;41333:1;41317:18;;:4;:18;;;41313:187;;;41352:40;41384:7;41352:31;:40::i;:::-;41313:187;;;41422:2;41414:10;;:4;:10;;;41410:90;;41441:47;41474:4;41480:7;41441:32;:47::i;:::-;41410:90;41313:187;41528:1;41514:16;;:2;:16;;;41510:183;;;41547:45;41584:7;41547:36;:45::i;:::-;41510:183;;;41620:4;41614:10;;:2;:10;;;41610:83;;41641:40;41669:2;41673:7;41641:27;:40::i;:::-;41610:83;41510:183;41111:589;;;:::o;33141:321::-;33271:18;33277:2;33281:7;33271:5;:18::i;:::-;33322:54;33353:1;33357:2;33361:7;33370:5;33322:22;:54::i;:::-;33300:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;33141:321;;;:::o;36578:980::-;36733:4;36754:15;:2;:13;;;:15::i;:::-;36750:801;;;36823:2;36807:36;;;36866:12;:10;:12::i;:::-;36901:4;36928:7;36958:5;36807:175;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36786:710;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37182:1;37165:6;:13;:18;37161:320;;;37208:108;;;;;;;;;;:::i;:::-;;;;;;;;37161:320;37431:6;37425:13;37416:6;37412:2;37408:15;37401:38;36786:710;37056:41;;;37046:51;;;:6;:51;;;;37039:58;;;;;36750:801;37535:4;37528:11;;36578:980;;;;;;;:::o;38130:126::-;;;;:::o;42423:164::-;42527:10;:17;;;;42500:15;:24;42516:7;42500:24;;;;;;;;;;;:44;;;;42555:10;42571:7;42555:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42423:164;:::o;43214:1002::-;43494:22;43544:1;43519:22;43536:4;43519:16;:22::i;:::-;:26;;;;:::i;:::-;43494:51;;43556:18;43577:17;:26;43595:7;43577:26;;;;;;;;;;;;43556:47;;43724:14;43710:10;:28;43706:328;;43755:19;43777:12;:18;43790:4;43777:18;;;;;;;;;;;;;;;:34;43796:14;43777:34;;;;;;;;;;;;43755:56;;43861:11;43828:12;:18;43841:4;43828:18;;;;;;;;;;;;;;;:30;43847:10;43828:30;;;;;;;;;;;:44;;;;43978:10;43945:17;:30;43963:11;43945:30;;;;;;;;;;;:43;;;;43740:294;43706:328;44130:17;:26;44148:7;44130:26;;;;;;;;;;;44123:33;;;44174:12;:18;44187:4;44174:18;;;;;;;;;;;;;;;:34;44193:14;44174:34;;;;;;;;;;;44167:41;;;43309:907;;43214:1002;;:::o;44511:1079::-;44764:22;44809:1;44789:10;:17;;;;:21;;;;:::i;:::-;44764:46;;44821:18;44842:15;:24;44858:7;44842:24;;;;;;;;;;;;44821:45;;45193:19;45215:10;45226:14;45215:26;;;;;;;;:::i;:::-;;;;;;;;;;45193:48;;45279:11;45254:10;45265;45254:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;45390:10;45359:15;:28;45375:11;45359:28;;;;;;;;;;;:41;;;;45531:15;:24;45547:7;45531:24;;;;;;;;;;;45524:31;;;45566:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;44582:1008;;;44511:1079;:::o;42001:221::-;42086:14;42103:20;42120:2;42103:16;:20::i;:::-;42086:37;;42161:7;42134:12;:16;42147:2;42134:16;;;;;;;;;;;;;;;:24;42151:6;42134:24;;;;;;;;;;;:34;;;;42208:6;42179:17;:26;42197:7;42179:26;;;;;;;;;;;:35;;;;42075:147;42001:221;;:::o;33798:382::-;33892:1;33878:16;;:2;:16;;;;33870:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33951:16;33959:7;33951;:16::i;:::-;33950:17;33942:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;34013:45;34042:1;34046:2;34050:7;34013:20;:45::i;:::-;34088:1;34071:9;:13;34081:2;34071:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34119:2;34100:7;:16;34108:7;34100:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34164:7;34160:2;34139:33;;34156:1;34139:33;;;;;;;;;;;;33798:382;;:::o;13552:387::-;13612:4;13820:12;13887:7;13875:20;13867:28;;13930:1;13923:4;:8;13916:15;;;13552:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:149;370:7;410:66;403:5;399:78;388:89;;334:149;;;:::o;489:120::-;561:23;578:5;561:23;:::i;:::-;554:5;551:34;541:62;;599:1;596;589:12;541:62;489:120;:::o;615:137::-;660:5;698:6;685:20;676:29;;714:32;740:5;714:32;:::i;:::-;615:137;;;;:::o;758:327::-;816:6;865:2;853:9;844:7;840:23;836:32;833:119;;;871:79;;:::i;:::-;833:119;991:1;1016:52;1060:7;1051:6;1040:9;1036:22;1016:52;:::i;:::-;1006:62;;962:116;758:327;;;;:::o;1091:90::-;1125:7;1168:5;1161:13;1154:21;1143:32;;1091:90;;;:::o;1187:109::-;1268:21;1283:5;1268:21;:::i;:::-;1263:3;1256:34;1187:109;;:::o;1302:210::-;1389:4;1427:2;1416:9;1412:18;1404:26;;1440:65;1502:1;1491:9;1487:17;1478:6;1440:65;:::i;:::-;1302:210;;;;:::o;1518:116::-;1588:21;1603:5;1588:21;:::i;:::-;1581:5;1578:32;1568:60;;1624:1;1621;1614:12;1568:60;1518:116;:::o;1640:133::-;1683:5;1721:6;1708:20;1699:29;;1737:30;1761:5;1737:30;:::i;:::-;1640:133;;;;:::o;1779:323::-;1835:6;1884:2;1872:9;1863:7;1859:23;1855:32;1852:119;;;1890:79;;:::i;:::-;1852:119;2010:1;2035:50;2077:7;2068:6;2057:9;2053:22;2035:50;:::i;:::-;2025:60;;1981:114;1779:323;;;;:::o;2108:99::-;2160:6;2194:5;2188:12;2178:22;;2108:99;;;:::o;2213:169::-;2297:11;2331:6;2326:3;2319:19;2371:4;2366:3;2362:14;2347:29;;2213:169;;;;:::o;2388:307::-;2456:1;2466:113;2480:6;2477:1;2474:13;2466:113;;;2565:1;2560:3;2556:11;2550:18;2546:1;2541:3;2537:11;2530:39;2502:2;2499:1;2495:10;2490:15;;2466:113;;;2597:6;2594:1;2591:13;2588:101;;;2677:1;2668:6;2663:3;2659:16;2652:27;2588:101;2437:258;2388:307;;;:::o;2701:102::-;2742:6;2793:2;2789:7;2784:2;2777:5;2773:14;2769:28;2759:38;;2701:102;;;:::o;2809:364::-;2897:3;2925:39;2958:5;2925:39;:::i;:::-;2980:71;3044:6;3039:3;2980:71;:::i;:::-;2973:78;;3060:52;3105:6;3100:3;3093:4;3086:5;3082:16;3060:52;:::i;:::-;3137:29;3159:6;3137:29;:::i;:::-;3132:3;3128:39;3121:46;;2901:272;2809:364;;;;:::o;3179:313::-;3292:4;3330:2;3319:9;3315:18;3307:26;;3379:9;3373:4;3369:20;3365:1;3354:9;3350:17;3343:47;3407:78;3480:4;3471:6;3407:78;:::i;:::-;3399:86;;3179:313;;;;:::o;3498:77::-;3535:7;3564:5;3553:16;;3498:77;;;:::o;3581:122::-;3654:24;3672:5;3654:24;:::i;:::-;3647:5;3644:35;3634:63;;3693:1;3690;3683:12;3634:63;3581:122;:::o;3709:139::-;3755:5;3793:6;3780:20;3771:29;;3809:33;3836:5;3809:33;:::i;:::-;3709:139;;;;:::o;3854:329::-;3913:6;3962:2;3950:9;3941:7;3937:23;3933:32;3930:119;;;3968:79;;:::i;:::-;3930:119;4088:1;4113:53;4158:7;4149:6;4138:9;4134:22;4113:53;:::i;:::-;4103:63;;4059:117;3854:329;;;;:::o;4189:126::-;4226:7;4266:42;4259:5;4255:54;4244:65;;4189:126;;;:::o;4321:96::-;4358:7;4387:24;4405:5;4387:24;:::i;:::-;4376:35;;4321:96;;;:::o;4423:118::-;4510:24;4528:5;4510:24;:::i;:::-;4505:3;4498:37;4423:118;;:::o;4547:222::-;4640:4;4678:2;4667:9;4663:18;4655:26;;4691:71;4759:1;4748:9;4744:17;4735:6;4691:71;:::i;:::-;4547:222;;;;:::o;4775:122::-;4848:24;4866:5;4848:24;:::i;:::-;4841:5;4838:35;4828:63;;4887:1;4884;4877:12;4828:63;4775:122;:::o;4903:139::-;4949:5;4987:6;4974:20;4965:29;;5003:33;5030:5;5003:33;:::i;:::-;4903:139;;;;:::o;5048:474::-;5116:6;5124;5173:2;5161:9;5152:7;5148:23;5144:32;5141:119;;;5179:79;;:::i;:::-;5141:119;5299:1;5324:53;5369:7;5360:6;5349:9;5345:22;5324:53;:::i;:::-;5314:63;;5270:117;5426:2;5452:53;5497:7;5488:6;5477:9;5473:22;5452:53;:::i;:::-;5442:63;;5397:118;5048:474;;;;;:::o;5528:118::-;5615:24;5633:5;5615:24;:::i;:::-;5610:3;5603:37;5528:118;;:::o;5652:222::-;5745:4;5783:2;5772:9;5768:18;5760:26;;5796:71;5864:1;5853:9;5849:17;5840:6;5796:71;:::i;:::-;5652:222;;;;:::o;5880:619::-;5957:6;5965;5973;6022:2;6010:9;6001:7;5997:23;5993:32;5990:119;;;6028:79;;:::i;:::-;5990:119;6148:1;6173:53;6218:7;6209:6;6198:9;6194:22;6173:53;:::i;:::-;6163:63;;6119:117;6275:2;6301:53;6346:7;6337:6;6326:9;6322:22;6301:53;:::i;:::-;6291:63;;6246:118;6403:2;6429:53;6474:7;6465:6;6454:9;6450:22;6429:53;:::i;:::-;6419:63;;6374:118;5880:619;;;;;:::o;6505:329::-;6564:6;6613:2;6601:9;6592:7;6588:23;6584:32;6581:119;;;6619:79;;:::i;:::-;6581:119;6739:1;6764:53;6809:7;6800:6;6789:9;6785:22;6764:53;:::i;:::-;6754:63;;6710:117;6505:329;;;;:::o;6840:114::-;6907:6;6941:5;6935:12;6925:22;;6840:114;;;:::o;6960:184::-;7059:11;7093:6;7088:3;7081:19;7133:4;7128:3;7124:14;7109:29;;6960:184;;;;:::o;7150:132::-;7217:4;7240:3;7232:11;;7270:4;7265:3;7261:14;7253:22;;7150:132;;;:::o;7288:108::-;7365:24;7383:5;7365:24;:::i;:::-;7360:3;7353:37;7288:108;;:::o;7402:179::-;7471:10;7492:46;7534:3;7526:6;7492:46;:::i;:::-;7570:4;7565:3;7561:14;7547:28;;7402:179;;;;:::o;7587:113::-;7657:4;7689;7684:3;7680:14;7672:22;;7587:113;;;:::o;7736:732::-;7855:3;7884:54;7932:5;7884:54;:::i;:::-;7954:86;8033:6;8028:3;7954:86;:::i;:::-;7947:93;;8064:56;8114:5;8064:56;:::i;:::-;8143:7;8174:1;8159:284;8184:6;8181:1;8178:13;8159:284;;;8260:6;8254:13;8287:63;8346:3;8331:13;8287:63;:::i;:::-;8280:70;;8373:60;8426:6;8373:60;:::i;:::-;8363:70;;8219:224;8206:1;8203;8199:9;8194:14;;8159:284;;;8163:14;8459:3;8452:10;;7860:608;;;7736:732;;;;:::o;8474:373::-;8617:4;8655:2;8644:9;8640:18;8632:26;;8704:9;8698:4;8694:20;8690:1;8679:9;8675:17;8668:47;8732:108;8835:4;8826:6;8732:108;:::i;:::-;8724:116;;8474:373;;;;:::o;8853:117::-;8962:1;8959;8952:12;8976:117;9085:1;9082;9075:12;9099:180;9147:77;9144:1;9137:88;9244:4;9241:1;9234:15;9268:4;9265:1;9258:15;9285:281;9368:27;9390:4;9368:27;:::i;:::-;9360:6;9356:40;9498:6;9486:10;9483:22;9462:18;9450:10;9447:34;9444:62;9441:88;;;9509:18;;:::i;:::-;9441:88;9549:10;9545:2;9538:22;9328:238;9285:281;;:::o;9572:129::-;9606:6;9633:20;;:::i;:::-;9623:30;;9662:33;9690:4;9682:6;9662:33;:::i;:::-;9572:129;;;:::o;9707:308::-;9769:4;9859:18;9851:6;9848:30;9845:56;;;9881:18;;:::i;:::-;9845:56;9919:29;9941:6;9919:29;:::i;:::-;9911:37;;10003:4;9997;9993:15;9985:23;;9707:308;;;:::o;10021:154::-;10105:6;10100:3;10095;10082:30;10167:1;10158:6;10153:3;10149:16;10142:27;10021:154;;;:::o;10181:412::-;10259:5;10284:66;10300:49;10342:6;10300:49;:::i;:::-;10284:66;:::i;:::-;10275:75;;10373:6;10366:5;10359:21;10411:4;10404:5;10400:16;10449:3;10440:6;10435:3;10431:16;10428:25;10425:112;;;10456:79;;:::i;:::-;10425:112;10546:41;10580:6;10575:3;10570;10546:41;:::i;:::-;10265:328;10181:412;;;;;:::o;10613:340::-;10669:5;10718:3;10711:4;10703:6;10699:17;10695:27;10685:122;;10726:79;;:::i;:::-;10685:122;10843:6;10830:20;10868:79;10943:3;10935:6;10928:4;10920:6;10916:17;10868:79;:::i;:::-;10859:88;;10675:278;10613:340;;;;:::o;10959:509::-;11028:6;11077:2;11065:9;11056:7;11052:23;11048:32;11045:119;;;11083:79;;:::i;:::-;11045:119;11231:1;11220:9;11216:17;11203:31;11261:18;11253:6;11250:30;11247:117;;;11283:79;;:::i;:::-;11247:117;11388:63;11443:7;11434:6;11423:9;11419:22;11388:63;:::i;:::-;11378:73;;11174:287;10959:509;;;;:::o;11474:468::-;11539:6;11547;11596:2;11584:9;11575:7;11571:23;11567:32;11564:119;;;11602:79;;:::i;:::-;11564:119;11722:1;11747:53;11792:7;11783:6;11772:9;11768:22;11747:53;:::i;:::-;11737:63;;11693:117;11849:2;11875:50;11917:7;11908:6;11897:9;11893:22;11875:50;:::i;:::-;11865:60;;11820:115;11474:468;;;;;:::o;11948:307::-;12009:4;12099:18;12091:6;12088:30;12085:56;;;12121:18;;:::i;:::-;12085:56;12159:29;12181:6;12159:29;:::i;:::-;12151:37;;12243:4;12237;12233:15;12225:23;;11948:307;;;:::o;12261:410::-;12338:5;12363:65;12379:48;12420:6;12379:48;:::i;:::-;12363:65;:::i;:::-;12354:74;;12451:6;12444:5;12437:21;12489:4;12482:5;12478:16;12527:3;12518:6;12513:3;12509:16;12506:25;12503:112;;;12534:79;;:::i;:::-;12503:112;12624:41;12658:6;12653:3;12648;12624:41;:::i;:::-;12344:327;12261:410;;;;;:::o;12690:338::-;12745:5;12794:3;12787:4;12779:6;12775:17;12771:27;12761:122;;12802:79;;:::i;:::-;12761:122;12919:6;12906:20;12944:78;13018:3;13010:6;13003:4;12995:6;12991:17;12944:78;:::i;:::-;12935:87;;12751:277;12690:338;;;;:::o;13034:943::-;13129:6;13137;13145;13153;13202:3;13190:9;13181:7;13177:23;13173:33;13170:120;;;13209:79;;:::i;:::-;13170:120;13329:1;13354:53;13399:7;13390:6;13379:9;13375:22;13354:53;:::i;:::-;13344:63;;13300:117;13456:2;13482:53;13527:7;13518:6;13507:9;13503:22;13482:53;:::i;:::-;13472:63;;13427:118;13584:2;13610:53;13655:7;13646:6;13635:9;13631:22;13610:53;:::i;:::-;13600:63;;13555:118;13740:2;13729:9;13725:18;13712:32;13771:18;13763:6;13760:30;13757:117;;;13793:79;;:::i;:::-;13757:117;13898:62;13952:7;13943:6;13932:9;13928:22;13898:62;:::i;:::-;13888:72;;13683:287;13034:943;;;;;;;:::o;13983:104::-;14028:7;14057:24;14075:5;14057:24;:::i;:::-;14046:35;;13983:104;;;:::o;14093:138::-;14174:32;14200:5;14174:32;:::i;:::-;14167:5;14164:43;14154:71;;14221:1;14218;14211:12;14154:71;14093:138;:::o;14237:155::-;14291:5;14329:6;14316:20;14307:29;;14345:41;14380:5;14345:41;:::i;:::-;14237:155;;;;:::o;14398:490::-;14474:6;14482;14531:2;14519:9;14510:7;14506:23;14502:32;14499:119;;;14537:79;;:::i;:::-;14499:119;14657:1;14682:61;14735:7;14726:6;14715:9;14711:22;14682:61;:::i;:::-;14672:71;;14628:125;14792:2;14818:53;14863:7;14854:6;14843:9;14839:22;14818:53;:::i;:::-;14808:63;;14763:118;14398:490;;;;;:::o;14894:474::-;14962:6;14970;15019:2;15007:9;14998:7;14994:23;14990:32;14987:119;;;15025:79;;:::i;:::-;14987:119;15145:1;15170:53;15215:7;15206:6;15195:9;15191:22;15170:53;:::i;:::-;15160:63;;15116:117;15272:2;15298:53;15343:7;15334:6;15323:9;15319:22;15298:53;:::i;:::-;15288:63;;15243:118;14894:474;;;;;:::o;15374:182::-;15514:34;15510:1;15502:6;15498:14;15491:58;15374:182;:::o;15562:366::-;15704:3;15725:67;15789:2;15784:3;15725:67;:::i;:::-;15718:74;;15801:93;15890:3;15801:93;:::i;:::-;15919:2;15914:3;15910:12;15903:19;;15562:366;;;:::o;15934:419::-;16100:4;16138:2;16127:9;16123:18;16115:26;;16187:9;16181:4;16177:20;16173:1;16162:9;16158:17;16151:47;16215:131;16341:4;16215:131;:::i;:::-;16207:139;;15934:419;;;:::o;16359:180::-;16407:77;16404:1;16397:88;16504:4;16501:1;16494:15;16528:4;16525:1;16518:15;16545:320;16589:6;16626:1;16620:4;16616:12;16606:22;;16673:1;16667:4;16663:12;16694:18;16684:81;;16750:4;16742:6;16738:17;16728:27;;16684:81;16812:2;16804:6;16801:14;16781:18;16778:38;16775:84;;;16831:18;;:::i;:::-;16775:84;16596:269;16545:320;;;:::o;16871:231::-;17011:34;17007:1;16999:6;16995:14;16988:58;17080:14;17075:2;17067:6;17063:15;17056:39;16871:231;:::o;17108:366::-;17250:3;17271:67;17335:2;17330:3;17271:67;:::i;:::-;17264:74;;17347:93;17436:3;17347:93;:::i;:::-;17465:2;17460:3;17456:12;17449:19;;17108:366;;;:::o;17480:419::-;17646:4;17684:2;17673:9;17669:18;17661:26;;17733:9;17727:4;17723:20;17719:1;17708:9;17704:17;17697:47;17761:131;17887:4;17761:131;:::i;:::-;17753:139;;17480:419;;;:::o;17905:220::-;18045:34;18041:1;18033:6;18029:14;18022:58;18114:3;18109:2;18101:6;18097:15;18090:28;17905:220;:::o;18131:366::-;18273:3;18294:67;18358:2;18353:3;18294:67;:::i;:::-;18287:74;;18370:93;18459:3;18370:93;:::i;:::-;18488:2;18483:3;18479:12;18472:19;;18131:366;;;:::o;18503:419::-;18669:4;18707:2;18696:9;18692:18;18684:26;;18756:9;18750:4;18746:20;18742:1;18731:9;18727:17;18720:47;18784:131;18910:4;18784:131;:::i;:::-;18776:139;;18503:419;;;:::o;18928:243::-;19068:34;19064:1;19056:6;19052:14;19045:58;19137:26;19132:2;19124:6;19120:15;19113:51;18928:243;:::o;19177:366::-;19319:3;19340:67;19404:2;19399:3;19340:67;:::i;:::-;19333:74;;19416:93;19505:3;19416:93;:::i;:::-;19534:2;19529:3;19525:12;19518:19;;19177:366;;;:::o;19549:419::-;19715:4;19753:2;19742:9;19738:18;19730:26;;19802:9;19796:4;19792:20;19788:1;19777:9;19773:17;19766:47;19830:131;19956:4;19830:131;:::i;:::-;19822:139;;19549:419;;;:::o;19974:227::-;20114:34;20110:1;20102:6;20098:14;20091:58;20183:10;20178:2;20170:6;20166:15;20159:35;19974:227;:::o;20207:366::-;20349:3;20370:67;20434:2;20429:3;20370:67;:::i;:::-;20363:74;;20446:93;20535:3;20446:93;:::i;:::-;20564:2;20559:3;20555:12;20548:19;;20207:366;;;:::o;20579:419::-;20745:4;20783:2;20772:9;20768:18;20760:26;;20832:9;20826:4;20822:20;20818:1;20807:9;20803:17;20796:47;20860:131;20986:4;20860:131;:::i;:::-;20852:139;;20579:419;;;:::o;21004:236::-;21144:34;21140:1;21132:6;21128:14;21121:58;21213:19;21208:2;21200:6;21196:15;21189:44;21004:236;:::o;21246:366::-;21388:3;21409:67;21473:2;21468:3;21409:67;:::i;:::-;21402:74;;21485:93;21574:3;21485:93;:::i;:::-;21603:2;21598:3;21594:12;21587:19;;21246:366;;;:::o;21618:419::-;21784:4;21822:2;21811:9;21807:18;21799:26;;21871:9;21865:4;21861:20;21857:1;21846:9;21842:17;21835:47;21899:131;22025:4;21899:131;:::i;:::-;21891:139;;21618:419;;;:::o;22043:230::-;22183:34;22179:1;22171:6;22167:14;22160:58;22252:13;22247:2;22239:6;22235:15;22228:38;22043:230;:::o;22279:366::-;22421:3;22442:67;22506:2;22501:3;22442:67;:::i;:::-;22435:74;;22518:93;22607:3;22518:93;:::i;:::-;22636:2;22631:3;22627:12;22620:19;;22279:366;;;:::o;22651:419::-;22817:4;22855:2;22844:9;22840:18;22832:26;;22904:9;22898:4;22894:20;22890:1;22879:9;22875:17;22868:47;22932:131;23058:4;22932:131;:::i;:::-;22924:139;;22651:419;;;:::o;23076:180::-;23124:77;23121:1;23114:88;23221:4;23218:1;23211:15;23245:4;23242:1;23235:15;23262:180;23310:77;23307:1;23300:88;23407:4;23404:1;23397:15;23431:4;23428:1;23421:15;23448:233;23487:3;23510:24;23528:5;23510:24;:::i;:::-;23501:33;;23556:66;23549:5;23546:77;23543:103;;;23626:18;;:::i;:::-;23543:103;23673:1;23666:5;23662:13;23655:20;;23448:233;;;:::o;23687:348::-;23727:7;23750:20;23768:1;23750:20;:::i;:::-;23745:25;;23784:20;23802:1;23784:20;:::i;:::-;23779:25;;23972:1;23904:66;23900:74;23897:1;23894:81;23889:1;23882:9;23875:17;23871:105;23868:131;;;23979:18;;:::i;:::-;23868:131;24027:1;24024;24020:9;24009:20;;23687:348;;;;:::o;24041:180::-;24089:77;24086:1;24079:88;24186:4;24183:1;24176:15;24210:4;24207:1;24200:15;24227:185;24267:1;24284:20;24302:1;24284:20;:::i;:::-;24279:25;;24318:20;24336:1;24318:20;:::i;:::-;24313:25;;24357:1;24347:35;;24362:18;;:::i;:::-;24347:35;24404:1;24401;24397:9;24392:14;;24227:185;;;;:::o;24418:231::-;24558:34;24554:1;24546:6;24542:14;24535:58;24627:14;24622:2;24614:6;24610:15;24603:39;24418:231;:::o;24655:366::-;24797:3;24818:67;24882:2;24877:3;24818:67;:::i;:::-;24811:74;;24894:93;24983:3;24894:93;:::i;:::-;25012:2;25007:3;25003:12;24996:19;;24655:366;;;:::o;25027:419::-;25193:4;25231:2;25220:9;25216:18;25208:26;;25280:9;25274:4;25270:20;25266:1;25255:9;25251:17;25244:47;25308:131;25434:4;25308:131;:::i;:::-;25300:139;;25027:419;;;:::o;25452:228::-;25592:34;25588:1;25580:6;25576:14;25569:58;25661:11;25656:2;25648:6;25644:15;25637:36;25452:228;:::o;25686:366::-;25828:3;25849:67;25913:2;25908:3;25849:67;:::i;:::-;25842:74;;25925:93;26014:3;25925:93;:::i;:::-;26043:2;26038:3;26034:12;26027:19;;25686:366;;;:::o;26058:419::-;26224:4;26262:2;26251:9;26247:18;26239:26;;26311:9;26305:4;26301:20;26297:1;26286:9;26282:17;26275:47;26339:131;26465:4;26339:131;:::i;:::-;26331:139;;26058:419;;;:::o;26483:229::-;26623:34;26619:1;26611:6;26607:14;26600:58;26692:12;26687:2;26679:6;26675:15;26668:37;26483:229;:::o;26718:366::-;26860:3;26881:67;26945:2;26940:3;26881:67;:::i;:::-;26874:74;;26957:93;27046:3;26957:93;:::i;:::-;27075:2;27070:3;27066:12;27059:19;;26718:366;;;:::o;27090:419::-;27256:4;27294:2;27283:9;27279:18;27271:26;;27343:9;27337:4;27333:20;27329:1;27318:9;27314:17;27307:47;27371:131;27497:4;27371:131;:::i;:::-;27363:139;;27090:419;;;:::o;27515:143::-;27572:5;27603:6;27597:13;27588:22;;27619:33;27646:5;27619:33;:::i;:::-;27515:143;;;;:::o;27664:351::-;27734:6;27783:2;27771:9;27762:7;27758:23;27754:32;27751:119;;;27789:79;;:::i;:::-;27751:119;27909:1;27934:64;27990:7;27981:6;27970:9;27966:22;27934:64;:::i;:::-;27924:74;;27880:128;27664:351;;;;:::o;28021:230::-;28161:34;28157:1;28149:6;28145:14;28138:58;28230:13;28225:2;28217:6;28213:15;28206:38;28021:230;:::o;28257:366::-;28399:3;28420:67;28484:2;28479:3;28420:67;:::i;:::-;28413:74;;28496:93;28585:3;28496:93;:::i;:::-;28614:2;28609:3;28605:12;28598:19;;28257:366;;;:::o;28629:419::-;28795:4;28833:2;28822:9;28818:18;28810:26;;28882:9;28876:4;28872:20;28868:1;28857:9;28853:17;28846:47;28910:131;29036:4;28910:131;:::i;:::-;28902:139;;28629:419;;;:::o;29054:231::-;29194:34;29190:1;29182:6;29178:14;29171:58;29263:14;29258:2;29250:6;29246:15;29239:39;29054:231;:::o;29291:366::-;29433:3;29454:67;29518:2;29513:3;29454:67;:::i;:::-;29447:74;;29530:93;29619:3;29530:93;:::i;:::-;29648:2;29643:3;29639:12;29632:19;;29291:366;;;:::o;29663:419::-;29829:4;29867:2;29856:9;29852:18;29844:26;;29916:9;29910:4;29906:20;29902:1;29891:9;29887:17;29880:47;29944:131;30070:4;29944:131;:::i;:::-;29936:139;;29663:419;;;:::o;30088:305::-;30128:3;30147:20;30165:1;30147:20;:::i;:::-;30142:25;;30181:20;30199:1;30181:20;:::i;:::-;30176:25;;30335:1;30267:66;30263:74;30260:1;30257:81;30254:107;;;30341:18;;:::i;:::-;30254:107;30385:1;30382;30378:9;30371:16;;30088:305;;;;:::o;30399:181::-;30539:33;30535:1;30527:6;30523:14;30516:57;30399:181;:::o;30586:366::-;30728:3;30749:67;30813:2;30808:3;30749:67;:::i;:::-;30742:74;;30825:93;30914:3;30825:93;:::i;:::-;30943:2;30938:3;30934:12;30927:19;;30586:366;;;:::o;30958:419::-;31124:4;31162:2;31151:9;31147:18;31139:26;;31211:9;31205:4;31201:20;31197:1;31186:9;31182:17;31175:47;31239:131;31365:4;31239:131;:::i;:::-;31231:139;;30958:419;;;:::o;31383:174::-;31523:26;31519:1;31511:6;31507:14;31500:50;31383:174;:::o;31563:366::-;31705:3;31726:67;31790:2;31785:3;31726:67;:::i;:::-;31719:74;;31802:93;31891:3;31802:93;:::i;:::-;31920:2;31915:3;31911:12;31904:19;;31563:366;;;:::o;31935:419::-;32101:4;32139:2;32128:9;32124:18;32116:26;;32188:9;32182:4;32178:20;32174:1;32163:9;32159:17;32152:47;32216:131;32342:4;32216:131;:::i;:::-;32208:139;;31935:419;;;:::o;32360:175::-;32500:27;32496:1;32488:6;32484:14;32477:51;32360:175;:::o;32541:366::-;32683:3;32704:67;32768:2;32763:3;32704:67;:::i;:::-;32697:74;;32780:93;32869:3;32780:93;:::i;:::-;32898:2;32893:3;32889:12;32882:19;;32541:366;;;:::o;32913:419::-;33079:4;33117:2;33106:9;33102:18;33094:26;;33166:9;33160:4;33156:20;33152:1;33141:9;33137:17;33130:47;33194:131;33320:4;33194:131;:::i;:::-;33186:139;;32913:419;;;:::o;33338:234::-;33478:34;33474:1;33466:6;33462:14;33455:58;33547:17;33542:2;33534:6;33530:15;33523:42;33338:234;:::o;33578:366::-;33720:3;33741:67;33805:2;33800:3;33741:67;:::i;:::-;33734:74;;33817:93;33906:3;33817:93;:::i;:::-;33935:2;33930:3;33926:12;33919:19;;33578:366;;;:::o;33950:419::-;34116:4;34154:2;34143:9;34139:18;34131:26;;34203:9;34197:4;34193:20;34189:1;34178:9;34174:17;34167:47;34231:131;34357:4;34231:131;:::i;:::-;34223:139;;33950:419;;;:::o;34375:148::-;34477:11;34514:3;34499:18;;34375:148;;;;:::o;34529:377::-;34635:3;34663:39;34696:5;34663:39;:::i;:::-;34718:89;34800:6;34795:3;34718:89;:::i;:::-;34711:96;;34816:52;34861:6;34856:3;34849:4;34842:5;34838:16;34816:52;:::i;:::-;34893:6;34888:3;34884:16;34877:23;;34639:267;34529:377;;;;:::o;34912:141::-;34961:4;34984:3;34976:11;;35007:3;35004:1;34997:14;35041:4;35038:1;35028:18;35020:26;;34912:141;;;:::o;35083:845::-;35186:3;35223:5;35217:12;35252:36;35278:9;35252:36;:::i;:::-;35304:89;35386:6;35381:3;35304:89;:::i;:::-;35297:96;;35424:1;35413:9;35409:17;35440:1;35435:137;;;;35586:1;35581:341;;;;35402:520;;35435:137;35519:4;35515:9;35504;35500:25;35495:3;35488:38;35555:6;35550:3;35546:16;35539:23;;35435:137;;35581:341;35648:38;35680:5;35648:38;:::i;:::-;35708:1;35722:154;35736:6;35733:1;35730:13;35722:154;;;35810:7;35804:14;35800:1;35795:3;35791:11;35784:35;35860:1;35851:7;35847:15;35836:26;;35758:4;35755:1;35751:12;35746:17;;35722:154;;;35905:6;35900:3;35896:16;35889:23;;35588:334;;35402:520;;35190:738;;35083:845;;;;:::o;35934:589::-;36159:3;36181:95;36272:3;36263:6;36181:95;:::i;:::-;36174:102;;36293:95;36384:3;36375:6;36293:95;:::i;:::-;36286:102;;36405:92;36493:3;36484:6;36405:92;:::i;:::-;36398:99;;36514:3;36507:10;;35934:589;;;;;;:::o;36529:225::-;36669:34;36665:1;36657:6;36653:14;36646:58;36738:8;36733:2;36725:6;36721:15;36714:33;36529:225;:::o;36760:366::-;36902:3;36923:67;36987:2;36982:3;36923:67;:::i;:::-;36916:74;;36999:93;37088:3;36999:93;:::i;:::-;37117:2;37112:3;37108:12;37101:19;;36760:366;;;:::o;37132:419::-;37298:4;37336:2;37325:9;37321:18;37313:26;;37385:9;37379:4;37375:20;37371:1;37360:9;37356:17;37349:47;37413:131;37539:4;37413:131;:::i;:::-;37405:139;;37132:419;;;:::o;37557:231::-;37697:34;37693:1;37685:6;37681:14;37674:58;37766:14;37761:2;37753:6;37749:15;37742:39;37557:231;:::o;37794:366::-;37936:3;37957:67;38021:2;38016:3;37957:67;:::i;:::-;37950:74;;38033:93;38122:3;38033:93;:::i;:::-;38151:2;38146:3;38142:12;38135:19;;37794:366;;;:::o;38166:419::-;38332:4;38370:2;38359:9;38355:18;38347:26;;38419:9;38413:4;38409:20;38405:1;38394:9;38390:17;38383:47;38447:131;38573:4;38447:131;:::i;:::-;38439:139;;38166:419;;;:::o;38591:191::-;38631:4;38651:20;38669:1;38651:20;:::i;:::-;38646:25;;38685:20;38703:1;38685:20;:::i;:::-;38680:25;;38724:1;38721;38718:8;38715:34;;;38729:18;;:::i;:::-;38715:34;38774:1;38771;38767:9;38759:17;;38591:191;;;;:::o;38788:228::-;38928:34;38924:1;38916:6;38912:14;38905:58;38997:11;38992:2;38984:6;38980:15;38973:36;38788:228;:::o;39022:366::-;39164:3;39185:67;39249:2;39244:3;39185:67;:::i;:::-;39178:74;;39261:93;39350:3;39261:93;:::i;:::-;39379:2;39374:3;39370:12;39363:19;;39022:366;;;:::o;39394:419::-;39560:4;39598:2;39587:9;39583:18;39575:26;;39647:9;39641:4;39637:20;39633:1;39622:9;39618:17;39611:47;39675:131;39801:4;39675:131;:::i;:::-;39667:139;;39394:419;;;:::o;39819:223::-;39959:34;39955:1;39947:6;39943:14;39936:58;40028:6;40023:2;40015:6;40011:15;40004:31;39819:223;:::o;40048:366::-;40190:3;40211:67;40275:2;40270:3;40211:67;:::i;:::-;40204:74;;40287:93;40376:3;40287:93;:::i;:::-;40405:2;40400:3;40396:12;40389:19;;40048:366;;;:::o;40420:419::-;40586:4;40624:2;40613:9;40609:18;40601:26;;40673:9;40667:4;40663:20;40659:1;40648:9;40644:17;40637:47;40701:131;40827:4;40701:131;:::i;:::-;40693:139;;40420:419;;;:::o;40845:237::-;40985:34;40981:1;40973:6;40969:14;40962:58;41054:20;41049:2;41041:6;41037:15;41030:45;40845:237;:::o;41088:366::-;41230:3;41251:67;41315:2;41310:3;41251:67;:::i;:::-;41244:74;;41327:93;41416:3;41327:93;:::i;:::-;41445:2;41440:3;41436:12;41429:19;;41088:366;;;:::o;41460:419::-;41626:4;41664:2;41653:9;41649:18;41641:26;;41713:9;41707:4;41703:20;41699:1;41688:9;41684:17;41677:47;41741:131;41867:4;41741:131;:::i;:::-;41733:139;;41460:419;;;:::o;41885:176::-;41917:1;41934:20;41952:1;41934:20;:::i;:::-;41929:25;;41968:20;41986:1;41968:20;:::i;:::-;41963:25;;42007:1;41997:35;;42012:18;;:::i;:::-;41997:35;42053:1;42050;42046:9;42041:14;;41885:176;;;;:::o;42067:98::-;42118:6;42152:5;42146:12;42136:22;;42067:98;;;:::o;42171:168::-;42254:11;42288:6;42283:3;42276:19;42328:4;42323:3;42319:14;42304:29;;42171:168;;;;:::o;42345:360::-;42431:3;42459:38;42491:5;42459:38;:::i;:::-;42513:70;42576:6;42571:3;42513:70;:::i;:::-;42506:77;;42592:52;42637:6;42632:3;42625:4;42618:5;42614:16;42592:52;:::i;:::-;42669:29;42691:6;42669:29;:::i;:::-;42664:3;42660:39;42653:46;;42435:270;42345:360;;;;:::o;42711:640::-;42906:4;42944:3;42933:9;42929:19;42921:27;;42958:71;43026:1;43015:9;43011:17;43002:6;42958:71;:::i;:::-;43039:72;43107:2;43096:9;43092:18;43083:6;43039:72;:::i;:::-;43121;43189:2;43178:9;43174:18;43165:6;43121:72;:::i;:::-;43240:9;43234:4;43230:20;43225:2;43214:9;43210:18;43203:48;43268:76;43339:4;43330:6;43268:76;:::i;:::-;43260:84;;42711:640;;;;;;;:::o;43357:141::-;43413:5;43444:6;43438:13;43429:22;;43460:32;43486:5;43460:32;:::i;:::-;43357:141;;;;:::o;43504:349::-;43573:6;43622:2;43610:9;43601:7;43597:23;43593:32;43590:119;;;43628:79;;:::i;:::-;43590:119;43748:1;43773:63;43828:7;43819:6;43808:9;43804:22;43773:63;:::i;:::-;43763:73;;43719:127;43504:349;;;;:::o;43859:180::-;43907:77;43904:1;43897:88;44004:4;44001:1;43994:15;44028:4;44025:1;44018:15;44045:182;44185:34;44181:1;44173:6;44169:14;44162:58;44045:182;:::o;44233:366::-;44375:3;44396:67;44460:2;44455:3;44396:67;:::i;:::-;44389:74;;44472:93;44561:3;44472:93;:::i;:::-;44590:2;44585:3;44581:12;44574:19;;44233:366;;;:::o;44605:419::-;44771:4;44809:2;44798:9;44794:18;44786:26;;44858:9;44852:4;44848:20;44844:1;44833:9;44829:17;44822:47;44886:131;45012:4;44886:131;:::i;:::-;44878:139;;44605:419;;;:::o;45030:178::-;45170:30;45166:1;45158:6;45154:14;45147:54;45030:178;:::o;45214:366::-;45356:3;45377:67;45441:2;45436:3;45377:67;:::i;:::-;45370:74;;45453:93;45542:3;45453:93;:::i;:::-;45571:2;45566:3;45562:12;45555:19;;45214:366;;;:::o;45586:419::-;45752:4;45790:2;45779:9;45775:18;45767:26;;45839:9;45833:4;45829:20;45825:1;45814:9;45810:17;45803:47;45867:131;45993:4;45867:131;:::i;:::-;45859:139;;45586:419;;;:::o
Swarm Source
ipfs://fa9b6bcb523893f24eeaa597ab5fb44eb9b707d957ce550dcc2fb41b3487ad6f
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.