ERC-721
Overview
Max Total Supply
0 BB
Holders
432
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Balance
1 BBLoading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
BitBandits
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-08 */ // File: @openzeppelin/contracts/utils/Counters.sol // OpenZeppelin Contracts v4.4.1 (utils/Counters.sol) pragma solidity ^0.8.0; /** * @title Counters * @author Matt Condon (@shrugs) * @dev Provides counters that can only be incremented, decremented or reset. This can be used e.g. to track the number * of elements in a mapping, issuing ERC721 ids, or counting request ids. * * Include with `using Counters for Counters.Counter;` */ library Counters { struct Counter { // This variable should never be directly accessed by users of the library: interactions must be restricted to // the library's function. As of Solidity v0.5.2, this cannot be enforced, though there is a proposal to add // this feature: see https://github.com/ethereum/solidity/issues/4637 uint256 _value; // default: 0 } function current(Counter storage counter) internal view returns (uint256) { return counter._value; } function increment(Counter storage counter) internal { unchecked { counter._value += 1; } } function decrement(Counter storage counter) internal { uint256 value = counter._value; require(value > 0, "Counter: decrement overflow"); unchecked { counter._value = value - 1; } } function reset(Counter storage counter) internal { counter._value = 0; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); 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 Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: contracts/BB.sol pragma solidity ^0.8.0; interface ILUT { function updateReward(address from, address to) external; function spend(address user, uint256 amount) external; } contract BitBandits is ERC721{ using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private _tokenSupply; Counters.Counter private _testaSupply; string baseURI; string public baseExtension = ".json"; uint256 public publicSaleCost = 0.05 ether; uint256 public preSale2Cost = 0.04 ether; uint256 public preSale1Cost = 0.03 ether; address public owner = msg.sender; uint256 public maxSupply = 3333; uint256 public testaMaxSupply = 15; // testas start after maxSupply uint256 public TESTA_PRICE = 300 ether; // Mapping owner address to testa mapping(address => uint256) public testa_balances; bool public publicSaleActive = false; uint256 public preSale1StartSupply; uint256 public preSale1Supply = 500; bool public preSale1Active = false; uint256 public preSale2StartSupply; uint256 public preSale2Supply = 1000; bool public preSale2Active = false; ILUT public yieldToken; bool public revealed = false; string public notRevealedUri; bool public tokenLinked = false; // address public owner1 = 0xf03B838b42B6313Fa6abdF5c68D7ba672C683A50; address public owner2 = 0x5384e2110A466F7E611efd37E82FEeE77Dd7e3f5; address public owner3 = 0x75D48BC691a6c102966FED66B0e3D676dBfC6E90; constructor( string memory _name, string memory _symbol, string memory _initBaseURI, string memory _initNotRevealedUri ) ERC721(_name, _symbol) { setBaseURI(_initBaseURI); setNotRevealedURI(_initNotRevealedUri); } //////////////////// // TOKEN BASED // //////////////////// // called on transfer & on mint function _beforeTokenTransfer(address from, address to, uint256 tokenId) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (tokenLinked == true){ yieldToken.updateReward(from, to); } if (tokenId > maxSupply && from != address(0) && to != address(0)){ testa_balances[from] -= 1; testa_balances[to] += 1; } } function setLUT(address LUTAddress) external onlyOwner { yieldToken = ILUT(LUTAddress); tokenLinked = true; } //////////////////// // NFT BASED // //////////////////// function mintGift(address reciever, uint256 _howMany) external payable onlyOwner { uint256 fullMintAmount = _tokenSupply.current() + _howMany; require(fullMintAmount <= maxSupply, "Sold out!"); for (uint256 i = 0; i < _howMany; i++){ uint256 mintIndex = _tokenSupply.current() + 1; // Start IDs at 1 // Mint. _tokenSupply.increment(); _safeMint(reciever, mintIndex); } } function mintTestaGift() external payable onlyOwner { uint256 mintIndexTesta = _testaSupply.current() + 1; // Start IDs at 1 require(mintIndexTesta <= testaMaxSupply, "No more Testa's available!"); // Mint. _testaSupply.increment(); testa_balances[msg.sender] += 1; _safeMint(msg.sender, maxSupply + mintIndexTesta); } //////////////////// // PUBLIC SALE // //////////////////// function mintPubSale(uint256 _howMany) public payable { require(publicSaleActive, "Public Sale Is Closed"); uint256 fullMintAmount = _tokenSupply.current() + _howMany; require(fullMintAmount <= maxSupply, "Sold out!"); uint256 mintPrice = publicSaleCost; require(msg.value >= mintPrice * _howMany, "Not enough ETH to buy!"); for (uint256 i = 0; i < _howMany; i++){ uint256 mintIndex = _tokenSupply.current() + 1; // Start IDs at 1 // Mint. _tokenSupply.increment(); _safeMint(msg.sender, mintIndex); } } //////////////////// // PRE SALES // //////////////////// function mintPreSale1() public payable { require(preSale1Active, "Pre Sale Is Closed"); uint256 mintIndex = _tokenSupply.current() + 1; require(mintIndex <= preSale1StartSupply + preSale1Supply, "Sold out!"); require(mintIndex <= maxSupply, "Sold out!"); uint256 mintPrice = preSale1Cost; require(msg.value >= mintPrice, "Not enough ETH to buy!"); // Mint. _tokenSupply.increment(); _safeMint(msg.sender, mintIndex); } function mintPreSale2() public payable { require(preSale2Active, "Pre Sale Is Closed"); uint256 mintIndex = _tokenSupply.current() + 1; require(mintIndex <= preSale2StartSupply + preSale2Supply, "Sold out!"); require(mintIndex <= maxSupply, "Sold out!"); uint256 mintPrice = preSale2Cost; require(msg.value >= mintPrice, "Not enough ETH to buy!"); // Mint. _tokenSupply.increment(); _safeMint(msg.sender, mintIndex); } //////////////////// // TESTA // //////////////////// function mintTesta() public payable { uint256 mintIndexTesta = _testaSupply.current() + 1; // Start IDs at 1 require(mintIndexTesta <= testaMaxSupply, "No more Testa's available!"); yieldToken.spend(msg.sender, TESTA_PRICE); // Mint. _testaSupply.increment(); testa_balances[msg.sender] += 1; _safeMint(msg.sender, maxSupply + mintIndexTesta); } function testaBalanceOf(address _owner) external view returns(uint256){ require(_owner != address(0), "ERC721: balance query for the zero address"); return testa_balances[_owner]; } function setTestaPrice(uint256 _newCost) public onlyOwner { TESTA_PRICE = _newCost; } function setTestaSupply(uint256 _amount) public onlyOwner { testaMaxSupply = _amount; } //only owner function reveal() public onlyOwner { revealed = true; } function setPublicSaleCost(uint256 _newCost) public onlyOwner { publicSaleCost = _newCost; } function setPreSale1Cost(uint256 _newCost) public onlyOwner { preSale1Cost = _newCost; } function setPreSale2Cost(uint256 _newCost) public onlyOwner { preSale2Cost = _newCost; } function setPreSale1Amount(uint256 _newAmount) public onlyOwner { preSale1Supply = _newAmount; } function setPreSale2Amount(uint256 _newAmount) public onlyOwner { preSale2Supply = _newAmount; } function setBaseURI(string memory _newBaseURI) public onlyOwner { baseURI = _newBaseURI; } function setNotRevealedURI(string memory _notRevealedURI) public onlyOwner { notRevealedUri = _notRevealedURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function setPublicSaleState(bool _state) public onlyOwner { publicSaleActive = _state; } function setPreSale1State(bool _state) public onlyOwner { preSale1StartSupply = _tokenSupply.current(); preSale1Active = _state; } function setPreSale2State(bool _state) public onlyOwner { preSale2StartSupply = _tokenSupply.current(); preSale2Active = _state; } // Owner can withdraw ETH from here function withdrawETH() external onlyOwner { uint256 balance = address(this).balance; uint256 _splitTo3 = (balance * 0.333 ether) / 1 ether; payable(owner1).transfer(_splitTo3); payable(owner2).transfer(_splitTo3); payable(owner3).transfer(_splitTo3); } /////////////////// // Query Method // /////////////////// function remainingSupply() public view returns (uint256) { return maxSupply - _tokenSupply.current(); } function tokenSupply() public view returns (uint256) { return _tokenSupply.current(); } function testaTokenSupply() public view returns (uint256) { return _testaSupply.current(); } function _baseURI() internal view override returns (string memory) { return baseURI; } 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)) : ""; } /////////////////// // Helper Code // /////////////////// modifier onlyOwner() { require(owner == msg.sender, "Ownable: caller is not the owner"); _; } }
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":"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":"TESTA_PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"reciever","type":"address"},{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"mintGift","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPreSale1","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintPreSale2","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_howMany","type":"uint256"}],"name":"mintPubSale","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintTesta","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"mintTestaGift","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":[],"name":"owner1","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner2","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner3","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale1Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale1Cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale1StartSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale1Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale2Active","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale2Cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale2StartSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"preSale2Supply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"publicSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"remainingSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"reveal","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":"address","name":"LUTAddress","type":"address"}],"name":"setLUT","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_notRevealedURI","type":"string"}],"name":"setNotRevealedURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setPreSale1Amount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPreSale1Cost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPreSale1State","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newAmount","type":"uint256"}],"name":"setPreSale2Amount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPreSale2Cost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPreSale2State","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setPublicSaleCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPublicSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_newCost","type":"uint256"}],"name":"setTestaPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_amount","type":"uint256"}],"name":"setTestaSupply","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":"address","name":"_owner","type":"address"}],"name":"testaBalanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testaMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"testaTokenSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"testa_balances","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenLinked","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"tokenSupply","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":[{"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":[],"name":"withdrawETH","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"yieldToken","outputs":[{"internalType":"contract ILUT","name":"","type":"address"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200005192919062000450565b5066b1a2bc2ec50000600a55668e1bc9bf040000600b55666a94d74f430000600c5533600d60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550610d05600e55600f8055681043561a88293000006010556000601260006101000a81548160ff0219169083151502179055506101f46014556000601560006101000a81548160ff0219169083151502179055506103e86017556000601860006101000a81548160ff0219169083151502179055506000601860156101000a81548160ff0219169083151502179055506000601a60006101000a81548160ff02191690831515021790555073f03b838b42b6313fa6abdf5c68d7ba672c683a50601a60016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550735384e2110a466f7e611efd37e82feee77dd7e3f5601b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507375d48bc691a6c102966fed66b0e3d676dbfc6e90601c60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200026a57600080fd5b5060405162005b4138038062005b4183398181016040528101906200029091906200057e565b83838160009080519060200190620002aa92919062000450565b508060019080519060200190620002c392919062000450565b505050620002d782620002f260201b60201c565b620002e881620003a160201b60201c565b5050505062000873565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000385576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200037c9062000693565b60405180910390fd5b80600890805190602001906200039d92919062000450565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161462000434576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016200042b9062000693565b60405180910390fd5b80601990805190602001906200044c92919062000450565b5050565b8280546200045e906200075b565b90600052602060002090601f016020900481019282620004825760008555620004ce565b82601f106200049d57805160ff1916838001178555620004ce565b82800160010185558215620004ce579182015b82811115620004cd578251825591602001919060010190620004b0565b5b509050620004dd9190620004e1565b5090565b5b80821115620004fc576000816000905550600101620004e2565b5090565b6000620005176200051184620006de565b620006b5565b9050828152602081018484840111156200053657620005356200082a565b5b6200054384828562000725565b509392505050565b600082601f83011262000563576200056262000825565b5b81516200057584826020860162000500565b91505092915050565b600080600080608085870312156200059b576200059a62000834565b5b600085015167ffffffffffffffff811115620005bc57620005bb6200082f565b5b620005ca878288016200054b565b945050602085015167ffffffffffffffff811115620005ee57620005ed6200082f565b5b620005fc878288016200054b565b935050604085015167ffffffffffffffff81111562000620576200061f6200082f565b5b6200062e878288016200054b565b925050606085015167ffffffffffffffff8111156200065257620006516200082f565b5b62000660878288016200054b565b91505092959194509250565b60006200067b60208362000714565b915062000688826200084a565b602082019050919050565b60006020820190508181036000830152620006ae816200066c565b9050919050565b6000620006c1620006d4565b9050620006cf828262000791565b919050565b6000604051905090565b600067ffffffffffffffff821115620006fc57620006fb620007f6565b5b620007078262000839565b9050602081019050919050565b600082825260208201905092915050565b60005b838110156200074557808201518184015260208101905062000728565b8381111562000755576000848401525b50505050565b600060028204905060018216806200077457607f821691505b602082108114156200078b576200078a620007c7565b5b50919050565b6200079c8262000839565b810181811067ffffffffffffffff82111715620007be57620007bd620007f6565b5b80604052505050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6152be80620008836000396000f3fe6080604052600436106103ad5760003560e01c80637ce5e2d0116101e7578063b4867cd01161010d578063d5abeb01116100a0578063e045222b1161006f578063e045222b14610d16578063e086e5ec14610d3f578063e985e9c514610d56578063f2c4ce1e14610d93576103ad565b8063d5abeb0114610c8d578063d648b89d14610cb8578063da0239a614610cc2578063da3ef23f14610ced576103ad565b8063bfe6b330116100dc578063bfe6b33014610bd1578063c668286214610bfc578063c87b56dd14610c27578063c99f383d14610c64576103ad565b8063b4867cd014610b29578063b6f36dcf14610b52578063b88d4fde14610b7d578063bc8893b414610ba6576103ad565b80639293a5c711610185578063a22cb46511610154578063a22cb46514610a81578063a475b5dd14610aaa578063a4e23c3514610ac1578063ad357a2814610afe576103ad565b80639293a5c7146109d757806394871ef814610a0057806395d89b4114610a2b5780639f31e30814610a56576103ad565b80638da5cb5b116101c15780638da5cb5b1461092f5780638dbb7c061461095a5780638f19d9591461098357806391d8a5be146109ac576103ad565b80637ce5e2d0146108d15780637d33a4a2146108db5780637f53915f14610904576103ad565b80634708e22c116102d75780636352211e1161026a578063736889141161023957806373688914146108255780637567bd5c1461085057806376d5de851461087b5780637824407f146108a6576103ad565b80636352211e1461075757806366623da5146107945780636fb32b12146107bd57806370a08231146107e8576103ad565b80635226efe7116102a65780635226efe7146106bc57806352709725146106f957806355f804b3146107245780635fcf3c8c1461074d576103ad565b80634708e22c14610621578063489a0fdc1461064c578063505fbb82146106685780635183022714610691576103ad565b806323b872dd1161034f5780633db84a7e1161031e5780633db84a7e1461058857806342842e0e146105b1578063453afb0f146105da5780634624ddc014610605576103ad565b806323b872dd146104de57806327c173e7146105075780632c2b9df1146105325780632cd675fd1461055d576103ad565b8063081c8c441161038b578063081c8c4414610457578063095ea7b31461048257806313c8f6de146104ab5780631a0a558e146104d4576103ad565b806301ffc9a7146103b257806306fdde03146103ef578063081812fc1461041a575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d49190613fc2565b610dbc565b6040516103e69190614596565b60405180910390f35b3480156103fb57600080fd5b50610404610e9e565b60405161041191906145cc565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614065565b610f30565b60405161044e91906144dd565b60405180910390f35b34801561046357600080fd5b5061046c610fb5565b60405161047991906145cc565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613f55565b611043565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190614065565b61115b565b005b6104dc6111f5565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613e3f565b611357565b005b34801561051357600080fd5b5061051c6113b7565b604051610529919061486e565b60405180910390f35b34801561053e57600080fd5b506105476113bd565b604051610554919061486e565b60405180910390f35b34801561056957600080fd5b506105726113c3565b60405161057f919061486e565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190614065565b6113c9565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613e3f565b611463565b005b3480156105e657600080fd5b506105ef611483565b6040516105fc919061486e565b60405180910390f35b61061f600480360381019061061a9190614065565b611489565b005b34801561062d57600080fd5b506106366115de565b604051610643919061486e565b60405180910390f35b61066660048036038101906106619190613f55565b6115e4565b005b34801561067457600080fd5b5061068f600480360381019061068a9190613dd2565b611725565b005b34801561069d57600080fd5b506106a6611814565b6040516106b39190614596565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613dd2565b611827565b6040516106f0919061486e565b60405180910390f35b34801561070557600080fd5b5061070e6118df565b60405161071b91906144dd565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061401c565b611905565b005b6107556119af565b005b34801561076357600080fd5b5061077e60048036038101906107799190614065565b611b11565b60405161078b91906144dd565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613f95565b611bc3565b005b3480156107c957600080fd5b506107d2611c80565b6040516107df919061486e565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613dd2565b611c86565b60405161081c919061486e565b60405180910390f35b34801561083157600080fd5b5061083a611d3e565b60405161084791906144dd565b60405180910390f35b34801561085c57600080fd5b50610865611d64565b604051610872919061486e565b60405180910390f35b34801561088757600080fd5b50610890611d75565b60405161089d91906145b1565b60405180910390f35b3480156108b257600080fd5b506108bb611d9b565b6040516108c8919061486e565b60405180910390f35b6108d9611dac565b005b3480156108e757600080fd5b5061090260048036038101906108fd9190614065565b611f17565b005b34801561091057600080fd5b50610919611fb1565b6040516109269190614596565b60405180910390f35b34801561093b57600080fd5b50610944611fc4565b60405161095191906144dd565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c9190614065565b611fea565b005b34801561098f57600080fd5b506109aa60048036038101906109a59190614065565b612084565b005b3480156109b857600080fd5b506109c161211e565b6040516109ce9190614596565b60405180910390f35b3480156109e357600080fd5b506109fe60048036038101906109f99190613f95565b612131565b005b348015610a0c57600080fd5b50610a156121de565b604051610a229190614596565b60405180910390f35b348015610a3757600080fd5b50610a406121f1565b604051610a4d91906145cc565b60405180910390f35b348015610a6257600080fd5b50610a6b612283565b604051610a78919061486e565b60405180910390f35b348015610a8d57600080fd5b50610aa86004803603810190610aa39190613f15565b612289565b005b348015610ab657600080fd5b50610abf61229f565b005b348015610acd57600080fd5b50610ae86004803603810190610ae39190613dd2565b61234c565b604051610af5919061486e565b60405180910390f35b348015610b0a57600080fd5b50610b13612364565b604051610b20919061486e565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b9190614065565b61236a565b005b348015610b5e57600080fd5b50610b67612404565b604051610b7491906144dd565b60405180910390f35b348015610b8957600080fd5b50610ba46004803603810190610b9f9190613e92565b61242a565b005b348015610bb257600080fd5b50610bbb61248c565b604051610bc89190614596565b60405180910390f35b348015610bdd57600080fd5b50610be661249f565b604051610bf3919061486e565b60405180910390f35b348015610c0857600080fd5b50610c116124a5565b604051610c1e91906145cc565b60405180910390f35b348015610c3357600080fd5b50610c4e6004803603810190610c499190614065565b612533565b604051610c5b91906145cc565b60405180910390f35b348015610c7057600080fd5b50610c8b6004803603810190610c869190613f95565b61268c565b005b348015610c9957600080fd5b50610ca2612749565b604051610caf919061486e565b60405180910390f35b610cc061274f565b005b348015610cce57600080fd5b50610cd76128b9565b604051610ce4919061486e565b60405180910390f35b348015610cf957600080fd5b50610d146004803603810190610d0f919061401c565b6128d7565b005b348015610d2257600080fd5b50610d3d6004803603810190610d389190614065565b612981565b005b348015610d4b57600080fd5b50610d54612a1b565b005b348015610d6257600080fd5b50610d7d6004803603810190610d789190613dff565b612c1a565b604051610d8a9190614596565b60405180910390f35b348015610d9f57600080fd5b50610dba6004803603810190610db5919061401c565b612cae565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e975750610e9682612d58565b5b9050919050565b606060008054610ead90614b69565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed990614b69565b8015610f265780601f10610efb57610100808354040283529160200191610f26565b820191906000526020600020905b815481529060010190602001808311610f0957829003601f168201915b5050505050905090565b6000610f3b82612dc2565b610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061474e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60198054610fc290614b69565b80601f0160208091040260200160405190810160405280929190818152602001828054610fee90614b69565b801561103b5780601f106110105761010080835404028352916020019161103b565b820191906000526020600020905b81548152906001019060200180831161101e57829003601f168201915b505050505081565b600061104e82611b11565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906147ce565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110de612e2e565b73ffffffffffffffffffffffffffffffffffffffff16148061110d575061110c81611107612e2e565b612c1a565b5b61114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906146ae565b60405180910390fd5b6111568383612e36565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061476e565b60405180910390fd5b80600f8190555050565b601860009054906101000a900460ff16611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b906147ee565b60405180910390fd5b600060016112526006612eef565b61125c9190614968565b905060175460165461126e9190614968565b8111156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061482e565b60405180910390fd5b600e548111156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec9061482e565b60405180910390fd5b6000600b5490508034101561133f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113369061470e565b60405180910390fd5b6113496006612efd565b6113533383612f13565b5050565b611368611362612e2e565b82612f31565b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061480e565b60405180910390fd5b6113b283838361300f565b505050565b60175481565b600c5481565b60135481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114509061476e565b60405180910390fd5b8060148190555050565b61147e8383836040518060200160405280600081525061242a565b505050565b600a5481565b601260009054906101000a900460ff166114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf906145ee565b60405180910390fd5b6000816114e56006612eef565b6114ef9190614968565b9050600e54811115611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d9061482e565b60405180910390fd5b6000600a549050828161154991906149ef565b34101561158b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115829061470e565b60405180910390fd5b60005b838110156115d857600060016115a46006612eef565b6115ae9190614968565b90506115ba6006612efd565b6115c43382612f13565b5080806115d090614bcc565b91505061158e565b50505050565b600f5481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9061476e565b60405180910390fd5b6000816116816006612eef565b61168b9190614968565b9050600e548111156116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c99061482e565b60405180910390fd5b60005b8281101561171f57600060016116eb6006612eef565b6116f59190614968565b90506117016006612efd565b61170b8582612f13565b50808061171790614bcc565b9150506116d5565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061476e565b60405180910390fd5b80601860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a60006101000a81548160ff02191690831515021790555050565b601860159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f906146ce565b60405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c9061476e565b60405180910390fd5b80600890805190602001906119ab929190613be6565b5050565b601560009054906101000a900460ff166119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f5906147ee565b60405180910390fd5b60006001611a0c6006612eef565b611a169190614968565b9050601454601354611a289190614968565b811115611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a619061482e565b60405180910390fd5b600e54811115611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa69061482e565b60405180910390fd5b6000600c54905080341015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af09061470e565b60405180910390fd5b611b036006612efd565b611b0d3383612f13565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb1906146ee565b60405180910390fd5b80915050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a9061476e565b60405180910390fd5b611c5d6006612eef565b60138190555080601560006101000a81548160ff02191690831515021790555050565b60165481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906146ce565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d706007612eef565b905090565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611da76006612eef565b905090565b60006001611dba6007612eef565b611dc49190614968565b9050600f54811115611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e029061484e565b60405180910390fd5b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca3336010546040518363ffffffff1660e01b8152600401611e6a92919061456d565b600060405180830381600087803b158015611e8457600080fd5b505af1158015611e98573d6000803e3d6000fd5b50505050611ea66007612efd565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ef69190614968565b92505081905550611f143382600e54611f0f9190614968565b612f13565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061476e565b60405180910390fd5b8060178190555050565b601860009054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120719061476e565b60405180910390fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061476e565b60405180910390fd5b80600b8190555050565b601560009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b89061476e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b601a60009054906101000a900460ff1681565b60606001805461220090614b69565b80601f016020809104026020016040519081016040528092919081815260200182805461222c90614b69565b80156122795780601f1061224e57610100808354040283529160200191612279565b820191906000526020600020905b81548152906001019060200180831161225c57829003601f168201915b5050505050905090565b60105481565b61229b612294612e2e565b838361326b565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061476e565b60405180910390fd5b6001601860156101000a81548160ff021916908315150217905550565b60116020528060005260406000206000915090505481565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061476e565b60405180910390fd5b80600c8190555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61243b612435612e2e565b83612f31565b61247a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124719061480e565b60405180910390fd5b612486848484846133d8565b50505050565b601260009054906101000a900460ff1681565b60145481565b600980546124b290614b69565b80601f01602080910402602001604051908101604052809291908181526020018280546124de90614b69565b801561252b5780601f106125005761010080835404028352916020019161252b565b820191906000526020600020905b81548152906001019060200180831161250e57829003601f168201915b505050505081565b606061253e82612dc2565b61257d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612574906147ae565b60405180910390fd5b60001515601860159054906101000a900460ff161515141561262b57601980546125a690614b69565b80601f01602080910402602001604051908101604052809291908181526020018280546125d290614b69565b801561261f5780601f106125f45761010080835404028352916020019161261f565b820191906000526020600020905b81548152906001019060200180831161260257829003601f168201915b50505050509050612687565b6000612635613434565b905060008151116126555760405180602001604052806000815250612683565b8061265f846134c6565b6009604051602001612673939291906144ac565b6040516020818303038152906040525b9150505b919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461271c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127139061476e565b60405180910390fd5b6127266006612eef565b60168190555080601860006101000a81548160ff02191690831515021790555050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d69061476e565b60405180910390fd5b600060016127ed6007612eef565b6127f79190614968565b9050600f5481111561283e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128359061484e565b60405180910390fd5b6128486007612efd565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128989190614968565b925050819055506128b63382600e546128b19190614968565b612f13565b50565b60006128c56006612eef565b600e546128d29190614a49565b905090565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e9061476e565b60405180910390fd5b806009908051906020019061297d929190613be6565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a089061476e565b60405180910390fd5b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa29061476e565b60405180910390fd5b60004790506000670de0b6b3a764000067049f0dbc5634800083612acf91906149ef565b612ad991906149be565b9050601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612b43573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612bac573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c15573d6000803e3d6000fd5b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d359061476e565b60405180910390fd5b8060199080519060200190612d54929190613be6565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612ea983611b11565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b612f2d828260405180602001604052806000815250613627565b5050565b6000612f3c82612dc2565b612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f729061468e565b60405180910390fd5b6000612f8683611b11565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ff557508373ffffffffffffffffffffffffffffffffffffffff16612fdd84610f30565b73ffffffffffffffffffffffffffffffffffffffff16145b8061300657506130058185612c1a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661302f82611b11565b73ffffffffffffffffffffffffffffffffffffffff1614613085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307c9061478e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ec9061464e565b60405180910390fd5b613100838383613682565b61310b600082612e36565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461315b9190614a49565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131b29190614968565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d19061466e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133cb9190614596565b60405180910390a3505050565b6133e384848461300f565b6133ef84848484613869565b61342e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134259061460e565b60405180910390fd5b50505050565b60606008805461344390614b69565b80601f016020809104026020016040519081016040528092919081815260200182805461346f90614b69565b80156134bc5780601f10613491576101008083540402835291602001916134bc565b820191906000526020600020905b81548152906001019060200180831161349f57829003601f168201915b5050505050905090565b6060600082141561350e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613622565b600082905060005b6000821461354057808061352990614bcc565b915050600a8261353991906149be565b9150613516565b60008167ffffffffffffffff81111561355c5761355b614d02565b5b6040519080825280601f01601f19166020018201604052801561358e5781602001600182028036833780820191505090505b5090505b6000851461361b576001826135a79190614a49565b9150600a856135b69190614c15565b60306135c29190614968565b60f81b8183815181106135d8576135d7614cd3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561361491906149be565b9450613592565b8093505050505b919050565b6136318383613a00565b61363e6000848484613869565b61367d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136749061460e565b60405180910390fd5b505050565b61368d838383613bce565b60011515601a60009054906101000a900460ff161515141561373957601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a84846040518363ffffffff1660e01b81526004016137069291906144f8565b600060405180830381600087803b15801561372057600080fd5b505af1158015613734573d6000803e3d6000fd5b505050505b600e54811180156137775750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156137b05750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613864576001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138059190614a49565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461385c9190614968565b925050819055505b505050565b600061388a8473ffffffffffffffffffffffffffffffffffffffff16613bd3565b156139f3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138b3612e2e565b8786866040518563ffffffff1660e01b81526004016138d59493929190614521565b602060405180830381600087803b1580156138ef57600080fd5b505af192505050801561392057506040513d601f19601f8201168201806040525081019061391d9190613fef565b60015b6139a3573d8060008114613950576040519150601f19603f3d011682016040523d82523d6000602084013e613955565b606091505b5060008151141561399b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139929061460e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139f8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a679061472e565b60405180910390fd5b613a7981612dc2565b15613ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab09061462e565b60405180910390fd5b613ac560008383613682565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b159190614968565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600080823b905060008111915050919050565b828054613bf290614b69565b90600052602060002090601f016020900481019282613c145760008555613c5b565b82601f10613c2d57805160ff1916838001178555613c5b565b82800160010185558215613c5b579182015b82811115613c5a578251825591602001919060010190613c3f565b5b509050613c689190613c6c565b5090565b5b80821115613c85576000816000905550600101613c6d565b5090565b6000613c9c613c97846148ae565b614889565b905082815260208101848484011115613cb857613cb7614d36565b5b613cc3848285614b27565b509392505050565b6000613cde613cd9846148df565b614889565b905082815260208101848484011115613cfa57613cf9614d36565b5b613d05848285614b27565b509392505050565b600081359050613d1c8161522c565b92915050565b600081359050613d3181615243565b92915050565b600081359050613d468161525a565b92915050565b600081519050613d5b8161525a565b92915050565b600082601f830112613d7657613d75614d31565b5b8135613d86848260208601613c89565b91505092915050565b600082601f830112613da457613da3614d31565b5b8135613db4848260208601613ccb565b91505092915050565b600081359050613dcc81615271565b92915050565b600060208284031215613de857613de7614d40565b5b6000613df684828501613d0d565b91505092915050565b60008060408385031215613e1657613e15614d40565b5b6000613e2485828601613d0d565b9250506020613e3585828601613d0d565b9150509250929050565b600080600060608486031215613e5857613e57614d40565b5b6000613e6686828701613d0d565b9350506020613e7786828701613d0d565b9250506040613e8886828701613dbd565b9150509250925092565b60008060008060808587031215613eac57613eab614d40565b5b6000613eba87828801613d0d565b9450506020613ecb87828801613d0d565b9350506040613edc87828801613dbd565b925050606085013567ffffffffffffffff811115613efd57613efc614d3b565b5b613f0987828801613d61565b91505092959194509250565b60008060408385031215613f2c57613f2b614d40565b5b6000613f3a85828601613d0d565b9250506020613f4b85828601613d22565b9150509250929050565b60008060408385031215613f6c57613f6b614d40565b5b6000613f7a85828601613d0d565b9250506020613f8b85828601613dbd565b9150509250929050565b600060208284031215613fab57613faa614d40565b5b6000613fb984828501613d22565b91505092915050565b600060208284031215613fd857613fd7614d40565b5b6000613fe684828501613d37565b91505092915050565b60006020828403121561400557614004614d40565b5b600061401384828501613d4c565b91505092915050565b60006020828403121561403257614031614d40565b5b600082013567ffffffffffffffff8111156140505761404f614d3b565b5b61405c84828501613d8f565b91505092915050565b60006020828403121561407b5761407a614d40565b5b600061408984828501613dbd565b91505092915050565b61409b81614a7d565b82525050565b6140aa81614a8f565b82525050565b60006140bb82614925565b6140c5818561493b565b93506140d5818560208601614b36565b6140de81614d45565b840191505092915050565b6140f281614af1565b82525050565b600061410382614930565b61410d818561494c565b935061411d818560208601614b36565b61412681614d45565b840191505092915050565b600061413c82614930565b614146818561495d565b9350614156818560208601614b36565b80840191505092915050565b6000815461416f81614b69565b614179818661495d565b9450600182166000811461419457600181146141a5576141d8565b60ff198316865281860193506141d8565b6141ae85614910565b60005b838110156141d0578154818901526001820191506020810190506141b1565b838801955050505b50505092915050565b60006141ee60158361494c565b91506141f982614d56565b602082019050919050565b600061421160328361494c565b915061421c82614d7f565b604082019050919050565b6000614234601c8361494c565b915061423f82614dce565b602082019050919050565b600061425760248361494c565b915061426282614df7565b604082019050919050565b600061427a60198361494c565b915061428582614e46565b602082019050919050565b600061429d602c8361494c565b91506142a882614e6f565b604082019050919050565b60006142c060388361494c565b91506142cb82614ebe565b604082019050919050565b60006142e3602a8361494c565b91506142ee82614f0d565b604082019050919050565b600061430660298361494c565b915061431182614f5c565b604082019050919050565b600061432960168361494c565b915061433482614fab565b602082019050919050565b600061434c60208361494c565b915061435782614fd4565b602082019050919050565b600061436f602c8361494c565b915061437a82614ffd565b604082019050919050565b600061439260208361494c565b915061439d8261504c565b602082019050919050565b60006143b560298361494c565b91506143c082615075565b604082019050919050565b60006143d8602f8361494c565b91506143e3826150c4565b604082019050919050565b60006143fb60218361494c565b915061440682615113565b604082019050919050565b600061441e60128361494c565b915061442982615162565b602082019050919050565b600061444160318361494c565b915061444c8261518b565b604082019050919050565b600061446460098361494c565b915061446f826151da565b602082019050919050565b6000614487601a8361494c565b915061449282615203565b602082019050919050565b6144a681614ae7565b82525050565b60006144b88286614131565b91506144c48285614131565b91506144d08284614162565b9150819050949350505050565b60006020820190506144f26000830184614092565b92915050565b600060408201905061450d6000830185614092565b61451a6020830184614092565b9392505050565b60006080820190506145366000830187614092565b6145436020830186614092565b614550604083018561449d565b818103606083015261456281846140b0565b905095945050505050565b60006040820190506145826000830185614092565b61458f602083018461449d565b9392505050565b60006020820190506145ab60008301846140a1565b92915050565b60006020820190506145c660008301846140e9565b92915050565b600060208201905081810360008301526145e681846140f8565b905092915050565b60006020820190508181036000830152614607816141e1565b9050919050565b6000602082019050818103600083015261462781614204565b9050919050565b6000602082019050818103600083015261464781614227565b9050919050565b600060208201905081810360008301526146678161424a565b9050919050565b600060208201905081810360008301526146878161426d565b9050919050565b600060208201905081810360008301526146a781614290565b9050919050565b600060208201905081810360008301526146c7816142b3565b9050919050565b600060208201905081810360008301526146e7816142d6565b9050919050565b60006020820190508181036000830152614707816142f9565b9050919050565b600060208201905081810360008301526147278161431c565b9050919050565b600060208201905081810360008301526147478161433f565b9050919050565b6000602082019050818103600083015261476781614362565b9050919050565b6000602082019050818103600083015261478781614385565b9050919050565b600060208201905081810360008301526147a7816143a8565b9050919050565b600060208201905081810360008301526147c7816143cb565b9050919050565b600060208201905081810360008301526147e7816143ee565b9050919050565b6000602082019050818103600083015261480781614411565b9050919050565b6000602082019050818103600083015261482781614434565b9050919050565b6000602082019050818103600083015261484781614457565b9050919050565b600060208201905081810360008301526148678161447a565b9050919050565b6000602082019050614883600083018461449d565b92915050565b60006148936148a4565b905061489f8282614b9b565b919050565b6000604051905090565b600067ffffffffffffffff8211156148c9576148c8614d02565b5b6148d282614d45565b9050602081019050919050565b600067ffffffffffffffff8211156148fa576148f9614d02565b5b61490382614d45565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061497382614ae7565b915061497e83614ae7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149b3576149b2614c46565b5b828201905092915050565b60006149c982614ae7565b91506149d483614ae7565b9250826149e4576149e3614c75565b5b828204905092915050565b60006149fa82614ae7565b9150614a0583614ae7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a3e57614a3d614c46565b5b828202905092915050565b6000614a5482614ae7565b9150614a5f83614ae7565b925082821015614a7257614a71614c46565b5b828203905092915050565b6000614a8882614ac7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614afc82614b03565b9050919050565b6000614b0e82614b15565b9050919050565b6000614b2082614ac7565b9050919050565b82818337600083830152505050565b60005b83811015614b54578082015181840152602081019050614b39565b83811115614b63576000848401525b50505050565b60006002820490506001821680614b8157607f821691505b60208210811415614b9557614b94614ca4565b5b50919050565b614ba482614d45565b810181811067ffffffffffffffff82111715614bc357614bc2614d02565b5b80604052505050565b6000614bd782614ae7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0a57614c09614c46565b5b600182019050919050565b6000614c2082614ae7565b9150614c2b83614ae7565b925082614c3b57614c3a614c75565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5075626c69632053616c6520497320436c6f7365640000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820746f206275792100000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652053616c6520497320436c6f7365640000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b7f4e6f206d6f7265205465737461277320617661696c61626c6521000000000000600082015250565b61523581614a7d565b811461524057600080fd5b50565b61524c81614a8f565b811461525757600080fd5b50565b61526381614a9b565b811461526e57600080fd5b50565b61527a81614ae7565b811461528557600080fd5b5056fea2646970667358221220441fcc5a6c732a5bf96de4dc9fbc4c6cf7b540750394815cd5da759394e2457a64736f6c63430008070033000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a42697442616e64697473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002424200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6135317a6f38476e467a3750335139344e4d477a685155767271326f6934784377667a427972504c3256644b2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x6080604052600436106103ad5760003560e01c80637ce5e2d0116101e7578063b4867cd01161010d578063d5abeb01116100a0578063e045222b1161006f578063e045222b14610d16578063e086e5ec14610d3f578063e985e9c514610d56578063f2c4ce1e14610d93576103ad565b8063d5abeb0114610c8d578063d648b89d14610cb8578063da0239a614610cc2578063da3ef23f14610ced576103ad565b8063bfe6b330116100dc578063bfe6b33014610bd1578063c668286214610bfc578063c87b56dd14610c27578063c99f383d14610c64576103ad565b8063b4867cd014610b29578063b6f36dcf14610b52578063b88d4fde14610b7d578063bc8893b414610ba6576103ad565b80639293a5c711610185578063a22cb46511610154578063a22cb46514610a81578063a475b5dd14610aaa578063a4e23c3514610ac1578063ad357a2814610afe576103ad565b80639293a5c7146109d757806394871ef814610a0057806395d89b4114610a2b5780639f31e30814610a56576103ad565b80638da5cb5b116101c15780638da5cb5b1461092f5780638dbb7c061461095a5780638f19d9591461098357806391d8a5be146109ac576103ad565b80637ce5e2d0146108d15780637d33a4a2146108db5780637f53915f14610904576103ad565b80634708e22c116102d75780636352211e1161026a578063736889141161023957806373688914146108255780637567bd5c1461085057806376d5de851461087b5780637824407f146108a6576103ad565b80636352211e1461075757806366623da5146107945780636fb32b12146107bd57806370a08231146107e8576103ad565b80635226efe7116102a65780635226efe7146106bc57806352709725146106f957806355f804b3146107245780635fcf3c8c1461074d576103ad565b80634708e22c14610621578063489a0fdc1461064c578063505fbb82146106685780635183022714610691576103ad565b806323b872dd1161034f5780633db84a7e1161031e5780633db84a7e1461058857806342842e0e146105b1578063453afb0f146105da5780634624ddc014610605576103ad565b806323b872dd146104de57806327c173e7146105075780632c2b9df1146105325780632cd675fd1461055d576103ad565b8063081c8c441161038b578063081c8c4414610457578063095ea7b31461048257806313c8f6de146104ab5780631a0a558e146104d4576103ad565b806301ffc9a7146103b257806306fdde03146103ef578063081812fc1461041a575b600080fd5b3480156103be57600080fd5b506103d960048036038101906103d49190613fc2565b610dbc565b6040516103e69190614596565b60405180910390f35b3480156103fb57600080fd5b50610404610e9e565b60405161041191906145cc565b60405180910390f35b34801561042657600080fd5b50610441600480360381019061043c9190614065565b610f30565b60405161044e91906144dd565b60405180910390f35b34801561046357600080fd5b5061046c610fb5565b60405161047991906145cc565b60405180910390f35b34801561048e57600080fd5b506104a960048036038101906104a49190613f55565b611043565b005b3480156104b757600080fd5b506104d260048036038101906104cd9190614065565b61115b565b005b6104dc6111f5565b005b3480156104ea57600080fd5b5061050560048036038101906105009190613e3f565b611357565b005b34801561051357600080fd5b5061051c6113b7565b604051610529919061486e565b60405180910390f35b34801561053e57600080fd5b506105476113bd565b604051610554919061486e565b60405180910390f35b34801561056957600080fd5b506105726113c3565b60405161057f919061486e565b60405180910390f35b34801561059457600080fd5b506105af60048036038101906105aa9190614065565b6113c9565b005b3480156105bd57600080fd5b506105d860048036038101906105d39190613e3f565b611463565b005b3480156105e657600080fd5b506105ef611483565b6040516105fc919061486e565b60405180910390f35b61061f600480360381019061061a9190614065565b611489565b005b34801561062d57600080fd5b506106366115de565b604051610643919061486e565b60405180910390f35b61066660048036038101906106619190613f55565b6115e4565b005b34801561067457600080fd5b5061068f600480360381019061068a9190613dd2565b611725565b005b34801561069d57600080fd5b506106a6611814565b6040516106b39190614596565b60405180910390f35b3480156106c857600080fd5b506106e360048036038101906106de9190613dd2565b611827565b6040516106f0919061486e565b60405180910390f35b34801561070557600080fd5b5061070e6118df565b60405161071b91906144dd565b60405180910390f35b34801561073057600080fd5b5061074b6004803603810190610746919061401c565b611905565b005b6107556119af565b005b34801561076357600080fd5b5061077e60048036038101906107799190614065565b611b11565b60405161078b91906144dd565b60405180910390f35b3480156107a057600080fd5b506107bb60048036038101906107b69190613f95565b611bc3565b005b3480156107c957600080fd5b506107d2611c80565b6040516107df919061486e565b60405180910390f35b3480156107f457600080fd5b5061080f600480360381019061080a9190613dd2565b611c86565b60405161081c919061486e565b60405180910390f35b34801561083157600080fd5b5061083a611d3e565b60405161084791906144dd565b60405180910390f35b34801561085c57600080fd5b50610865611d64565b604051610872919061486e565b60405180910390f35b34801561088757600080fd5b50610890611d75565b60405161089d91906145b1565b60405180910390f35b3480156108b257600080fd5b506108bb611d9b565b6040516108c8919061486e565b60405180910390f35b6108d9611dac565b005b3480156108e757600080fd5b5061090260048036038101906108fd9190614065565b611f17565b005b34801561091057600080fd5b50610919611fb1565b6040516109269190614596565b60405180910390f35b34801561093b57600080fd5b50610944611fc4565b60405161095191906144dd565b60405180910390f35b34801561096657600080fd5b50610981600480360381019061097c9190614065565b611fea565b005b34801561098f57600080fd5b506109aa60048036038101906109a59190614065565b612084565b005b3480156109b857600080fd5b506109c161211e565b6040516109ce9190614596565b60405180910390f35b3480156109e357600080fd5b506109fe60048036038101906109f99190613f95565b612131565b005b348015610a0c57600080fd5b50610a156121de565b604051610a229190614596565b60405180910390f35b348015610a3757600080fd5b50610a406121f1565b604051610a4d91906145cc565b60405180910390f35b348015610a6257600080fd5b50610a6b612283565b604051610a78919061486e565b60405180910390f35b348015610a8d57600080fd5b50610aa86004803603810190610aa39190613f15565b612289565b005b348015610ab657600080fd5b50610abf61229f565b005b348015610acd57600080fd5b50610ae86004803603810190610ae39190613dd2565b61234c565b604051610af5919061486e565b60405180910390f35b348015610b0a57600080fd5b50610b13612364565b604051610b20919061486e565b60405180910390f35b348015610b3557600080fd5b50610b506004803603810190610b4b9190614065565b61236a565b005b348015610b5e57600080fd5b50610b67612404565b604051610b7491906144dd565b60405180910390f35b348015610b8957600080fd5b50610ba46004803603810190610b9f9190613e92565b61242a565b005b348015610bb257600080fd5b50610bbb61248c565b604051610bc89190614596565b60405180910390f35b348015610bdd57600080fd5b50610be661249f565b604051610bf3919061486e565b60405180910390f35b348015610c0857600080fd5b50610c116124a5565b604051610c1e91906145cc565b60405180910390f35b348015610c3357600080fd5b50610c4e6004803603810190610c499190614065565b612533565b604051610c5b91906145cc565b60405180910390f35b348015610c7057600080fd5b50610c8b6004803603810190610c869190613f95565b61268c565b005b348015610c9957600080fd5b50610ca2612749565b604051610caf919061486e565b60405180910390f35b610cc061274f565b005b348015610cce57600080fd5b50610cd76128b9565b604051610ce4919061486e565b60405180910390f35b348015610cf957600080fd5b50610d146004803603810190610d0f919061401c565b6128d7565b005b348015610d2257600080fd5b50610d3d6004803603810190610d389190614065565b612981565b005b348015610d4b57600080fd5b50610d54612a1b565b005b348015610d6257600080fd5b50610d7d6004803603810190610d789190613dff565b612c1a565b604051610d8a9190614596565b60405180910390f35b348015610d9f57600080fd5b50610dba6004803603810190610db5919061401c565b612cae565b005b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610e8757507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610e975750610e9682612d58565b5b9050919050565b606060008054610ead90614b69565b80601f0160208091040260200160405190810160405280929190818152602001828054610ed990614b69565b8015610f265780601f10610efb57610100808354040283529160200191610f26565b820191906000526020600020905b815481529060010190602001808311610f0957829003601f168201915b5050505050905090565b6000610f3b82612dc2565b610f7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f719061474e565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b60198054610fc290614b69565b80601f0160208091040260200160405190810160405280929190818152602001828054610fee90614b69565b801561103b5780601f106110105761010080835404028352916020019161103b565b820191906000526020600020905b81548152906001019060200180831161101e57829003601f168201915b505050505081565b600061104e82611b11565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156110bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110b6906147ce565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff166110de612e2e565b73ffffffffffffffffffffffffffffffffffffffff16148061110d575061110c81611107612e2e565b612c1a565b5b61114c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611143906146ae565b60405180910390fd5b6111568383612e36565b505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146111eb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111e29061476e565b60405180910390fd5b80600f8190555050565b601860009054906101000a900460ff16611244576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123b906147ee565b60405180910390fd5b600060016112526006612eef565b61125c9190614968565b905060175460165461126e9190614968565b8111156112b0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a79061482e565b60405180910390fd5b600e548111156112f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112ec9061482e565b60405180910390fd5b6000600b5490508034101561133f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113369061470e565b60405180910390fd5b6113496006612efd565b6113533383612f13565b5050565b611368611362612e2e565b82612f31565b6113a7576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139e9061480e565b60405180910390fd5b6113b283838361300f565b505050565b60175481565b600c5481565b60135481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611459576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114509061476e565b60405180910390fd5b8060148190555050565b61147e8383836040518060200160405280600081525061242a565b505050565b600a5481565b601260009054906101000a900460ff166114d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114cf906145ee565b60405180910390fd5b6000816114e56006612eef565b6114ef9190614968565b9050600e54811115611536576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161152d9061482e565b60405180910390fd5b6000600a549050828161154991906149ef565b34101561158b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115829061470e565b60405180910390fd5b60005b838110156115d857600060016115a46006612eef565b6115ae9190614968565b90506115ba6006612efd565b6115c43382612f13565b5080806115d090614bcc565b91505061158e565b50505050565b600f5481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611674576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161166b9061476e565b60405180910390fd5b6000816116816006612eef565b61168b9190614968565b9050600e548111156116d2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116c99061482e565b60405180910390fd5b60005b8281101561171f57600060016116eb6006612eef565b6116f59190614968565b90506117016006612efd565b61170b8582612f13565b50808061171790614bcc565b9150506116d5565b50505050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146117b5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117ac9061476e565b60405180910390fd5b80601860016101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506001601a60006101000a81548160ff02191690831515021790555050565b601860159054906101000a900460ff1681565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611898576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161188f906146ce565b60405180910390fd5b601160008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c9061476e565b60405180910390fd5b80600890805190602001906119ab929190613be6565b5050565b601560009054906101000a900460ff166119fe576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119f5906147ee565b60405180910390fd5b60006001611a0c6006612eef565b611a169190614968565b9050601454601354611a289190614968565b811115611a6a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a619061482e565b60405180910390fd5b600e54811115611aaf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aa69061482e565b60405180910390fd5b6000600c54905080341015611af9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611af09061470e565b60405180910390fd5b611b036006612efd565b611b0d3383612f13565b5050565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611bba576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb1906146ee565b60405180910390fd5b80915050919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611c53576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c4a9061476e565b60405180910390fd5b611c5d6006612eef565b60138190555080601560006101000a81548160ff02191690831515021790555050565b60165481565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415611cf7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cee906146ce565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611d706007612eef565b905090565b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b6000611da76006612eef565b905090565b60006001611dba6007612eef565b611dc49190614968565b9050600f54811115611e0b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e029061484e565b60405180910390fd5b601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663af7d6ca3336010546040518363ffffffff1660e01b8152600401611e6a92919061456d565b600060405180830381600087803b158015611e8457600080fd5b505af1158015611e98573d6000803e3d6000fd5b50505050611ea66007612efd565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254611ef69190614968565b92505081905550611f143382600e54611f0f9190614968565b612f13565b50565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614611fa7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f9e9061476e565b60405180910390fd5b8060178190555050565b601860009054906101000a900460ff1681565b600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461207a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120719061476e565b60405180910390fd5b80600a8190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210b9061476e565b60405180910390fd5b80600b8190555050565b601560009054906101000a900460ff1681565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146121c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b89061476e565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b601a60009054906101000a900460ff1681565b60606001805461220090614b69565b80601f016020809104026020016040519081016040528092919081815260200182805461222c90614b69565b80156122795780601f1061224e57610100808354040283529160200191612279565b820191906000526020600020905b81548152906001019060200180831161225c57829003601f168201915b5050505050905090565b60105481565b61229b612294612e2e565b838361326b565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461232f576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123269061476e565b60405180910390fd5b6001601860156101000a81548160ff021916908315150217905550565b60116020528060005260406000206000915090505481565b600b5481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146123fa576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123f19061476e565b60405180910390fd5b80600c8190555050565b601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b61243b612435612e2e565b83612f31565b61247a576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124719061480e565b60405180910390fd5b612486848484846133d8565b50505050565b601260009054906101000a900460ff1681565b60145481565b600980546124b290614b69565b80601f01602080910402602001604051908101604052809291908181526020018280546124de90614b69565b801561252b5780601f106125005761010080835404028352916020019161252b565b820191906000526020600020905b81548152906001019060200180831161250e57829003601f168201915b505050505081565b606061253e82612dc2565b61257d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612574906147ae565b60405180910390fd5b60001515601860159054906101000a900460ff161515141561262b57601980546125a690614b69565b80601f01602080910402602001604051908101604052809291908181526020018280546125d290614b69565b801561261f5780601f106125f45761010080835404028352916020019161261f565b820191906000526020600020905b81548152906001019060200180831161260257829003601f168201915b50505050509050612687565b6000612635613434565b905060008151116126555760405180602001604052806000815250612683565b8061265f846134c6565b6009604051602001612673939291906144ac565b6040516020818303038152906040525b9150505b919050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161461271c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127139061476e565b60405180910390fd5b6127266006612eef565b60168190555080601860006101000a81548160ff02191690831515021790555050565b600e5481565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16146127df576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127d69061476e565b60405180910390fd5b600060016127ed6007612eef565b6127f79190614968565b9050600f5481111561283e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128359061484e565b60405180910390fd5b6128486007612efd565b6001601160003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546128989190614968565b925050819055506128b63382600e546128b19190614968565b612f13565b50565b60006128c56006612eef565b600e546128d29190614a49565b905090565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612967576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161295e9061476e565b60405180910390fd5b806009908051906020019061297d929190613be6565b5050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612a11576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a089061476e565b60405180910390fd5b8060108190555050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612aa29061476e565b60405180910390fd5b60004790506000670de0b6b3a764000067049f0dbc5634800083612acf91906149ef565b612ad991906149be565b9050601a60019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612b43573d6000803e3d6000fd5b50601b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612bac573d6000803e3d6000fd5b50601c60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff166108fc829081150290604051600060405180830381858888f19350505050158015612c15573d6000803e3d6000fd5b505050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b3373ffffffffffffffffffffffffffffffffffffffff16600d60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614612d3e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612d359061476e565b60405180910390fd5b8060199080519060200190612d54929190613be6565b5050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16612ea983611b11565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b6001816000016000828254019250508190555050565b612f2d828260405180602001604052806000815250613627565b5050565b6000612f3c82612dc2565b612f7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f729061468e565b60405180910390fd5b6000612f8683611b11565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161480612ff557508373ffffffffffffffffffffffffffffffffffffffff16612fdd84610f30565b73ffffffffffffffffffffffffffffffffffffffff16145b8061300657506130058185612c1a565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff1661302f82611b11565b73ffffffffffffffffffffffffffffffffffffffff1614613085576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161307c9061478e565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156130f5576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016130ec9061464e565b60405180910390fd5b613100838383613682565b61310b600082612e36565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461315b9190614a49565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546131b29190614968565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156132da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132d19061466e565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516133cb9190614596565b60405180910390a3505050565b6133e384848461300f565b6133ef84848484613869565b61342e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134259061460e565b60405180910390fd5b50505050565b60606008805461344390614b69565b80601f016020809104026020016040519081016040528092919081815260200182805461346f90614b69565b80156134bc5780601f10613491576101008083540402835291602001916134bc565b820191906000526020600020905b81548152906001019060200180831161349f57829003601f168201915b5050505050905090565b6060600082141561350e576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050613622565b600082905060005b6000821461354057808061352990614bcc565b915050600a8261353991906149be565b9150613516565b60008167ffffffffffffffff81111561355c5761355b614d02565b5b6040519080825280601f01601f19166020018201604052801561358e5781602001600182028036833780820191505090505b5090505b6000851461361b576001826135a79190614a49565b9150600a856135b69190614c15565b60306135c29190614968565b60f81b8183815181106135d8576135d7614cd3565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a8561361491906149be565b9450613592565b8093505050505b919050565b6136318383613a00565b61363e6000848484613869565b61367d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016136749061460e565b60405180910390fd5b505050565b61368d838383613bce565b60011515601a60009054906101000a900460ff161515141561373957601860019054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1663d230af3a84846040518363ffffffff1660e01b81526004016137069291906144f8565b600060405180830381600087803b15801561372057600080fd5b505af1158015613734573d6000803e3d6000fd5b505050505b600e54811180156137775750600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614155b80156137b05750600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614155b15613864576001601160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546138059190614a49565b925050819055506001601160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461385c9190614968565b925050819055505b505050565b600061388a8473ffffffffffffffffffffffffffffffffffffffff16613bd3565b156139f3578373ffffffffffffffffffffffffffffffffffffffff1663150b7a026138b3612e2e565b8786866040518563ffffffff1660e01b81526004016138d59493929190614521565b602060405180830381600087803b1580156138ef57600080fd5b505af192505050801561392057506040513d601f19601f8201168201806040525081019061391d9190613fef565b60015b6139a3573d8060008114613950576040519150601f19603f3d011682016040523d82523d6000602084013e613955565b606091505b5060008151141561399b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016139929061460e565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149150506139f8565b600190505b949350505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415613a70576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a679061472e565b60405180910390fd5b613a7981612dc2565b15613ab9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613ab09061462e565b60405180910390fd5b613ac560008383613682565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254613b159190614968565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b505050565b600080823b905060008111915050919050565b828054613bf290614b69565b90600052602060002090601f016020900481019282613c145760008555613c5b565b82601f10613c2d57805160ff1916838001178555613c5b565b82800160010185558215613c5b579182015b82811115613c5a578251825591602001919060010190613c3f565b5b509050613c689190613c6c565b5090565b5b80821115613c85576000816000905550600101613c6d565b5090565b6000613c9c613c97846148ae565b614889565b905082815260208101848484011115613cb857613cb7614d36565b5b613cc3848285614b27565b509392505050565b6000613cde613cd9846148df565b614889565b905082815260208101848484011115613cfa57613cf9614d36565b5b613d05848285614b27565b509392505050565b600081359050613d1c8161522c565b92915050565b600081359050613d3181615243565b92915050565b600081359050613d468161525a565b92915050565b600081519050613d5b8161525a565b92915050565b600082601f830112613d7657613d75614d31565b5b8135613d86848260208601613c89565b91505092915050565b600082601f830112613da457613da3614d31565b5b8135613db4848260208601613ccb565b91505092915050565b600081359050613dcc81615271565b92915050565b600060208284031215613de857613de7614d40565b5b6000613df684828501613d0d565b91505092915050565b60008060408385031215613e1657613e15614d40565b5b6000613e2485828601613d0d565b9250506020613e3585828601613d0d565b9150509250929050565b600080600060608486031215613e5857613e57614d40565b5b6000613e6686828701613d0d565b9350506020613e7786828701613d0d565b9250506040613e8886828701613dbd565b9150509250925092565b60008060008060808587031215613eac57613eab614d40565b5b6000613eba87828801613d0d565b9450506020613ecb87828801613d0d565b9350506040613edc87828801613dbd565b925050606085013567ffffffffffffffff811115613efd57613efc614d3b565b5b613f0987828801613d61565b91505092959194509250565b60008060408385031215613f2c57613f2b614d40565b5b6000613f3a85828601613d0d565b9250506020613f4b85828601613d22565b9150509250929050565b60008060408385031215613f6c57613f6b614d40565b5b6000613f7a85828601613d0d565b9250506020613f8b85828601613dbd565b9150509250929050565b600060208284031215613fab57613faa614d40565b5b6000613fb984828501613d22565b91505092915050565b600060208284031215613fd857613fd7614d40565b5b6000613fe684828501613d37565b91505092915050565b60006020828403121561400557614004614d40565b5b600061401384828501613d4c565b91505092915050565b60006020828403121561403257614031614d40565b5b600082013567ffffffffffffffff8111156140505761404f614d3b565b5b61405c84828501613d8f565b91505092915050565b60006020828403121561407b5761407a614d40565b5b600061408984828501613dbd565b91505092915050565b61409b81614a7d565b82525050565b6140aa81614a8f565b82525050565b60006140bb82614925565b6140c5818561493b565b93506140d5818560208601614b36565b6140de81614d45565b840191505092915050565b6140f281614af1565b82525050565b600061410382614930565b61410d818561494c565b935061411d818560208601614b36565b61412681614d45565b840191505092915050565b600061413c82614930565b614146818561495d565b9350614156818560208601614b36565b80840191505092915050565b6000815461416f81614b69565b614179818661495d565b9450600182166000811461419457600181146141a5576141d8565b60ff198316865281860193506141d8565b6141ae85614910565b60005b838110156141d0578154818901526001820191506020810190506141b1565b838801955050505b50505092915050565b60006141ee60158361494c565b91506141f982614d56565b602082019050919050565b600061421160328361494c565b915061421c82614d7f565b604082019050919050565b6000614234601c8361494c565b915061423f82614dce565b602082019050919050565b600061425760248361494c565b915061426282614df7565b604082019050919050565b600061427a60198361494c565b915061428582614e46565b602082019050919050565b600061429d602c8361494c565b91506142a882614e6f565b604082019050919050565b60006142c060388361494c565b91506142cb82614ebe565b604082019050919050565b60006142e3602a8361494c565b91506142ee82614f0d565b604082019050919050565b600061430660298361494c565b915061431182614f5c565b604082019050919050565b600061432960168361494c565b915061433482614fab565b602082019050919050565b600061434c60208361494c565b915061435782614fd4565b602082019050919050565b600061436f602c8361494c565b915061437a82614ffd565b604082019050919050565b600061439260208361494c565b915061439d8261504c565b602082019050919050565b60006143b560298361494c565b91506143c082615075565b604082019050919050565b60006143d8602f8361494c565b91506143e3826150c4565b604082019050919050565b60006143fb60218361494c565b915061440682615113565b604082019050919050565b600061441e60128361494c565b915061442982615162565b602082019050919050565b600061444160318361494c565b915061444c8261518b565b604082019050919050565b600061446460098361494c565b915061446f826151da565b602082019050919050565b6000614487601a8361494c565b915061449282615203565b602082019050919050565b6144a681614ae7565b82525050565b60006144b88286614131565b91506144c48285614131565b91506144d08284614162565b9150819050949350505050565b60006020820190506144f26000830184614092565b92915050565b600060408201905061450d6000830185614092565b61451a6020830184614092565b9392505050565b60006080820190506145366000830187614092565b6145436020830186614092565b614550604083018561449d565b818103606083015261456281846140b0565b905095945050505050565b60006040820190506145826000830185614092565b61458f602083018461449d565b9392505050565b60006020820190506145ab60008301846140a1565b92915050565b60006020820190506145c660008301846140e9565b92915050565b600060208201905081810360008301526145e681846140f8565b905092915050565b60006020820190508181036000830152614607816141e1565b9050919050565b6000602082019050818103600083015261462781614204565b9050919050565b6000602082019050818103600083015261464781614227565b9050919050565b600060208201905081810360008301526146678161424a565b9050919050565b600060208201905081810360008301526146878161426d565b9050919050565b600060208201905081810360008301526146a781614290565b9050919050565b600060208201905081810360008301526146c7816142b3565b9050919050565b600060208201905081810360008301526146e7816142d6565b9050919050565b60006020820190508181036000830152614707816142f9565b9050919050565b600060208201905081810360008301526147278161431c565b9050919050565b600060208201905081810360008301526147478161433f565b9050919050565b6000602082019050818103600083015261476781614362565b9050919050565b6000602082019050818103600083015261478781614385565b9050919050565b600060208201905081810360008301526147a7816143a8565b9050919050565b600060208201905081810360008301526147c7816143cb565b9050919050565b600060208201905081810360008301526147e7816143ee565b9050919050565b6000602082019050818103600083015261480781614411565b9050919050565b6000602082019050818103600083015261482781614434565b9050919050565b6000602082019050818103600083015261484781614457565b9050919050565b600060208201905081810360008301526148678161447a565b9050919050565b6000602082019050614883600083018461449d565b92915050565b60006148936148a4565b905061489f8282614b9b565b919050565b6000604051905090565b600067ffffffffffffffff8211156148c9576148c8614d02565b5b6148d282614d45565b9050602081019050919050565b600067ffffffffffffffff8211156148fa576148f9614d02565b5b61490382614d45565b9050602081019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600061497382614ae7565b915061497e83614ae7565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156149b3576149b2614c46565b5b828201905092915050565b60006149c982614ae7565b91506149d483614ae7565b9250826149e4576149e3614c75565b5b828204905092915050565b60006149fa82614ae7565b9150614a0583614ae7565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0483118215151615614a3e57614a3d614c46565b5b828202905092915050565b6000614a5482614ae7565b9150614a5f83614ae7565b925082821015614a7257614a71614c46565b5b828203905092915050565b6000614a8882614ac7565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b6000614afc82614b03565b9050919050565b6000614b0e82614b15565b9050919050565b6000614b2082614ac7565b9050919050565b82818337600083830152505050565b60005b83811015614b54578082015181840152602081019050614b39565b83811115614b63576000848401525b50505050565b60006002820490506001821680614b8157607f821691505b60208210811415614b9557614b94614ca4565b5b50919050565b614ba482614d45565b810181811067ffffffffffffffff82111715614bc357614bc2614d02565b5b80604052505050565b6000614bd782614ae7565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614c0a57614c09614c46565b5b600182019050919050565b6000614c2082614ae7565b9150614c2b83614ae7565b925082614c3b57614c3a614c75565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f5075626c69632053616c6520497320436c6f7365640000000000000000000000600082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f4e6f7420656e6f7567682045544820746f206275792100000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5072652053616c6520497320436c6f7365640000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f536f6c64206f7574210000000000000000000000000000000000000000000000600082015250565b7f4e6f206d6f7265205465737461277320617661696c61626c6521000000000000600082015250565b61523581614a7d565b811461524057600080fd5b50565b61524c81614a8f565b811461525757600080fd5b50565b61526381614a9b565b811461526e57600080fd5b50565b61527a81614ae7565b811461528557600080fd5b5056fea2646970667358221220441fcc5a6c732a5bf96de4dc9fbc4c6cf7b540750394815cd5da759394e2457a64736f6c63430008070033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000008000000000000000000000000000000000000000000000000000000000000000c000000000000000000000000000000000000000000000000000000000000001000000000000000000000000000000000000000000000000000000000000000120000000000000000000000000000000000000000000000000000000000000000a42697442616e64697473000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000002424200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000041697066733a2f2f516d6135317a6f38476e467a3750335139344e4d477a685155767271326f6934784377667a427972504c3256644b2f68696464656e2e6a736f6e00000000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : _name (string): BitBandits
Arg [1] : _symbol (string): BB
Arg [2] : _initBaseURI (string):
Arg [3] : _initNotRevealedUri (string): ipfs://Qma51zo8GnFz7P3Q94NMGzhQUvrq2oi4xCwfzByrPL2VdK/hidden.json
-----Encoded View---------------
13 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [1] : 00000000000000000000000000000000000000000000000000000000000000c0
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000100
Arg [3] : 0000000000000000000000000000000000000000000000000000000000000120
Arg [4] : 000000000000000000000000000000000000000000000000000000000000000a
Arg [5] : 42697442616e6469747300000000000000000000000000000000000000000000
Arg [6] : 0000000000000000000000000000000000000000000000000000000000000002
Arg [7] : 4242000000000000000000000000000000000000000000000000000000000000
Arg [8] : 0000000000000000000000000000000000000000000000000000000000000000
Arg [9] : 0000000000000000000000000000000000000000000000000000000000000041
Arg [10] : 697066733a2f2f516d6135317a6f38476e467a3750335139344e4d477a685155
Arg [11] : 767271326f6934784377667a427972504c3256644b2f68696464656e2e6a736f
Arg [12] : 6e00000000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
35326:9210:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;22677:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23622:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25181:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36412:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;24704:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41357:101;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40002:520;;;:::i;:::-;;25931:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36260:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35693:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36093:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41892:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26341:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35597:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38756:632;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35829:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;37803:474;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37575:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36377:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41032:204;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36568:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42129:104;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39474:520;;;:::i;:::-;;23316:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42613:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36219:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23046:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36495:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43606:106;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36346:22;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43497:101;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40612:413;;;:::i;:::-;;42007:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36303:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35742:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41557:106;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41783:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36176:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42505:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36447:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23791:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35904:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25474:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41484:65;;;;;;;;;;;;;:::i;:::-;;35988:49;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35646:40;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41675:102;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36641:66;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26597:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;36048:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;36134:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;35553:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43831:497;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42772:153;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;35790:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38287:377;;;:::i;:::-;;43370:117;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42369:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;41246:99;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42974:308;;;;;;;;;;;;;:::i;:::-;;25700:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42241:120;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;22677:305;22779:4;22831:25;22816:40;;;:11;:40;;;;:105;;;;22888:33;22873:48;;;:11;:48;;;;22816:105;:158;;;;22938:36;22962:11;22938:23;:36::i;:::-;22816:158;22796:178;;22677:305;;;:::o;23622:100::-;23676:13;23709:5;23702:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23622:100;:::o;25181:221::-;25257:7;25285:16;25293:7;25285;:16::i;:::-;25277:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;25370:15;:24;25386:7;25370:24;;;;;;;;;;;;;;;;;;;;;25363:31;;25181:221;;;:::o;36412:28::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;24704:411::-;24785:13;24801:23;24816:7;24801:14;:23::i;:::-;24785:39;;24849:5;24843:11;;:2;:11;;;;24835:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;24943:5;24927:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;24952:37;24969:5;24976:12;:10;:12::i;:::-;24952:16;:37::i;:::-;24927:62;24905:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;25086:21;25095:2;25099:7;25086:8;:21::i;:::-;24774:341;24704:411;;:::o;41357:101::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41443:7:::1;41426:14;:24;;;;41357:101:::0;:::o;40002:520::-;40060:14;;;;;;;;;;;40052:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;40110:17;40155:1;40130:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;40110:46;;40220:14;;40198:19;;:36;;;;:::i;:::-;40185:9;:49;;40177:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40280:9;;40267;:22;;40259:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;40316:17;40336:12;;40316:32;;40380:9;40367;:22;;40359:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;40447:24;:12;:22;:24::i;:::-;40482:32;40492:10;40504:9;40482;:32::i;:::-;40041:481;;40002:520::o;25931:339::-;26126:41;26145:12;:10;:12::i;:::-;26159:7;26126:18;:41::i;:::-;26118:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26234:28;26244:4;26250:2;26254:7;26234:9;:28::i;:::-;25931:339;;;:::o;36260:36::-;;;;:::o;35693:40::-;;;;:::o;36093:34::-;;;;:::o;41892:110::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41984:10:::1;41967:14;:27;;;;41892:110:::0;:::o;26341:185::-;26479:39;26496:4;26502:2;26506:7;26479:39;;;;;;;;;;;;:16;:39::i;:::-;26341:185;;;:::o;35597:42::-;;;;:::o;38756:632::-;38829:16;;;;;;;;;;;38821:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;38884:22;38934:8;38909:22;:12;:20;:22::i;:::-;:33;;;;:::i;:::-;38884:58;;38980:9;;38962:14;:27;;38954:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;39016:17;39036:14;;39016:34;;39094:8;39082:9;:20;;;;:::i;:::-;39069:9;:33;;39061:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;39149:9;39144:237;39168:8;39164:1;:12;39144:237;;;39197:17;39242:1;39217:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;39197:46;;39298:24;:12;:22;:24::i;:::-;39337:32;39347:10;39359:9;39337;:32::i;:::-;39182:199;39178:3;;;;;:::i;:::-;;;;39144:237;;;;38810:578;;38756:632;:::o;35829:34::-;;;;:::o;37803:474::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37895:22:::1;37945:8;37920:22;:12;:20;:22::i;:::-;:33;;;;:::i;:::-;37895:58;;37991:9;;37973:14;:27;;37965:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;38040:9;38035:235;38059:8;38055:1;:12;38035:235;;;38088:17;38133:1;38108:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;38088:46;;38189:24;:12;:22;:24::i;:::-;38228:30;38238:8;38248:9;38228;:30::i;:::-;38073:197;38069:3;;;;;:::i;:::-;;;;38035:235;;;;37884:393;37803:474:::0;;:::o;37575:132::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;37659:10:::1;37641;;:29;;;;;;;;;;;;;;;;;;37695:4;37681:11;;:18;;;;;;;;;;;;;;;;;;37575:132:::0;:::o;36377:28::-;;;;;;;;;;;;;:::o;41032:204::-;41094:7;41139:1;41121:20;;:6;:20;;;;41113:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;41206:14;:22;41221:6;41206:22;;;;;;;;;;;;;;;;41199:29;;41032:204;;;:::o;36568:66::-;;;;;;;;;;;;;:::o;42129:104::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42214:11:::1;42204:7;:21;;;;;;;;;;;;:::i;:::-;;42129:104:::0;:::o;39474:520::-;39532:14;;;;;;;;;;;39524:45;;;;;;;;;;;;:::i;:::-;;;;;;;;;39582:17;39627:1;39602:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;39582:46;;39692:14;;39670:19;;:36;;;;:::i;:::-;39657:9;:49;;39649:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;39752:9;;39739;:22;;39731:44;;;;;;;;;;;;:::i;:::-;;;;;;;;;39788:17;39808:12;;39788:32;;39852:9;39839;:22;;39831:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;39919:24;:12;:22;:24::i;:::-;39954:32;39964:10;39976:9;39954;:32::i;:::-;39513:481;;39474:520::o;23316:239::-;23388:7;23408:13;23424:7;:16;23432:7;23424:16;;;;;;;;;;;;;;;;;;;;;23408:32;;23476:1;23459:19;;:5;:19;;;;23451:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;23542:5;23535:12;;;23316:239;;;:::o;42613:153::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42702:22:::1;:12;:20;:22::i;:::-;42680:19;:44;;;;42752:6;42735:14;;:23;;;;;;;;;;;;;;;;;;42613:153:::0;:::o;36219:34::-;;;;:::o;23046:208::-;23118:7;23163:1;23146:19;;:5;:19;;;;23138:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;23230:9;:16;23240:5;23230:16;;;;;;;;;;;;;;;;23223:23;;23046:208;;;:::o;36495:66::-;;;;;;;;;;;;;:::o;43606:106::-;43655:7;43682:22;:12;:20;:22::i;:::-;43675:29;;43606:106;:::o;36346:22::-;;;;;;;;;;;;;:::o;43497:101::-;43541:7;43568:22;:12;:20;:22::i;:::-;43561:29;;43497:101;:::o;40612:413::-;40659:22;40709:1;40684:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;40659:51;;40765:14;;40747;:32;;40739:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;40821:10;;;;;;;;;;;:16;;;40838:10;40850:11;;40821:41;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40891:24;:12;:22;:24::i;:::-;40956:1;40926:14;:26;40941:10;40926:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;40968:49;40978:10;41002:14;40990:9;;:26;;;;:::i;:::-;40968:9;:49::i;:::-;40648:377;40612:413::o;42007:110::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42099:10:::1;42082:14;:27;;;;42007:110:::0;:::o;36303:34::-;;;;;;;;;;;;;:::o;35742:33::-;;;;;;;;;;;;;:::o;41557:106::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41647:8:::1;41630:14;:25;;;;41557:106:::0;:::o;41783:102::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41869:8:::1;41854:12;:23;;;;41783:102:::0;:::o;36176:34::-;;;;;;;;;;;;;:::o;42505:102::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42593:6:::1;42574:16;;:25;;;;;;;;;;;;;;;;;;42505:102:::0;:::o;36447:31::-;;;;;;;;;;;;;:::o;23791:104::-;23847:13;23880:7;23873:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;23791:104;:::o;35904:38::-;;;;:::o;25474:155::-;25569:52;25588:12;:10;:12::i;:::-;25602:8;25612;25569:18;:52::i;:::-;25474:155;;:::o;41484:65::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41539:4:::1;41528:8;;:15;;;;;;;;;;;;;;;;;;41484:65::o:0;35988:49::-;;;;;;;;;;;;;;;;;:::o;35646:40::-;;;;:::o;41675:102::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41761:8:::1;41746:12;:23;;;;41675:102:::0;:::o;36641:66::-;;;;;;;;;;;;;:::o;26597:328::-;26772:41;26791:12;:10;:12::i;:::-;26805:7;26772:18;:41::i;:::-;26764:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;26878:39;26892:4;26898:2;26902:7;26911:5;26878:13;:39::i;:::-;26597:328;;;;:::o;36048:36::-;;;;;;;;;;;;;:::o;36134:35::-;;;;:::o;35553:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43831:497::-;43929:13;43970:16;43978:7;43970;:16::i;:::-;43954:97;;;;;;;;;;;;:::i;:::-;;;;;;;;;44079:5;44067:17;;:8;;;;;;;;;;;:17;;;44064:62;;;44104:14;44097:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;44064:62;44134:28;44165:10;:8;:10::i;:::-;44134:41;;44220:1;44195:14;44189:28;:32;:133;;;;;;;;;;;;;;;;;44257:14;44273:18;:7;:16;:18::i;:::-;44293:13;44240:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;44189:133;44182:140;;;43831:497;;;;:::o;42772:153::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42861:22:::1;:12;:20;:22::i;:::-;42839:19;:44;;;;42911:6;42894:14;;:23;;;;;;;;;;;;;;;;;;42772:153:::0;:::o;35790:31::-;;;;:::o;38287:377::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;38350:22:::1;38400:1;38375:22;:12;:20;:22::i;:::-;:26;;;;:::i;:::-;38350:51;;38456:14;;38438;:32;;38430:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;38530:24;:12;:22;:24::i;:::-;38595:1;38565:14;:26;38580:10;38565:26;;;;;;;;;;;;;;;;:31;;;;;;;:::i;:::-;;;;;;;;38607:49;38617:10;38641:14;38629:9;;:26;;;;:::i;:::-;38607:9;:49::i;:::-;38339:325;38287:377::o:0;43370:117::-;43418:7;43457:22;:12;:20;:22::i;:::-;43445:9;;:34;;;;:::i;:::-;43438:41;;43370:117;:::o;42369:128::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42472:17:::1;42456:13;:33;;;;;;;;;;;;:::i;:::-;;42369:128:::0;:::o;41246:99::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;41329:8:::1;41315:11;:22;;;;41246:99:::0;:::o;42974:308::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;43027:15:::1;43045:21;43027:39;;43079:17;43125:7;43110:11;43100:7;:21;;;;:::i;:::-;43099:33;;;;:::i;:::-;43079:53;;43153:6;;;;;;;;;;;43145:24;;:35;43170:9;43145:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43199:6;;;;;;;;;;;43191:24;;:35;43216:9;43191:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43245:6;;;;;;;;;;;43237:24;;:35;43262:9;43237:35;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;43016:266;;42974:308::o:0;25700:164::-;25797:4;25821:18;:25;25840:5;25821:25;;;;;;;;;;;;;;;:35;25847:8;25821:35;;;;;;;;;;;;;;;;;;;;;;;;;25814:42;;25700:164;;;;:::o;42241:120::-;44466:10;44457:19;;:5;;;;;;;;;;;:19;;;44449:64;;;;;;;;;;;;:::i;:::-;;;;;;;;;42340:15:::1;42323:14;:32;;;;;;;;;;;;:::i;:::-;;42241:120:::0;:::o;15446:157::-;15531:4;15570:25;15555:40;;;:11;:40;;;;15548:47;;15446:157;;;:::o;28435:127::-;28500:4;28552:1;28524:30;;:7;:16;28532:7;28524:16;;;;;;;;;;;;;;;;;;;;;:30;;;;28517:37;;28435:127;;;:::o;4268:98::-;4321:7;4348:10;4341:17;;4268:98;:::o;32417:174::-;32519:2;32492:15;:24;32508:7;32492:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;32575:7;32571:2;32537:46;;32546:23;32561:7;32546:14;:23::i;:::-;32537:46;;;;;;;;;;;;32417:174;;:::o;872:114::-;937:7;964;:14;;;957:21;;872:114;;;:::o;994:127::-;1101:1;1083:7;:14;;;:19;;;;;;;;;;;994:127;:::o;29419:110::-;29495:26;29505:2;29509:7;29495:26;;;;;;;;;;;;:9;:26::i;:::-;29419:110;;:::o;28729:348::-;28822:4;28847:16;28855:7;28847;:16::i;:::-;28839:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;28923:13;28939:23;28954:7;28939:14;:23::i;:::-;28923:39;;28992:5;28981:16;;:7;:16;;;:51;;;;29025:7;29001:31;;:20;29013:7;29001:11;:20::i;:::-;:31;;;28981:51;:87;;;;29036:32;29053:5;29060:7;29036:16;:32::i;:::-;28981:87;28973:96;;;28729:348;;;;:::o;31721:578::-;31880:4;31853:31;;:23;31868:7;31853:14;:23::i;:::-;:31;;;31845:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;31963:1;31949:16;;:2;:16;;;;31941:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;32019:39;32040:4;32046:2;32050:7;32019:20;:39::i;:::-;32123:29;32140:1;32144:7;32123:8;:29::i;:::-;32184:1;32165:9;:15;32175:4;32165:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;32213:1;32196:9;:13;32206:2;32196:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;32244:2;32225:7;:16;32233:7;32225:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;32283:7;32279:2;32264:27;;32273:4;32264:27;;;;;;;;;;;;31721:578;;;:::o;32733:315::-;32888:8;32879:17;;:5;:17;;;;32871:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;32975:8;32937:18;:25;32956:5;32937:25;;;;;;;;;;;;;;;:35;32963:8;32937:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;33021:8;32999:41;;33014:5;32999:41;;;33031:8;32999:41;;;;;;:::i;:::-;;;;;;;;32733:315;;;:::o;27807:::-;27964:28;27974:4;27980:2;27984:7;27964:9;:28::i;:::-;28011:48;28034:4;28040:2;28044:7;28053:5;28011:22;:48::i;:::-;28003:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;27807:315;;;;:::o;43720:100::-;43772:13;43805:7;43798:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43720:100;:::o;1830:723::-;1886:13;2116:1;2107:5;:10;2103:53;;;2134:10;;;;;;;;;;;;;;;;;;;;;2103:53;2166:12;2181:5;2166:20;;2197:14;2222:78;2237:1;2229:4;:9;2222:78;;2255:8;;;;;:::i;:::-;;;;2286:2;2278:10;;;;;:::i;:::-;;;2222:78;;;2310:19;2342:6;2332:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2310:39;;2360:154;2376:1;2367:5;:10;2360:154;;2404:1;2394:11;;;;;:::i;:::-;;;2471:2;2463:5;:10;;;;:::i;:::-;2450:2;:24;;;;:::i;:::-;2437:39;;2420:6;2427;2420:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2500:2;2491:11;;;;;:::i;:::-;;;2360:154;;;2538:6;2524:21;;;;;1830:723;;;;:::o;29756:321::-;29886:18;29892:2;29896:7;29886:5;:18::i;:::-;29937:54;29968:1;29972:2;29976:7;29985:5;29937:22;:54::i;:::-;29915:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;29756:321;;;:::o;37128:439::-;37238:45;37265:4;37271:2;37275:7;37238:26;:45::i;:::-;37315:4;37300:19;;:11;;;;;;;;;;;:19;;;37296:84;;;37335:10;;;;;;;;;;;:23;;;37359:4;37365:2;37335:33;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;37296:84;37416:9;;37406:7;:19;:41;;;;;37445:1;37429:18;;:4;:18;;;;37406:41;:61;;;;;37465:1;37451:16;;:2;:16;;;;37406:61;37402:156;;;37507:1;37483:14;:20;37498:4;37483:20;;;;;;;;;;;;;;;;:25;;;;;;;:::i;:::-;;;;;;;;37545:1;37523:14;:18;37538:2;37523:18;;;;;;;;;;;;;;;;:23;;;;;;;:::i;:::-;;;;;;;;37402:156;37128:439;;;:::o;33613:799::-;33768:4;33789:15;:2;:13;;;:15::i;:::-;33785:620;;;33841:2;33825:36;;;33862:12;:10;:12::i;:::-;33876:4;33882:7;33891:5;33825:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;33821:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;34084:1;34067:6;:13;:18;34063:272;;;34110:60;;;;;;;;;;:::i;:::-;;;;;;;;34063:272;34285:6;34279:13;34270:6;34266:2;34262:15;34255:38;33821:529;33958:41;;;33948:51;;;:6;:51;;;;33941:58;;;;;33785:620;34389:4;34382:11;;33613:799;;;;;;;:::o;30413:382::-;30507:1;30493:16;;:2;:16;;;;30485:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;30566:16;30574:7;30566;:16::i;:::-;30565:17;30557:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;30628:45;30657:1;30661:2;30665:7;30628:20;:45::i;:::-;30703:1;30686:9;:13;30696:2;30686:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;30734:2;30715:7;:16;30723:7;30715:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;30779:7;30775:2;30754:33;;30771:1;30754:33;;;;;;;;;;;;30413:382;;:::o;34984:126::-;;;;:::o;5302:387::-;5362:4;5570:12;5637:7;5625:20;5617:28;;5680:1;5673:4;:8;5666:15;;;5302:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;986:133::-;1029:5;1067:6;1054:20;1045:29;;1083:30;1107:5;1083:30;:::i;:::-;986:133;;;;:::o;1125:137::-;1170:5;1208:6;1195:20;1186:29;;1224:32;1250:5;1224:32;:::i;:::-;1125:137;;;;:::o;1268:141::-;1324:5;1355:6;1349:13;1340:22;;1371:32;1397:5;1371:32;:::i;:::-;1268:141;;;;:::o;1428:338::-;1483:5;1532:3;1525:4;1517:6;1513:17;1509:27;1499:122;;1540:79;;:::i;:::-;1499:122;1657:6;1644:20;1682:78;1756:3;1748:6;1741:4;1733:6;1729:17;1682:78;:::i;:::-;1673:87;;1489:277;1428:338;;;;:::o;1786:340::-;1842:5;1891:3;1884:4;1876:6;1872:17;1868:27;1858:122;;1899:79;;:::i;:::-;1858:122;2016:6;2003:20;2041:79;2116:3;2108:6;2101:4;2093:6;2089:17;2041:79;:::i;:::-;2032:88;;1848:278;1786:340;;;;:::o;2132:139::-;2178:5;2216:6;2203:20;2194:29;;2232:33;2259:5;2232:33;:::i;:::-;2132:139;;;;:::o;2277:329::-;2336:6;2385:2;2373:9;2364:7;2360:23;2356:32;2353:119;;;2391:79;;:::i;:::-;2353:119;2511:1;2536:53;2581:7;2572:6;2561:9;2557:22;2536:53;:::i;:::-;2526:63;;2482:117;2277:329;;;;:::o;2612:474::-;2680:6;2688;2737:2;2725:9;2716:7;2712:23;2708:32;2705:119;;;2743:79;;:::i;:::-;2705:119;2863:1;2888:53;2933:7;2924:6;2913:9;2909:22;2888:53;:::i;:::-;2878:63;;2834:117;2990:2;3016:53;3061:7;3052:6;3041:9;3037:22;3016:53;:::i;:::-;3006:63;;2961:118;2612:474;;;;;:::o;3092:619::-;3169:6;3177;3185;3234:2;3222:9;3213:7;3209:23;3205:32;3202:119;;;3240:79;;:::i;:::-;3202:119;3360:1;3385:53;3430:7;3421:6;3410:9;3406:22;3385:53;:::i;:::-;3375:63;;3331:117;3487:2;3513:53;3558:7;3549:6;3538:9;3534:22;3513:53;:::i;:::-;3503:63;;3458:118;3615:2;3641:53;3686:7;3677:6;3666:9;3662:22;3641:53;:::i;:::-;3631:63;;3586:118;3092:619;;;;;:::o;3717:943::-;3812:6;3820;3828;3836;3885:3;3873:9;3864:7;3860:23;3856:33;3853:120;;;3892:79;;:::i;:::-;3853:120;4012:1;4037:53;4082:7;4073:6;4062:9;4058:22;4037:53;:::i;:::-;4027:63;;3983:117;4139:2;4165:53;4210:7;4201:6;4190:9;4186:22;4165:53;:::i;:::-;4155:63;;4110:118;4267:2;4293:53;4338:7;4329:6;4318:9;4314:22;4293:53;:::i;:::-;4283:63;;4238:118;4423:2;4412:9;4408:18;4395:32;4454:18;4446:6;4443:30;4440:117;;;4476:79;;:::i;:::-;4440:117;4581:62;4635:7;4626:6;4615:9;4611:22;4581:62;:::i;:::-;4571:72;;4366:287;3717:943;;;;;;;:::o;4666:468::-;4731:6;4739;4788:2;4776:9;4767:7;4763:23;4759:32;4756:119;;;4794:79;;:::i;:::-;4756:119;4914:1;4939:53;4984:7;4975:6;4964:9;4960:22;4939:53;:::i;:::-;4929:63;;4885:117;5041:2;5067:50;5109:7;5100:6;5089:9;5085:22;5067:50;:::i;:::-;5057:60;;5012:115;4666:468;;;;;:::o;5140:474::-;5208:6;5216;5265:2;5253:9;5244:7;5240:23;5236:32;5233:119;;;5271:79;;:::i;:::-;5233:119;5391:1;5416:53;5461:7;5452:6;5441:9;5437:22;5416:53;:::i;:::-;5406:63;;5362:117;5518:2;5544:53;5589:7;5580:6;5569:9;5565:22;5544:53;:::i;:::-;5534:63;;5489:118;5140:474;;;;;:::o;5620:323::-;5676:6;5725:2;5713:9;5704:7;5700:23;5696:32;5693:119;;;5731:79;;:::i;:::-;5693:119;5851:1;5876:50;5918:7;5909:6;5898:9;5894:22;5876:50;:::i;:::-;5866:60;;5822:114;5620:323;;;;:::o;5949:327::-;6007:6;6056:2;6044:9;6035:7;6031:23;6027:32;6024:119;;;6062:79;;:::i;:::-;6024:119;6182:1;6207:52;6251:7;6242:6;6231:9;6227:22;6207:52;:::i;:::-;6197:62;;6153:116;5949:327;;;;:::o;6282:349::-;6351:6;6400:2;6388:9;6379:7;6375:23;6371:32;6368:119;;;6406:79;;:::i;:::-;6368:119;6526:1;6551:63;6606:7;6597:6;6586:9;6582:22;6551:63;:::i;:::-;6541:73;;6497:127;6282:349;;;;:::o;6637:509::-;6706:6;6755:2;6743:9;6734:7;6730:23;6726:32;6723:119;;;6761:79;;:::i;:::-;6723:119;6909:1;6898:9;6894:17;6881:31;6939:18;6931:6;6928:30;6925:117;;;6961:79;;:::i;:::-;6925:117;7066:63;7121:7;7112:6;7101:9;7097:22;7066:63;:::i;:::-;7056:73;;6852:287;6637:509;;;;:::o;7152:329::-;7211:6;7260:2;7248:9;7239:7;7235:23;7231:32;7228:119;;;7266:79;;:::i;:::-;7228:119;7386:1;7411:53;7456:7;7447:6;7436:9;7432:22;7411:53;:::i;:::-;7401:63;;7357:117;7152:329;;;;:::o;7487:118::-;7574:24;7592:5;7574:24;:::i;:::-;7569:3;7562:37;7487:118;;:::o;7611:109::-;7692:21;7707:5;7692:21;:::i;:::-;7687:3;7680:34;7611:109;;:::o;7726:360::-;7812:3;7840:38;7872:5;7840:38;:::i;:::-;7894:70;7957:6;7952:3;7894:70;:::i;:::-;7887:77;;7973:52;8018:6;8013:3;8006:4;7999:5;7995:16;7973:52;:::i;:::-;8050:29;8072:6;8050:29;:::i;:::-;8045:3;8041:39;8034:46;;7816:270;7726:360;;;;:::o;8092:157::-;8192:50;8236:5;8192:50;:::i;:::-;8187:3;8180:63;8092:157;;:::o;8255:364::-;8343:3;8371:39;8404:5;8371:39;:::i;:::-;8426:71;8490:6;8485:3;8426:71;:::i;:::-;8419:78;;8506:52;8551:6;8546:3;8539:4;8532:5;8528:16;8506:52;:::i;:::-;8583:29;8605:6;8583:29;:::i;:::-;8578:3;8574:39;8567:46;;8347:272;8255:364;;;;:::o;8625:377::-;8731:3;8759:39;8792:5;8759:39;:::i;:::-;8814:89;8896:6;8891:3;8814:89;:::i;:::-;8807:96;;8912:52;8957:6;8952:3;8945:4;8938:5;8934:16;8912:52;:::i;:::-;8989:6;8984:3;8980:16;8973:23;;8735:267;8625:377;;;;:::o;9032:845::-;9135:3;9172:5;9166:12;9201:36;9227:9;9201:36;:::i;:::-;9253:89;9335:6;9330:3;9253:89;:::i;:::-;9246:96;;9373:1;9362:9;9358:17;9389:1;9384:137;;;;9535:1;9530:341;;;;9351:520;;9384:137;9468:4;9464:9;9453;9449:25;9444:3;9437:38;9504:6;9499:3;9495:16;9488:23;;9384:137;;9530:341;9597:38;9629:5;9597:38;:::i;:::-;9657:1;9671:154;9685:6;9682:1;9679:13;9671:154;;;9759:7;9753:14;9749:1;9744:3;9740:11;9733:35;9809:1;9800:7;9796:15;9785:26;;9707:4;9704:1;9700:12;9695:17;;9671:154;;;9854:6;9849:3;9845:16;9838:23;;9537:334;;9351:520;;9139:738;;9032:845;;;;:::o;9883:366::-;10025:3;10046:67;10110:2;10105:3;10046:67;:::i;:::-;10039:74;;10122:93;10211:3;10122:93;:::i;:::-;10240:2;10235:3;10231:12;10224:19;;9883:366;;;:::o;10255:::-;10397:3;10418:67;10482:2;10477:3;10418:67;:::i;:::-;10411:74;;10494:93;10583:3;10494:93;:::i;:::-;10612:2;10607:3;10603:12;10596:19;;10255:366;;;:::o;10627:::-;10769:3;10790:67;10854:2;10849:3;10790:67;:::i;:::-;10783:74;;10866:93;10955:3;10866:93;:::i;:::-;10984:2;10979:3;10975:12;10968:19;;10627:366;;;:::o;10999:::-;11141:3;11162:67;11226:2;11221:3;11162:67;:::i;:::-;11155:74;;11238:93;11327:3;11238:93;:::i;:::-;11356:2;11351:3;11347:12;11340:19;;10999:366;;;:::o;11371:::-;11513:3;11534:67;11598:2;11593:3;11534:67;:::i;:::-;11527:74;;11610:93;11699:3;11610:93;:::i;:::-;11728:2;11723:3;11719:12;11712:19;;11371:366;;;:::o;11743:::-;11885:3;11906:67;11970:2;11965:3;11906:67;:::i;:::-;11899:74;;11982:93;12071:3;11982:93;:::i;:::-;12100:2;12095:3;12091:12;12084:19;;11743:366;;;:::o;12115:::-;12257:3;12278:67;12342:2;12337:3;12278:67;:::i;:::-;12271:74;;12354:93;12443:3;12354:93;:::i;:::-;12472:2;12467:3;12463:12;12456:19;;12115:366;;;:::o;12487:::-;12629:3;12650:67;12714:2;12709:3;12650:67;:::i;:::-;12643:74;;12726:93;12815:3;12726:93;:::i;:::-;12844:2;12839:3;12835:12;12828:19;;12487:366;;;:::o;12859:::-;13001:3;13022:67;13086:2;13081:3;13022:67;:::i;:::-;13015:74;;13098:93;13187:3;13098:93;:::i;:::-;13216:2;13211:3;13207:12;13200:19;;12859:366;;;:::o;13231:::-;13373:3;13394:67;13458:2;13453:3;13394:67;:::i;:::-;13387:74;;13470:93;13559:3;13470:93;:::i;:::-;13588:2;13583:3;13579:12;13572:19;;13231:366;;;:::o;13603:::-;13745:3;13766:67;13830:2;13825:3;13766:67;:::i;:::-;13759:74;;13842:93;13931:3;13842:93;:::i;:::-;13960:2;13955:3;13951:12;13944:19;;13603:366;;;:::o;13975:::-;14117:3;14138:67;14202:2;14197:3;14138:67;:::i;:::-;14131:74;;14214:93;14303:3;14214:93;:::i;:::-;14332:2;14327:3;14323:12;14316:19;;13975:366;;;:::o;14347:::-;14489:3;14510:67;14574:2;14569:3;14510:67;:::i;:::-;14503:74;;14586:93;14675:3;14586:93;:::i;:::-;14704:2;14699:3;14695:12;14688:19;;14347:366;;;:::o;14719:::-;14861:3;14882:67;14946:2;14941:3;14882:67;:::i;:::-;14875:74;;14958:93;15047:3;14958:93;:::i;:::-;15076:2;15071:3;15067:12;15060:19;;14719:366;;;:::o;15091:::-;15233:3;15254:67;15318:2;15313:3;15254:67;:::i;:::-;15247:74;;15330:93;15419:3;15330:93;:::i;:::-;15448:2;15443:3;15439:12;15432:19;;15091:366;;;:::o;15463:::-;15605:3;15626:67;15690:2;15685:3;15626:67;:::i;:::-;15619:74;;15702:93;15791:3;15702:93;:::i;:::-;15820:2;15815:3;15811:12;15804:19;;15463:366;;;:::o;15835:::-;15977:3;15998:67;16062:2;16057:3;15998:67;:::i;:::-;15991:74;;16074:93;16163:3;16074:93;:::i;:::-;16192:2;16187:3;16183:12;16176:19;;15835:366;;;:::o;16207:::-;16349:3;16370:67;16434:2;16429:3;16370:67;:::i;:::-;16363:74;;16446:93;16535:3;16446:93;:::i;:::-;16564:2;16559:3;16555:12;16548:19;;16207:366;;;:::o;16579:365::-;16721:3;16742:66;16806:1;16801:3;16742:66;:::i;:::-;16735:73;;16817:93;16906:3;16817:93;:::i;:::-;16935:2;16930:3;16926:12;16919:19;;16579:365;;;:::o;16950:366::-;17092:3;17113:67;17177:2;17172:3;17113:67;:::i;:::-;17106:74;;17189:93;17278:3;17189:93;:::i;:::-;17307:2;17302:3;17298:12;17291:19;;16950:366;;;:::o;17322:118::-;17409:24;17427:5;17409:24;:::i;:::-;17404:3;17397:37;17322:118;;:::o;17446:589::-;17671:3;17693:95;17784:3;17775:6;17693:95;:::i;:::-;17686:102;;17805:95;17896:3;17887:6;17805:95;:::i;:::-;17798:102;;17917:92;18005:3;17996:6;17917:92;:::i;:::-;17910:99;;18026:3;18019:10;;17446:589;;;;;;:::o;18041:222::-;18134:4;18172:2;18161:9;18157:18;18149:26;;18185:71;18253:1;18242:9;18238:17;18229:6;18185:71;:::i;:::-;18041:222;;;;:::o;18269:332::-;18390:4;18428:2;18417:9;18413:18;18405:26;;18441:71;18509:1;18498:9;18494:17;18485:6;18441:71;:::i;:::-;18522:72;18590:2;18579:9;18575:18;18566:6;18522:72;:::i;:::-;18269:332;;;;;:::o;18607:640::-;18802:4;18840:3;18829:9;18825:19;18817:27;;18854:71;18922:1;18911:9;18907:17;18898:6;18854:71;:::i;:::-;18935:72;19003:2;18992:9;18988:18;18979:6;18935:72;:::i;:::-;19017;19085:2;19074:9;19070:18;19061:6;19017:72;:::i;:::-;19136:9;19130:4;19126:20;19121:2;19110:9;19106:18;19099:48;19164:76;19235:4;19226:6;19164:76;:::i;:::-;19156:84;;18607:640;;;;;;;:::o;19253:332::-;19374:4;19412:2;19401:9;19397:18;19389:26;;19425:71;19493:1;19482:9;19478:17;19469:6;19425:71;:::i;:::-;19506:72;19574:2;19563:9;19559:18;19550:6;19506:72;:::i;:::-;19253:332;;;;;:::o;19591:210::-;19678:4;19716:2;19705:9;19701:18;19693:26;;19729:65;19791:1;19780:9;19776:17;19767:6;19729:65;:::i;:::-;19591:210;;;;:::o;19807:248::-;19913:4;19951:2;19940:9;19936:18;19928:26;;19964:84;20045:1;20034:9;20030:17;20021:6;19964:84;:::i;:::-;19807:248;;;;:::o;20061:313::-;20174:4;20212:2;20201:9;20197:18;20189:26;;20261:9;20255:4;20251:20;20247:1;20236:9;20232:17;20225:47;20289:78;20362:4;20353:6;20289:78;:::i;:::-;20281:86;;20061:313;;;;:::o;20380:419::-;20546:4;20584:2;20573:9;20569:18;20561:26;;20633:9;20627:4;20623:20;20619:1;20608:9;20604:17;20597:47;20661:131;20787:4;20661:131;:::i;:::-;20653:139;;20380:419;;;:::o;20805:::-;20971:4;21009:2;20998:9;20994:18;20986:26;;21058:9;21052:4;21048:20;21044:1;21033:9;21029:17;21022:47;21086:131;21212:4;21086:131;:::i;:::-;21078:139;;20805:419;;;:::o;21230:::-;21396:4;21434:2;21423:9;21419:18;21411:26;;21483:9;21477:4;21473:20;21469:1;21458:9;21454:17;21447:47;21511:131;21637:4;21511:131;:::i;:::-;21503:139;;21230:419;;;:::o;21655:::-;21821:4;21859:2;21848:9;21844:18;21836:26;;21908:9;21902:4;21898:20;21894:1;21883:9;21879:17;21872:47;21936:131;22062:4;21936:131;:::i;:::-;21928:139;;21655:419;;;:::o;22080:::-;22246:4;22284:2;22273:9;22269:18;22261:26;;22333:9;22327:4;22323:20;22319:1;22308:9;22304:17;22297:47;22361:131;22487:4;22361:131;:::i;:::-;22353:139;;22080:419;;;:::o;22505:::-;22671:4;22709:2;22698:9;22694:18;22686:26;;22758:9;22752:4;22748:20;22744:1;22733:9;22729:17;22722:47;22786:131;22912:4;22786:131;:::i;:::-;22778:139;;22505:419;;;:::o;22930:::-;23096:4;23134:2;23123:9;23119:18;23111:26;;23183:9;23177:4;23173:20;23169:1;23158:9;23154:17;23147:47;23211:131;23337:4;23211:131;:::i;:::-;23203:139;;22930:419;;;:::o;23355:::-;23521:4;23559:2;23548:9;23544:18;23536:26;;23608:9;23602:4;23598:20;23594:1;23583:9;23579:17;23572:47;23636:131;23762:4;23636:131;:::i;:::-;23628:139;;23355:419;;;:::o;23780:::-;23946:4;23984:2;23973:9;23969:18;23961:26;;24033:9;24027:4;24023:20;24019:1;24008:9;24004:17;23997:47;24061:131;24187:4;24061:131;:::i;:::-;24053:139;;23780:419;;;:::o;24205:::-;24371:4;24409:2;24398:9;24394:18;24386:26;;24458:9;24452:4;24448:20;24444:1;24433:9;24429:17;24422:47;24486:131;24612:4;24486:131;:::i;:::-;24478:139;;24205:419;;;:::o;24630:::-;24796:4;24834:2;24823:9;24819:18;24811:26;;24883:9;24877:4;24873:20;24869:1;24858:9;24854:17;24847:47;24911:131;25037:4;24911:131;:::i;:::-;24903:139;;24630:419;;;:::o;25055:::-;25221:4;25259:2;25248:9;25244:18;25236:26;;25308:9;25302:4;25298:20;25294:1;25283:9;25279:17;25272:47;25336:131;25462:4;25336:131;:::i;:::-;25328:139;;25055:419;;;:::o;25480:::-;25646:4;25684:2;25673:9;25669:18;25661:26;;25733:9;25727:4;25723:20;25719:1;25708:9;25704:17;25697:47;25761:131;25887:4;25761:131;:::i;:::-;25753:139;;25480:419;;;:::o;25905:::-;26071:4;26109:2;26098:9;26094:18;26086:26;;26158:9;26152:4;26148:20;26144:1;26133:9;26129:17;26122:47;26186:131;26312:4;26186:131;:::i;:::-;26178:139;;25905:419;;;:::o;26330:::-;26496:4;26534:2;26523:9;26519:18;26511:26;;26583:9;26577:4;26573:20;26569:1;26558:9;26554:17;26547:47;26611:131;26737:4;26611:131;:::i;:::-;26603:139;;26330:419;;;:::o;26755:::-;26921:4;26959:2;26948:9;26944:18;26936:26;;27008:9;27002:4;26998:20;26994:1;26983:9;26979:17;26972:47;27036:131;27162:4;27036:131;:::i;:::-;27028:139;;26755:419;;;:::o;27180:::-;27346:4;27384:2;27373:9;27369:18;27361:26;;27433:9;27427:4;27423:20;27419:1;27408:9;27404:17;27397:47;27461:131;27587:4;27461:131;:::i;:::-;27453:139;;27180:419;;;:::o;27605:::-;27771:4;27809:2;27798:9;27794:18;27786:26;;27858:9;27852:4;27848:20;27844:1;27833:9;27829:17;27822:47;27886:131;28012:4;27886:131;:::i;:::-;27878:139;;27605:419;;;:::o;28030:::-;28196:4;28234:2;28223:9;28219:18;28211:26;;28283:9;28277:4;28273:20;28269:1;28258:9;28254:17;28247:47;28311:131;28437:4;28311:131;:::i;:::-;28303:139;;28030:419;;;:::o;28455:::-;28621:4;28659:2;28648:9;28644:18;28636:26;;28708:9;28702:4;28698:20;28694:1;28683:9;28679:17;28672:47;28736:131;28862:4;28736:131;:::i;:::-;28728:139;;28455:419;;;:::o;28880:222::-;28973:4;29011:2;29000:9;28996:18;28988:26;;29024:71;29092:1;29081:9;29077:17;29068:6;29024:71;:::i;:::-;28880:222;;;;:::o;29108:129::-;29142:6;29169:20;;:::i;:::-;29159:30;;29198:33;29226:4;29218:6;29198:33;:::i;:::-;29108:129;;;:::o;29243:75::-;29276:6;29309:2;29303:9;29293:19;;29243:75;:::o;29324:307::-;29385:4;29475:18;29467:6;29464:30;29461:56;;;29497:18;;:::i;:::-;29461:56;29535:29;29557:6;29535:29;:::i;:::-;29527:37;;29619:4;29613;29609:15;29601:23;;29324:307;;;:::o;29637:308::-;29699:4;29789:18;29781:6;29778:30;29775:56;;;29811:18;;:::i;:::-;29775:56;29849:29;29871:6;29849:29;:::i;:::-;29841:37;;29933:4;29927;29923:15;29915:23;;29637:308;;;:::o;29951:141::-;30000:4;30023:3;30015:11;;30046:3;30043:1;30036:14;30080:4;30077:1;30067:18;30059:26;;29951:141;;;:::o;30098:98::-;30149:6;30183:5;30177:12;30167:22;;30098:98;;;:::o;30202:99::-;30254:6;30288:5;30282:12;30272:22;;30202:99;;;:::o;30307:168::-;30390:11;30424:6;30419:3;30412:19;30464:4;30459:3;30455:14;30440:29;;30307:168;;;;:::o;30481:169::-;30565:11;30599:6;30594:3;30587:19;30639:4;30634:3;30630:14;30615:29;;30481:169;;;;:::o;30656:148::-;30758:11;30795:3;30780:18;;30656:148;;;;:::o;30810:305::-;30850:3;30869:20;30887:1;30869:20;:::i;:::-;30864:25;;30903:20;30921:1;30903:20;:::i;:::-;30898:25;;31057:1;30989:66;30985:74;30982:1;30979:81;30976:107;;;31063:18;;:::i;:::-;30976:107;31107:1;31104;31100:9;31093:16;;30810:305;;;;:::o;31121:185::-;31161:1;31178:20;31196:1;31178:20;:::i;:::-;31173:25;;31212:20;31230:1;31212:20;:::i;:::-;31207:25;;31251:1;31241:35;;31256:18;;:::i;:::-;31241:35;31298:1;31295;31291:9;31286:14;;31121:185;;;;:::o;31312:348::-;31352:7;31375:20;31393:1;31375:20;:::i;:::-;31370:25;;31409:20;31427:1;31409:20;:::i;:::-;31404:25;;31597:1;31529:66;31525:74;31522:1;31519:81;31514:1;31507:9;31500:17;31496:105;31493:131;;;31604:18;;:::i;:::-;31493:131;31652:1;31649;31645:9;31634:20;;31312:348;;;;:::o;31666:191::-;31706:4;31726:20;31744:1;31726:20;:::i;:::-;31721:25;;31760:20;31778:1;31760:20;:::i;:::-;31755:25;;31799:1;31796;31793:8;31790:34;;;31804:18;;:::i;:::-;31790:34;31849:1;31846;31842:9;31834:17;;31666:191;;;;:::o;31863:96::-;31900:7;31929:24;31947:5;31929:24;:::i;:::-;31918:35;;31863:96;;;:::o;31965:90::-;31999:7;32042:5;32035:13;32028:21;32017:32;;31965:90;;;:::o;32061:149::-;32097:7;32137:66;32130:5;32126:78;32115:89;;32061:149;;;:::o;32216:126::-;32253:7;32293:42;32286:5;32282:54;32271:65;;32216:126;;;:::o;32348:77::-;32385:7;32414:5;32403:16;;32348:77;;;:::o;32431:139::-;32494:9;32527:37;32558:5;32527:37;:::i;:::-;32514:50;;32431:139;;;:::o;32576:126::-;32626:9;32659:37;32690:5;32659:37;:::i;:::-;32646:50;;32576:126;;;:::o;32708:113::-;32758:9;32791:24;32809:5;32791:24;:::i;:::-;32778:37;;32708:113;;;:::o;32827:154::-;32911:6;32906:3;32901;32888:30;32973:1;32964:6;32959:3;32955:16;32948:27;32827:154;;;:::o;32987:307::-;33055:1;33065:113;33079:6;33076:1;33073:13;33065:113;;;33164:1;33159:3;33155:11;33149:18;33145:1;33140:3;33136:11;33129:39;33101:2;33098:1;33094:10;33089:15;;33065:113;;;33196:6;33193:1;33190:13;33187:101;;;33276:1;33267:6;33262:3;33258:16;33251:27;33187:101;33036:258;32987:307;;;:::o;33300:320::-;33344:6;33381:1;33375:4;33371:12;33361:22;;33428:1;33422:4;33418:12;33449:18;33439:81;;33505:4;33497:6;33493:17;33483:27;;33439:81;33567:2;33559:6;33556:14;33536:18;33533:38;33530:84;;;33586:18;;:::i;:::-;33530:84;33351:269;33300:320;;;:::o;33626:281::-;33709:27;33731:4;33709:27;:::i;:::-;33701:6;33697:40;33839:6;33827:10;33824:22;33803:18;33791:10;33788:34;33785:62;33782:88;;;33850:18;;:::i;:::-;33782:88;33890:10;33886:2;33879:22;33669:238;33626:281;;:::o;33913:233::-;33952:3;33975:24;33993:5;33975:24;:::i;:::-;33966:33;;34021:66;34014:5;34011:77;34008:103;;;34091:18;;:::i;:::-;34008:103;34138:1;34131:5;34127:13;34120:20;;33913:233;;;:::o;34152:176::-;34184:1;34201:20;34219:1;34201:20;:::i;:::-;34196:25;;34235:20;34253:1;34235:20;:::i;:::-;34230:25;;34274:1;34264:35;;34279:18;;:::i;:::-;34264:35;34320:1;34317;34313:9;34308:14;;34152:176;;;;:::o;34334:180::-;34382:77;34379:1;34372:88;34479:4;34476:1;34469:15;34503:4;34500:1;34493:15;34520:180;34568:77;34565:1;34558:88;34665:4;34662:1;34655:15;34689:4;34686:1;34679:15;34706:180;34754:77;34751:1;34744:88;34851:4;34848:1;34841:15;34875:4;34872:1;34865:15;34892:180;34940:77;34937:1;34930:88;35037:4;35034:1;35027:15;35061:4;35058:1;35051:15;35078:180;35126:77;35123:1;35116:88;35223:4;35220:1;35213:15;35247:4;35244:1;35237:15;35264:117;35373:1;35370;35363:12;35387:117;35496:1;35493;35486:12;35510:117;35619:1;35616;35609:12;35633:117;35742:1;35739;35732:12;35756:102;35797:6;35848:2;35844:7;35839:2;35832:5;35828:14;35824:28;35814:38;;35756:102;;;:::o;35864:171::-;36004:23;36000:1;35992:6;35988:14;35981:47;35864:171;:::o;36041:237::-;36181:34;36177:1;36169:6;36165:14;36158:58;36250:20;36245:2;36237:6;36233:15;36226:45;36041:237;:::o;36284:178::-;36424:30;36420:1;36412:6;36408:14;36401:54;36284:178;:::o;36468:223::-;36608:34;36604:1;36596:6;36592:14;36585:58;36677:6;36672:2;36664:6;36660:15;36653:31;36468:223;:::o;36697:175::-;36837:27;36833:1;36825:6;36821:14;36814:51;36697:175;:::o;36878:231::-;37018:34;37014:1;37006:6;37002:14;36995:58;37087:14;37082:2;37074:6;37070:15;37063:39;36878:231;:::o;37115:243::-;37255:34;37251:1;37243:6;37239:14;37232:58;37324:26;37319:2;37311:6;37307:15;37300:51;37115:243;:::o;37364:229::-;37504:34;37500:1;37492:6;37488:14;37481:58;37573:12;37568:2;37560:6;37556:15;37549:37;37364:229;:::o;37599:228::-;37739:34;37735:1;37727:6;37723:14;37716:58;37808:11;37803:2;37795:6;37791:15;37784:36;37599:228;:::o;37833:172::-;37973:24;37969:1;37961:6;37957:14;37950:48;37833:172;:::o;38011:182::-;38151:34;38147:1;38139:6;38135:14;38128:58;38011:182;:::o;38199:231::-;38339:34;38335:1;38327:6;38323:14;38316:58;38408:14;38403:2;38395:6;38391:15;38384:39;38199:231;:::o;38436:182::-;38576:34;38572:1;38564:6;38560:14;38553:58;38436:182;:::o;38624:228::-;38764:34;38760:1;38752:6;38748:14;38741:58;38833:11;38828:2;38820:6;38816:15;38809:36;38624:228;:::o;38858:234::-;38998:34;38994:1;38986:6;38982:14;38975:58;39067:17;39062:2;39054:6;39050:15;39043:42;38858:234;:::o;39098:220::-;39238:34;39234:1;39226:6;39222:14;39215:58;39307:3;39302:2;39294:6;39290:15;39283:28;39098:220;:::o;39324:168::-;39464:20;39460:1;39452:6;39448:14;39441:44;39324:168;:::o;39498:236::-;39638:34;39634:1;39626:6;39622:14;39615:58;39707:19;39702:2;39694:6;39690:15;39683:44;39498:236;:::o;39740:159::-;39880:11;39876:1;39868:6;39864:14;39857:35;39740:159;:::o;39905:176::-;40045:28;40041:1;40033:6;40029:14;40022:52;39905:176;:::o;40087:122::-;40160:24;40178:5;40160:24;:::i;:::-;40153:5;40150:35;40140:63;;40199:1;40196;40189:12;40140:63;40087:122;:::o;40215:116::-;40285:21;40300:5;40285:21;:::i;:::-;40278:5;40275:32;40265:60;;40321:1;40318;40311:12;40265:60;40215:116;:::o;40337:120::-;40409:23;40426:5;40409:23;:::i;:::-;40402:5;40399:34;40389:62;;40447:1;40444;40437:12;40389:62;40337:120;:::o;40463:122::-;40536:24;40554:5;40536:24;:::i;:::-;40529:5;40526:35;40516:63;;40575:1;40572;40565:12;40516:63;40463:122;:::o
Swarm Source
ipfs://441fcc5a6c732a5bf96de4dc9fbc4c6cf7b540750394815cd5da759394e2457a
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.