Overview
ETH Balance
0.1 ETH
Eth Value
$204.02 (@ $2,040.16/ETH)More Info
Private Name Tags
ContractCreator
TokenTracker
Multichain Info
No addresses found
Latest 25 from a total of 126 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Set Approval For... | 21953593 | 18 days ago | IN | 0 ETH | 0.00003097 | ||||
Set Approval For... | 21792033 | 40 days ago | IN | 0 ETH | 0.00004898 | ||||
Set Approval For... | 15978606 | 854 days ago | IN | 0 ETH | 0.00068222 | ||||
Set Approval For... | 15877347 | 869 days ago | IN | 0 ETH | 0.00071621 | ||||
Set Approval For... | 15007442 | 1001 days ago | IN | 0 ETH | 0.00070813 | ||||
Set Approval For... | 14845857 | 1028 days ago | IN | 0 ETH | 0.00093748 | ||||
Set Approval For... | 14843831 | 1029 days ago | IN | 0 ETH | 0.00520231 | ||||
Set Approval For... | 14730926 | 1047 days ago | IN | 0 ETH | 0.00162025 | ||||
Set Approval For... | 14633425 | 1062 days ago | IN | 0 ETH | 0.00197586 | ||||
Mint | 14529726 | 1078 days ago | IN | 0.1 ETH | 0.00935022 | ||||
Withdraw | 14476661 | 1087 days ago | IN | 0 ETH | 0.00228851 | ||||
Set Uri Prefix | 14471114 | 1087 days ago | IN | 0 ETH | 0.00201546 | ||||
Set Approval For... | 14458025 | 1089 days ago | IN | 0 ETH | 0.00267921 | ||||
Set Revealed | 14457947 | 1089 days ago | IN | 0 ETH | 0.00206206 | ||||
Set Uri Prefix | 14452791 | 1090 days ago | IN | 0 ETH | 0.00325453 | ||||
Set Approval For... | 14415642 | 1096 days ago | IN | 0 ETH | 0.00086589 | ||||
Transfer From | 14415418 | 1096 days ago | IN | 0 ETH | 0.00121409 | ||||
Set Approval For... | 14355424 | 1105 days ago | IN | 0 ETH | 0.00097873 | ||||
Set Approval For... | 14348745 | 1106 days ago | IN | 0 ETH | 0.00329799 | ||||
Set Approval For... | 14330845 | 1109 days ago | IN | 0 ETH | 0.00135101 | ||||
Set Hidden Metad... | 14317761 | 1111 days ago | IN | 0 ETH | 0.00205325 | ||||
Set Approval For... | 14305571 | 1113 days ago | IN | 0 ETH | 0.00202548 | ||||
Transfer From | 14305553 | 1113 days ago | IN | 0 ETH | 0.00147111 | ||||
Mint | 14299681 | 1114 days ago | IN | 0.3 ETH | 0.00716511 | ||||
Mint For Address | 14299499 | 1114 days ago | IN | 0 ETH | 0.19271134 |
Latest 1 internal transaction
Advanced mode:
Parent Transaction Hash | Method | Block |
From
|
To
|
|||
---|---|---|---|---|---|---|---|
- | 14476661 | 1087 days ago | 7.2 ETH |
Loading...
Loading
Contract Name:
BrutalBears
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-02-24 */ // SPDX-License-Identifier: MIT // 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.0 (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.0 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.0 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.0 (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.0 (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.0 (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.0 (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.0 (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.0 (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.0 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @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/brutal bears lower gas.sol pragma solidity >=0.7.0 <0.9.0; contract BrutalBears is ERC721, Ownable { using Strings for uint256; using Counters for Counters.Counter; Counters.Counter private supply; string uriPrefix = "ipfs://"; string uriSuffix = ".json"; string public hiddenMetadataUri; uint256 public PreSaleCost = 0.1 ether; uint256 public cost = 0.2 ether; uint256 public PreSaleMaxSupply = 4000; uint256 public maxSupply = 10000; uint256 public PreSalemMaxMintAmountPerTx = 4; uint256 public maxMintAmountPerTx = 10; uint256 public PreSaleNFTPerAddressLimit = 4; bool public paused = false; bool public revealed = false; bool public onlyWhitelisted = true; address[] public whitelistedAddresses; mapping(address => uint256) public addressMintedBalance; constructor() ERC721("Brutal Bears", "BB") { setHiddenMetadataUri("ipfs://QmcRK66PvdYWq6npHyHupcRBm56WcvbA7wiojGRFygcvLS/reveal.json"); } modifier mintCompliance(uint256 _mintAmount) { if (onlyWhitelisted == true){ require(isWhitelisted(msg.sender), "user is not whitelisted"); require(_mintAmount <= PreSalemMaxMintAmountPerTx,"max mint amount per transaction exceeded"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(ownerMintedCount + _mintAmount <= PreSaleNFTPerAddressLimit, "max Presale NFT per address exceeded"); require(msg.value >= PreSaleCost * _mintAmount, "insufficient funds"); require(supply.current() + _mintAmount <= PreSaleMaxSupply,"max NFT presale limit exceeded"); } if (onlyWhitelisted == false){ require(_mintAmount <= maxMintAmountPerTx, "max mint amount per session exceeded"); require(supply.current() + _mintAmount <= maxSupply, "max NFT limit exceeded"); uint256 ownerMintedCount = addressMintedBalance[msg.sender]; require(msg.value >= cost * _mintAmount, "insufficient funds"); } _; } modifier mintComplianceForAddress(uint256 _mintAmount) { require(supply.current() + _mintAmount <= maxSupply, "Max supply exceeded!"); _; } function isWhitelisted(address _user) public view returns (bool) { for (uint i = 0; i < whitelistedAddresses.length; i++) { if (whitelistedAddresses[i] == _user) { return true; } } return false; } function totalSupply() public view returns (uint256) { return supply.current(); } function mint(uint256 _mintAmount) public payable mintCompliance(_mintAmount) { require(!paused, "The contract is paused!"); _mintLoop(msg.sender, _mintAmount); } function mintForAddress(uint256 _mintAmount, address _receiver) public mintComplianceForAddress(_mintAmount) onlyOwner { _mintLoop(_receiver, _mintAmount); } function walletOfOwner(address _owner) public view returns (uint256[] memory) { uint256 ownerTokenCount = balanceOf(_owner); uint256[] memory ownedTokenIds = new uint256[](ownerTokenCount); uint256 currentTokenId = 1; uint256 ownedTokenIndex = 0; while (ownedTokenIndex < ownerTokenCount && currentTokenId <= maxSupply) { address currentTokenOwner = ownerOf(currentTokenId); if (currentTokenOwner == _owner) { ownedTokenIds[ownedTokenIndex] = currentTokenId; ownedTokenIndex++; } currentTokenId++; } return ownedTokenIds; } function tokenURI(uint256 _tokenId) public view virtual override returns (string memory) { require( _exists(_tokenId), "ERC721Metadata: URI query for nonexistent token" ); if (revealed == false) { return hiddenMetadataUri; } string memory currentBaseURI = _baseURI(); return bytes(currentBaseURI).length > 0 ? string(abi.encodePacked(currentBaseURI, _tokenId.toString(), uriSuffix)) : ""; } function setRevealed(bool _state) public onlyOwner { revealed = _state; } function setCost(uint256 _cost) public onlyOwner { cost = _cost; } function setMaxMintAmountPerTx(uint256 _maxMintAmountPerTx) public onlyOwner { maxMintAmountPerTx = _maxMintAmountPerTx; } function setHiddenMetadataUri(string memory _hiddenMetadataUri) public onlyOwner { hiddenMetadataUri = _hiddenMetadataUri; } function setUriPrefix(string memory _uriPrefix) public onlyOwner { uriPrefix = _uriPrefix; } function setUriSuffix(string memory _uriSuffix) public onlyOwner { uriSuffix = _uriSuffix; } function setPaused(bool _state) public onlyOwner { paused = _state; } function setonlyWhitelisted(bool _state) public onlyOwner { onlyWhitelisted = _state; } function whitelistUsers(address[] calldata _users) public onlyOwner { delete whitelistedAddresses; whitelistedAddresses = _users; } function withdraw() public onlyOwner { (bool os, ) = payable(owner()).call{value: address(this).balance}(""); require(os); } function _mintLoop(address _receiver, uint256 _mintAmount) internal { for (uint256 i = 0; i < _mintAmount; i++) { supply.increment(); addressMintedBalance[msg.sender]++; _safeMint(_receiver, supply.current()); } } function _baseURI() internal view virtual override returns (string memory) { return uriPrefix; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
Contract ABI
API[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"approved","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Approval","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"owner","type":"address"},{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":false,"internalType":"bool","name":"approved","type":"bool"}],"name":"ApprovalForAll","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"previousOwner","type":"address"},{"indexed":true,"internalType":"address","name":"newOwner","type":"address"}],"name":"OwnershipTransferred","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":true,"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"Transfer","type":"event"},{"inputs":[],"name":"PreSaleCost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PreSaleMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PreSaleNFTPerAddressLimit","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PreSalemMaxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"addressMintedBalance","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":"cost","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"hiddenMetadataUri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_user","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintAmountPerTx","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_mintAmount","type":"uint256"},{"internalType":"address","name":"_receiver","type":"address"}],"name":"mintForAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"onlyWhitelisted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"paused","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"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":"uint256","name":"_cost","type":"uint256"}],"name":"setCost","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_hiddenMetadataUri","type":"string"}],"name":"setHiddenMetadataUri","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"_maxMintAmountPerTx","type":"uint256"}],"name":"setMaxMintAmountPerTx","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setPaused","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setRevealed","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriPrefix","type":"string"}],"name":"setUriPrefix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_uriSuffix","type":"string"}],"name":"setUriSuffix","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"_state","type":"bool"}],"name":"setonlyWhitelisted","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"_tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"transferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"_owner","type":"address"}],"name":"walletOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"_users","type":"address[]"}],"name":"whitelistUsers","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"whitelistedAddresses","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600781526020017f697066733a2f2f000000000000000000000000000000000000000000000000008152506008908051906020019062000051929190620003c5565b506040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600990805190602001906200009f929190620003c5565b5067016345785d8a0000600b556702c68af0bb140000600c55610fa0600d55612710600e556004600f55600a60105560046011556000601260006101000a81548160ff0219169083151502179055506000601260016101000a81548160ff0219169083151502179055506001601260026101000a81548160ff0219169083151502179055503480156200013157600080fd5b506040518060400160405280600c81526020017f42727574616c20426561727300000000000000000000000000000000000000008152506040518060400160405280600281526020017f42420000000000000000000000000000000000000000000000000000000000008152508160009080519060200190620001b6929190620003c5565b508060019080519060200190620001cf929190620003c5565b505050620001f2620001e66200022260201b60201c565b6200022a60201b60201c565b6200021c604051806080016040528060418152602001620050aa60419139620002f060201b60201c565b6200055d565b600033905090565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b620003006200022260201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16620003266200039b60201b60201c565b73ffffffffffffffffffffffffffffffffffffffff16146200037f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040162000376906200049c565b60405180910390fd5b80600a908051906020019062000397929190620003c5565b5050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b828054620003d390620004cf565b90600052602060002090601f016020900481019282620003f7576000855562000443565b82601f106200041257805160ff191683800117855562000443565b8280016001018555821562000443579182015b828111156200044257825182559160200191906001019062000425565b5b50905062000452919062000456565b5090565b5b808211156200047157600081600090555060010162000457565b5090565b600062000484602083620004be565b9150620004918262000534565b602082019050919050565b60006020820190508181036000830152620004b78162000475565b9050919050565b600082825260208201905092915050565b60006002820490506001821680620004e857607f821691505b60208210811415620004ff57620004fe62000505565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b614b3d806200056d6000396000f3fe6080604052600436106102675760003560e01c8063787d0f5d11610144578063b88d4fde116100b6578063e0a808531161007a578063e0a8085314610921578063e985e9c51461094a578063edec5f2714610987578063efbd73f4146109b0578063f2fde38b146109d9578063f400490114610a0257610267565b8063b88d4fde14610828578063ba4e5c4914610851578063bf3969411461088e578063c87b56dd146108b9578063d5abeb01146108f657610267565b806395d89b411161010857806395d89b41146107395780639c70b51214610764578063a0712d681461078f578063a22cb465146107ab578063a45ba8e7146107d4578063b071401b146107ff57610267565b8063787d0f5d146106665780637ec4a659146106915780638d2204e3146106ba5780638da5cb5b146106e357806394354fd01461070e57610267565b80633af32abf116101dd5780634fdd43cb116101a15780634fdd43cb14610556578063518302271461057f5780635c975abb146105aa5780636352211e146105d557806370a0823114610612578063715018a61461064f57610267565b80633af32abf146104735780633ccfd60b146104b057806342842e0e146104c7578063438b6300146104f057806344a0d68a1461052d57610267565b806313faede61161022f57806313faede61461036557806316ba10e01461039057806316c38b3c146103b957806318160ddd146103e257806318cae2691461040d57806323b872dd1461044a57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b3146103115780630aff62a71461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906134cf565b610a2d565b6040516102a09190613c10565b60405180910390f35b3480156102b557600080fd5b506102be610b0f565b6040516102cb9190613c2b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613572565b610ba1565b6040516103089190613b87565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613415565b610c26565b005b34801561034657600080fd5b5061034f610d3e565b60405161035c9190613f6d565b60405180910390f35b34801561037157600080fd5b5061037a610d44565b6040516103879190613f6d565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190613529565b610d4a565b005b3480156103c557600080fd5b506103e060048036038101906103db91906134a2565b610de0565b005b3480156103ee57600080fd5b506103f7610e79565b6040516104049190613f6d565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613292565b610e8a565b6040516104419190613f6d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906132ff565b610ea2565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613292565b610f02565b6040516104a79190613c10565b60405180910390f35b3480156104bc57600080fd5b506104c5610fb1565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906132ff565b6110ad565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613292565b6110cd565b6040516105249190613bee565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613572565b6111d8565b005b34801561056257600080fd5b5061057d60048036038101906105789190613529565b61125e565b005b34801561058b57600080fd5b506105946112f4565b6040516105a19190613c10565b60405180910390f35b3480156105b657600080fd5b506105bf611307565b6040516105cc9190613c10565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613572565b61131a565b6040516106099190613b87565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613292565b6113cc565b6040516106469190613f6d565b60405180910390f35b34801561065b57600080fd5b50610664611484565b005b34801561067257600080fd5b5061067b61150c565b6040516106889190613f6d565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613529565b611512565b005b3480156106c657600080fd5b506106e160048036038101906106dc91906134a2565b6115a8565b005b3480156106ef57600080fd5b506106f8611641565b6040516107059190613b87565b60405180910390f35b34801561071a57600080fd5b5061072361166b565b6040516107309190613f6d565b60405180910390f35b34801561074557600080fd5b5061074e611671565b60405161075b9190613c2b565b60405180910390f35b34801561077057600080fd5b50610779611703565b6040516107869190613c10565b60405180910390f35b6107a960048036038101906107a49190613572565b611716565b005b3480156107b757600080fd5b506107d260048036038101906107cd91906133d5565b611aad565b005b3480156107e057600080fd5b506107e9611ac3565b6040516107f69190613c2b565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613572565b611b51565b005b34801561083457600080fd5b5061084f600480360381019061084a9190613352565b611bd7565b005b34801561085d57600080fd5b5061087860048036038101906108739190613572565b611c39565b6040516108859190613b87565b60405180910390f35b34801561089a57600080fd5b506108a3611c78565b6040516108b09190613f6d565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190613572565b611c7e565b6040516108ed9190613c2b565b60405180910390f35b34801561090257600080fd5b5061090b611dd7565b6040516109189190613f6d565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906134a2565b611ddd565b005b34801561095657600080fd5b50610971600480360381019061096c91906132bf565b611e76565b60405161097e9190613c10565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613455565b611f0a565b005b3480156109bc57600080fd5b506109d760048036038101906109d2919061359f565b611faa565b005b3480156109e557600080fd5b50610a0060048036038101906109fb9190613292565b61208f565b005b348015610a0e57600080fd5b50610a17612187565b604051610a249190613f6d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b085750610b078261218d565b5b9050919050565b606060008054610b1e90614276565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a90614276565b8015610b975780601f10610b6c57610100808354040283529160200191610b97565b820191906000526020600020905b815481529060010190602001808311610b7a57829003601f168201915b5050505050905090565b6000610bac826121f7565b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613ded565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c318261131a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613ead565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc1612263565b73ffffffffffffffffffffffffffffffffffffffff161480610cf05750610cef81610cea612263565b611e76565b5b610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690613d2d565b60405180910390fd5b610d39838361226b565b505050565b600d5481565b600c5481565b610d52612263565b73ffffffffffffffffffffffffffffffffffffffff16610d70611641565b73ffffffffffffffffffffffffffffffffffffffff1614610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613e0d565b60405180910390fd5b8060099080519060200190610ddc929190612f8f565b5050565b610de8612263565b73ffffffffffffffffffffffffffffffffffffffff16610e06611641565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613e0d565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000610e856007612324565b905090565b60146020528060005260406000206000915090505481565b610eb3610ead612263565b82612332565b610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee990613f2d565b60405180910390fd5b610efd838383612410565b505050565b600080600090505b601380549050811015610fa6578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610f4257610f416143e0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f93576001915050610fac565b8080610f9e906142d9565b915050610f0a565b50600090505b919050565b610fb9612263565b73ffffffffffffffffffffffffffffffffffffffff16610fd7611641565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613e0d565b60405180910390fd5b6000611037611641565b73ffffffffffffffffffffffffffffffffffffffff164760405161105a90613b72565b60006040518083038185875af1925050503d8060008114611097576040519150601f19603f3d011682016040523d82523d6000602084013e61109c565b606091505b50509050806110aa57600080fd5b50565b6110c883838360405180602001604052806000815250611bd7565b505050565b606060006110da836113cc565b905060008167ffffffffffffffff8111156110f8576110f761440f565b5b6040519080825280602002602001820160405280156111265781602001602082028036833780820191505090505b50905060006001905060005b83811080156111435750600e548211155b156111cc5760006111538361131a565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111b8578284838151811061119d5761119c6143e0565b5b60200260200101818152505081806111b4906142d9565b9250505b82806111c3906142d9565b93505050611132565b82945050505050919050565b6111e0612263565b73ffffffffffffffffffffffffffffffffffffffff166111fe611641565b73ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613e0d565b60405180910390fd5b80600c8190555050565b611266612263565b73ffffffffffffffffffffffffffffffffffffffff16611284611641565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190613e0d565b60405180910390fd5b80600a90805190602001906112f0929190612f8f565b5050565b601260019054906101000a900460ff1681565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613d6d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613d4d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148c612263565b73ffffffffffffffffffffffffffffffffffffffff166114aa611641565b73ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613e0d565b60405180910390fd5b61150a600061266c565b565b600f5481565b61151a612263565b73ffffffffffffffffffffffffffffffffffffffff16611538611641565b73ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590613e0d565b60405180910390fd5b80600890805190602001906115a4929190612f8f565b5050565b6115b0612263565b73ffffffffffffffffffffffffffffffffffffffff166115ce611641565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90613e0d565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606001805461168090614276565b80601f01602080910402602001604051908101604052809291908181526020018280546116ac90614276565b80156116f95780601f106116ce576101008083540402835291602001916116f9565b820191906000526020600020905b8154815290600101906020018083116116dc57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b8060011515601260029054906101000a900460ff16151514156118ff5761173c33610f02565b61177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290613f4d565b60405180910390fd5b600f548111156117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790613ced565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154828261181391906140ab565b1115611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90613ecd565b60405180910390fd5b81600b546118629190614132565b3410156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90613f0d565b60405180910390fd5b600d54826118b26007612324565b6118bc91906140ab565b11156118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490613e6d565b60405180910390fd5b505b60001515601260029054906101000a900460ff1615151415611a4f57601054811115611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790613dad565b60405180910390fd5b600e548161196e6007612324565b61197891906140ab565b11156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090613d8d565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600c54611a0b9190614132565b341015611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490613f0d565b60405180910390fd5b505b601260009054906101000a900460ff1615611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613e2d565b60405180910390fd5b611aa93383612732565b5050565b611abf611ab8612263565b83836127c7565b5050565b600a8054611ad090614276565b80601f0160208091040260200160405190810160405280929190818152602001828054611afc90614276565b8015611b495780601f10611b1e57610100808354040283529160200191611b49565b820191906000526020600020905b815481529060010190602001808311611b2c57829003601f168201915b505050505081565b611b59612263565b73ffffffffffffffffffffffffffffffffffffffff16611b77611641565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490613e0d565b60405180910390fd5b8060108190555050565b611be8611be2612263565b83612332565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613f2d565b60405180910390fd5b611c3384848484612934565b50505050565b60138181548110611c4957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6060611c89826121f7565b611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90613e8d565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611d7657600a8054611cf190614276565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1d90614276565b8015611d6a5780601f10611d3f57610100808354040283529160200191611d6a565b820191906000526020600020905b815481529060010190602001808311611d4d57829003601f168201915b50505050509050611dd2565b6000611d80612990565b90506000815111611da05760405180602001604052806000815250611dce565b80611daa84612a22565b6009604051602001611dbe93929190613b41565b6040516020818303038152906040525b9150505b919050565b600e5481565b611de5612263565b73ffffffffffffffffffffffffffffffffffffffff16611e03611641565b73ffffffffffffffffffffffffffffffffffffffff1614611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090613e0d565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f12612263565b73ffffffffffffffffffffffffffffffffffffffff16611f30611641565b73ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613e0d565b60405180910390fd5b60136000611f949190613015565b818160139190611fa5929190613036565b505050565b81600e5481611fb96007612324565b611fc391906140ab565b1115612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90613eed565b60405180910390fd5b61200c612263565b73ffffffffffffffffffffffffffffffffffffffff1661202a611641565b73ffffffffffffffffffffffffffffffffffffffff1614612080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207790613e0d565b60405180910390fd5b61208a8284612732565b505050565b612097612263565b73ffffffffffffffffffffffffffffffffffffffff166120b5611641565b73ffffffffffffffffffffffffffffffffffffffff161461210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613c6d565b60405180910390fd5b6121848161266c565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122de8361131a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061233d826121f7565b61237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390613d0d565b60405180910390fd5b60006123878361131a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123f657508373ffffffffffffffffffffffffffffffffffffffff166123de84610ba1565b73ffffffffffffffffffffffffffffffffffffffff16145b8061240757506124068185611e76565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124308261131a565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90613e4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90613cad565b60405180910390fd5b612501838383612b83565b61250c60008261226b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255c919061418c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b391906140ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156127c2576127476007612b88565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612797906142d9565b91905055506127af836127aa6007612324565b612b9e565b80806127ba906142d9565b915050612735565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d90613ccd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129279190613c10565b60405180910390a3505050565b61293f848484612410565b61294b84848484612bbc565b61298a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298190613c4d565b60405180910390fd5b50505050565b60606008805461299f90614276565b80601f01602080910402602001604051908101604052809291908181526020018280546129cb90614276565b8015612a185780601f106129ed57610100808354040283529160200191612a18565b820191906000526020600020905b8154815290600101906020018083116129fb57829003601f168201915b5050505050905090565b60606000821415612a6a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b7e565b600082905060005b60008214612a9c578080612a85906142d9565b915050600a82612a959190614101565b9150612a72565b60008167ffffffffffffffff811115612ab857612ab761440f565b5b6040519080825280601f01601f191660200182016040528015612aea5781602001600182028036833780820191505090505b5090505b60008514612b7757600182612b03919061418c565b9150600a85612b129190614322565b6030612b1e91906140ab565b60f81b818381518110612b3457612b336143e0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b709190614101565b9450612aee565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b612bb8828260405180602001604052806000815250612d53565b5050565b6000612bdd8473ffffffffffffffffffffffffffffffffffffffff16612dae565b15612d46578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c06612263565b8786866040518563ffffffff1660e01b8152600401612c289493929190613ba2565b602060405180830381600087803b158015612c4257600080fd5b505af1925050508015612c7357506040513d601f19601f82011682018060405250810190612c7091906134fc565b60015b612cf6573d8060008114612ca3576040519150601f19603f3d011682016040523d82523d6000602084013e612ca8565b606091505b50600081511415612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590613c4d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d4b565b600190505b949350505050565b612d5d8383612dc1565b612d6a6000848484612bbc565b612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da090613c4d565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2890613dcd565b60405180910390fd5b612e3a816121f7565b15612e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7190613c8d565b60405180910390fd5b612e8660008383612b83565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ed691906140ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f9b90614276565b90600052602060002090601f016020900481019282612fbd5760008555613004565b82601f10612fd657805160ff1916838001178555613004565b82800160010185558215613004579182015b82811115613003578251825591602001919060010190612fe8565b5b50905061301191906130d6565b5090565b508054600082559060005260206000209081019061303391906130d6565b50565b8280548282559060005260206000209081019282156130c5579160200282015b828111156130c457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613056565b5b5090506130d291906130d6565b5090565b5b808211156130ef5760008160009055506001016130d7565b5090565b600061310661310184613fad565b613f88565b9050828152602081018484840111156131225761312161444d565b5b61312d848285614234565b509392505050565b600061314861314384613fde565b613f88565b9050828152602081018484840111156131645761316361444d565b5b61316f848285614234565b509392505050565b60008135905061318681614aab565b92915050565b60008083601f8401126131a2576131a1614443565b5b8235905067ffffffffffffffff8111156131bf576131be61443e565b5b6020830191508360208202830111156131db576131da614448565b5b9250929050565b6000813590506131f181614ac2565b92915050565b60008135905061320681614ad9565b92915050565b60008151905061321b81614ad9565b92915050565b600082601f83011261323657613235614443565b5b81356132468482602086016130f3565b91505092915050565b600082601f83011261326457613263614443565b5b8135613274848260208601613135565b91505092915050565b60008135905061328c81614af0565b92915050565b6000602082840312156132a8576132a7614457565b5b60006132b684828501613177565b91505092915050565b600080604083850312156132d6576132d5614457565b5b60006132e485828601613177565b92505060206132f585828601613177565b9150509250929050565b60008060006060848603121561331857613317614457565b5b600061332686828701613177565b935050602061333786828701613177565b92505060406133488682870161327d565b9150509250925092565b6000806000806080858703121561336c5761336b614457565b5b600061337a87828801613177565b945050602061338b87828801613177565b935050604061339c8782880161327d565b925050606085013567ffffffffffffffff8111156133bd576133bc614452565b5b6133c987828801613221565b91505092959194509250565b600080604083850312156133ec576133eb614457565b5b60006133fa85828601613177565b925050602061340b858286016131e2565b9150509250929050565b6000806040838503121561342c5761342b614457565b5b600061343a85828601613177565b925050602061344b8582860161327d565b9150509250929050565b6000806020838503121561346c5761346b614457565b5b600083013567ffffffffffffffff81111561348a57613489614452565b5b6134968582860161318c565b92509250509250929050565b6000602082840312156134b8576134b7614457565b5b60006134c6848285016131e2565b91505092915050565b6000602082840312156134e5576134e4614457565b5b60006134f3848285016131f7565b91505092915050565b60006020828403121561351257613511614457565b5b60006135208482850161320c565b91505092915050565b60006020828403121561353f5761353e614457565b5b600082013567ffffffffffffffff81111561355d5761355c614452565b5b6135698482850161324f565b91505092915050565b60006020828403121561358857613587614457565b5b60006135968482850161327d565b91505092915050565b600080604083850312156135b6576135b5614457565b5b60006135c48582860161327d565b92505060206135d585828601613177565b9150509250929050565b60006135eb8383613b23565b60208301905092915050565b613600816141c0565b82525050565b600061361182614034565b61361b8185614062565b93506136268361400f565b8060005b8381101561365757815161363e88826135df565b975061364983614055565b92505060018101905061362a565b5085935050505092915050565b61366d816141d2565b82525050565b600061367e8261403f565b6136888185614073565b9350613698818560208601614243565b6136a18161445c565b840191505092915050565b60006136b78261404a565b6136c1818561408f565b93506136d1818560208601614243565b6136da8161445c565b840191505092915050565b60006136f08261404a565b6136fa81856140a0565b935061370a818560208601614243565b80840191505092915050565b6000815461372381614276565b61372d81866140a0565b9450600182166000811461374857600181146137595761378c565b60ff1983168652818601935061378c565b6137628561401f565b60005b8381101561378457815481890152600182019150602081019050613765565b838801955050505b50505092915050565b60006137a260328361408f565b91506137ad8261446d565b604082019050919050565b60006137c560268361408f565b91506137d0826144bc565b604082019050919050565b60006137e8601c8361408f565b91506137f38261450b565b602082019050919050565b600061380b60248361408f565b915061381682614534565b604082019050919050565b600061382e60198361408f565b915061383982614583565b602082019050919050565b600061385160288361408f565b915061385c826145ac565b604082019050919050565b6000613874602c8361408f565b915061387f826145fb565b604082019050919050565b600061389760388361408f565b91506138a28261464a565b604082019050919050565b60006138ba602a8361408f565b91506138c582614699565b604082019050919050565b60006138dd60298361408f565b91506138e8826146e8565b604082019050919050565b600061390060168361408f565b915061390b82614737565b602082019050919050565b600061392360248361408f565b915061392e82614760565b604082019050919050565b600061394660208361408f565b9150613951826147af565b602082019050919050565b6000613969602c8361408f565b9150613974826147d8565b604082019050919050565b600061398c60208361408f565b915061399782614827565b602082019050919050565b60006139af60178361408f565b91506139ba82614850565b602082019050919050565b60006139d260298361408f565b91506139dd82614879565b604082019050919050565b60006139f5601e8361408f565b9150613a00826148c8565b602082019050919050565b6000613a18602f8361408f565b9150613a23826148f1565b604082019050919050565b6000613a3b60218361408f565b9150613a4682614940565b604082019050919050565b6000613a5e60248361408f565b9150613a698261498f565b604082019050919050565b6000613a81600083614084565b9150613a8c826149de565b600082019050919050565b6000613aa460148361408f565b9150613aaf826149e1565b602082019050919050565b6000613ac760128361408f565b9150613ad282614a0a565b602082019050919050565b6000613aea60318361408f565b9150613af582614a33565b604082019050919050565b6000613b0d60178361408f565b9150613b1882614a82565b602082019050919050565b613b2c8161422a565b82525050565b613b3b8161422a565b82525050565b6000613b4d82866136e5565b9150613b5982856136e5565b9150613b658284613716565b9150819050949350505050565b6000613b7d82613a74565b9150819050919050565b6000602082019050613b9c60008301846135f7565b92915050565b6000608082019050613bb760008301876135f7565b613bc460208301866135f7565b613bd16040830185613b32565b8181036060830152613be38184613673565b905095945050505050565b60006020820190508181036000830152613c088184613606565b905092915050565b6000602082019050613c256000830184613664565b92915050565b60006020820190508181036000830152613c4581846136ac565b905092915050565b60006020820190508181036000830152613c6681613795565b9050919050565b60006020820190508181036000830152613c86816137b8565b9050919050565b60006020820190508181036000830152613ca6816137db565b9050919050565b60006020820190508181036000830152613cc6816137fe565b9050919050565b60006020820190508181036000830152613ce681613821565b9050919050565b60006020820190508181036000830152613d0681613844565b9050919050565b60006020820190508181036000830152613d2681613867565b9050919050565b60006020820190508181036000830152613d468161388a565b9050919050565b60006020820190508181036000830152613d66816138ad565b9050919050565b60006020820190508181036000830152613d86816138d0565b9050919050565b60006020820190508181036000830152613da6816138f3565b9050919050565b60006020820190508181036000830152613dc681613916565b9050919050565b60006020820190508181036000830152613de681613939565b9050919050565b60006020820190508181036000830152613e068161395c565b9050919050565b60006020820190508181036000830152613e268161397f565b9050919050565b60006020820190508181036000830152613e46816139a2565b9050919050565b60006020820190508181036000830152613e66816139c5565b9050919050565b60006020820190508181036000830152613e86816139e8565b9050919050565b60006020820190508181036000830152613ea681613a0b565b9050919050565b60006020820190508181036000830152613ec681613a2e565b9050919050565b60006020820190508181036000830152613ee681613a51565b9050919050565b60006020820190508181036000830152613f0681613a97565b9050919050565b60006020820190508181036000830152613f2681613aba565b9050919050565b60006020820190508181036000830152613f4681613add565b9050919050565b60006020820190508181036000830152613f6681613b00565b9050919050565b6000602082019050613f826000830184613b32565b92915050565b6000613f92613fa3565b9050613f9e82826142a8565b919050565b6000604051905090565b600067ffffffffffffffff821115613fc857613fc761440f565b5b613fd18261445c565b9050602081019050919050565b600067ffffffffffffffff821115613ff957613ff861440f565b5b6140028261445c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140b68261422a565b91506140c18361422a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f6576140f5614353565b5b828201905092915050565b600061410c8261422a565b91506141178361422a565b92508261412757614126614382565b5b828204905092915050565b600061413d8261422a565b91506141488361422a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561418157614180614353565b5b828202905092915050565b60006141978261422a565b91506141a28361422a565b9250828210156141b5576141b4614353565b5b828203905092915050565b60006141cb8261420a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614261578082015181840152602081019050614246565b83811115614270576000848401525b50505050565b6000600282049050600182168061428e57607f821691505b602082108114156142a2576142a16143b1565b5b50919050565b6142b18261445c565b810181811067ffffffffffffffff821117156142d0576142cf61440f565b5b80604052505050565b60006142e48261422a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561431757614316614353565b5b600182019050919050565b600061432d8261422a565b91506143388361422a565b92508261434857614347614382565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d6178206d696e7420616d6f756e7420706572207472616e73616374696f6e2060008201527f6578636565646564000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e46542070726573616c65206c696d69742065786365656465640000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d61782050726573616c65204e4654207065722061646472657373206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b614ab4816141c0565b8114614abf57600080fd5b50565b614acb816141d2565b8114614ad657600080fd5b50565b614ae2816141de565b8114614aed57600080fd5b50565b614af98161422a565b8114614b0457600080fd5b5056fea2646970667358221220b91a9e5d7d864fb0f35b513630f2e5071761c014cc9071022b131a937bd914ce64736f6c63430008070033697066733a2f2f516d63524b3636507664595771366e7048794875706352426d353657637662413777696f6a475246796763764c532f72657665616c2e6a736f6e
Deployed Bytecode
0x6080604052600436106102675760003560e01c8063787d0f5d11610144578063b88d4fde116100b6578063e0a808531161007a578063e0a8085314610921578063e985e9c51461094a578063edec5f2714610987578063efbd73f4146109b0578063f2fde38b146109d9578063f400490114610a0257610267565b8063b88d4fde14610828578063ba4e5c4914610851578063bf3969411461088e578063c87b56dd146108b9578063d5abeb01146108f657610267565b806395d89b411161010857806395d89b41146107395780639c70b51214610764578063a0712d681461078f578063a22cb465146107ab578063a45ba8e7146107d4578063b071401b146107ff57610267565b8063787d0f5d146106665780637ec4a659146106915780638d2204e3146106ba5780638da5cb5b146106e357806394354fd01461070e57610267565b80633af32abf116101dd5780634fdd43cb116101a15780634fdd43cb14610556578063518302271461057f5780635c975abb146105aa5780636352211e146105d557806370a0823114610612578063715018a61461064f57610267565b80633af32abf146104735780633ccfd60b146104b057806342842e0e146104c7578063438b6300146104f057806344a0d68a1461052d57610267565b806313faede61161022f57806313faede61461036557806316ba10e01461039057806316c38b3c146103b957806318160ddd146103e257806318cae2691461040d57806323b872dd1461044a57610267565b806301ffc9a71461026c57806306fdde03146102a9578063081812fc146102d4578063095ea7b3146103115780630aff62a71461033a575b600080fd5b34801561027857600080fd5b50610293600480360381019061028e91906134cf565b610a2d565b6040516102a09190613c10565b60405180910390f35b3480156102b557600080fd5b506102be610b0f565b6040516102cb9190613c2b565b60405180910390f35b3480156102e057600080fd5b506102fb60048036038101906102f69190613572565b610ba1565b6040516103089190613b87565b60405180910390f35b34801561031d57600080fd5b5061033860048036038101906103339190613415565b610c26565b005b34801561034657600080fd5b5061034f610d3e565b60405161035c9190613f6d565b60405180910390f35b34801561037157600080fd5b5061037a610d44565b6040516103879190613f6d565b60405180910390f35b34801561039c57600080fd5b506103b760048036038101906103b29190613529565b610d4a565b005b3480156103c557600080fd5b506103e060048036038101906103db91906134a2565b610de0565b005b3480156103ee57600080fd5b506103f7610e79565b6040516104049190613f6d565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613292565b610e8a565b6040516104419190613f6d565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c91906132ff565b610ea2565b005b34801561047f57600080fd5b5061049a60048036038101906104959190613292565b610f02565b6040516104a79190613c10565b60405180910390f35b3480156104bc57600080fd5b506104c5610fb1565b005b3480156104d357600080fd5b506104ee60048036038101906104e991906132ff565b6110ad565b005b3480156104fc57600080fd5b5061051760048036038101906105129190613292565b6110cd565b6040516105249190613bee565b60405180910390f35b34801561053957600080fd5b50610554600480360381019061054f9190613572565b6111d8565b005b34801561056257600080fd5b5061057d60048036038101906105789190613529565b61125e565b005b34801561058b57600080fd5b506105946112f4565b6040516105a19190613c10565b60405180910390f35b3480156105b657600080fd5b506105bf611307565b6040516105cc9190613c10565b60405180910390f35b3480156105e157600080fd5b506105fc60048036038101906105f79190613572565b61131a565b6040516106099190613b87565b60405180910390f35b34801561061e57600080fd5b5061063960048036038101906106349190613292565b6113cc565b6040516106469190613f6d565b60405180910390f35b34801561065b57600080fd5b50610664611484565b005b34801561067257600080fd5b5061067b61150c565b6040516106889190613f6d565b60405180910390f35b34801561069d57600080fd5b506106b860048036038101906106b39190613529565b611512565b005b3480156106c657600080fd5b506106e160048036038101906106dc91906134a2565b6115a8565b005b3480156106ef57600080fd5b506106f8611641565b6040516107059190613b87565b60405180910390f35b34801561071a57600080fd5b5061072361166b565b6040516107309190613f6d565b60405180910390f35b34801561074557600080fd5b5061074e611671565b60405161075b9190613c2b565b60405180910390f35b34801561077057600080fd5b50610779611703565b6040516107869190613c10565b60405180910390f35b6107a960048036038101906107a49190613572565b611716565b005b3480156107b757600080fd5b506107d260048036038101906107cd91906133d5565b611aad565b005b3480156107e057600080fd5b506107e9611ac3565b6040516107f69190613c2b565b60405180910390f35b34801561080b57600080fd5b5061082660048036038101906108219190613572565b611b51565b005b34801561083457600080fd5b5061084f600480360381019061084a9190613352565b611bd7565b005b34801561085d57600080fd5b5061087860048036038101906108739190613572565b611c39565b6040516108859190613b87565b60405180910390f35b34801561089a57600080fd5b506108a3611c78565b6040516108b09190613f6d565b60405180910390f35b3480156108c557600080fd5b506108e060048036038101906108db9190613572565b611c7e565b6040516108ed9190613c2b565b60405180910390f35b34801561090257600080fd5b5061090b611dd7565b6040516109189190613f6d565b60405180910390f35b34801561092d57600080fd5b50610948600480360381019061094391906134a2565b611ddd565b005b34801561095657600080fd5b50610971600480360381019061096c91906132bf565b611e76565b60405161097e9190613c10565b60405180910390f35b34801561099357600080fd5b506109ae60048036038101906109a99190613455565b611f0a565b005b3480156109bc57600080fd5b506109d760048036038101906109d2919061359f565b611faa565b005b3480156109e557600080fd5b50610a0060048036038101906109fb9190613292565b61208f565b005b348015610a0e57600080fd5b50610a17612187565b604051610a249190613f6d565b60405180910390f35b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610af857507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610b085750610b078261218d565b5b9050919050565b606060008054610b1e90614276565b80601f0160208091040260200160405190810160405280929190818152602001828054610b4a90614276565b8015610b975780601f10610b6c57610100808354040283529160200191610b97565b820191906000526020600020905b815481529060010190602001808311610b7a57829003601f168201915b5050505050905090565b6000610bac826121f7565b610beb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be290613ded565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610c318261131a565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610ca2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c9990613ead565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610cc1612263565b73ffffffffffffffffffffffffffffffffffffffff161480610cf05750610cef81610cea612263565b611e76565b5b610d2f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d2690613d2d565b60405180910390fd5b610d39838361226b565b505050565b600d5481565b600c5481565b610d52612263565b73ffffffffffffffffffffffffffffffffffffffff16610d70611641565b73ffffffffffffffffffffffffffffffffffffffff1614610dc6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610dbd90613e0d565b60405180910390fd5b8060099080519060200190610ddc929190612f8f565b5050565b610de8612263565b73ffffffffffffffffffffffffffffffffffffffff16610e06611641565b73ffffffffffffffffffffffffffffffffffffffff1614610e5c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e5390613e0d565b60405180910390fd5b80601260006101000a81548160ff02191690831515021790555050565b6000610e856007612324565b905090565b60146020528060005260406000206000915090505481565b610eb3610ead612263565b82612332565b610ef2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ee990613f2d565b60405180910390fd5b610efd838383612410565b505050565b600080600090505b601380549050811015610fa6578273ffffffffffffffffffffffffffffffffffffffff1660138281548110610f4257610f416143e0565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff161415610f93576001915050610fac565b8080610f9e906142d9565b915050610f0a565b50600090505b919050565b610fb9612263565b73ffffffffffffffffffffffffffffffffffffffff16610fd7611641565b73ffffffffffffffffffffffffffffffffffffffff161461102d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161102490613e0d565b60405180910390fd5b6000611037611641565b73ffffffffffffffffffffffffffffffffffffffff164760405161105a90613b72565b60006040518083038185875af1925050503d8060008114611097576040519150601f19603f3d011682016040523d82523d6000602084013e61109c565b606091505b50509050806110aa57600080fd5b50565b6110c883838360405180602001604052806000815250611bd7565b505050565b606060006110da836113cc565b905060008167ffffffffffffffff8111156110f8576110f761440f565b5b6040519080825280602002602001820160405280156111265781602001602082028036833780820191505090505b50905060006001905060005b83811080156111435750600e548211155b156111cc5760006111538361131a565b90508673ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156111b8578284838151811061119d5761119c6143e0565b5b60200260200101818152505081806111b4906142d9565b9250505b82806111c3906142d9565b93505050611132565b82945050505050919050565b6111e0612263565b73ffffffffffffffffffffffffffffffffffffffff166111fe611641565b73ffffffffffffffffffffffffffffffffffffffff1614611254576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161124b90613e0d565b60405180910390fd5b80600c8190555050565b611266612263565b73ffffffffffffffffffffffffffffffffffffffff16611284611641565b73ffffffffffffffffffffffffffffffffffffffff16146112da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112d190613e0d565b60405180910390fd5b80600a90805190602001906112f0929190612f8f565b5050565b601260019054906101000a900460ff1681565b601260009054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156113c3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113ba90613d6d565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff16141561143d576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161143490613d4d565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b61148c612263565b73ffffffffffffffffffffffffffffffffffffffff166114aa611641565b73ffffffffffffffffffffffffffffffffffffffff1614611500576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114f790613e0d565b60405180910390fd5b61150a600061266c565b565b600f5481565b61151a612263565b73ffffffffffffffffffffffffffffffffffffffff16611538611641565b73ffffffffffffffffffffffffffffffffffffffff161461158e576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161158590613e0d565b60405180910390fd5b80600890805190602001906115a4929190612f8f565b5050565b6115b0612263565b73ffffffffffffffffffffffffffffffffffffffff166115ce611641565b73ffffffffffffffffffffffffffffffffffffffff1614611624576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161b90613e0d565b60405180910390fd5b80601260026101000a81548160ff02191690831515021790555050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60105481565b60606001805461168090614276565b80601f01602080910402602001604051908101604052809291908181526020018280546116ac90614276565b80156116f95780601f106116ce576101008083540402835291602001916116f9565b820191906000526020600020905b8154815290600101906020018083116116dc57829003601f168201915b5050505050905090565b601260029054906101000a900460ff1681565b8060011515601260029054906101000a900460ff16151514156118ff5761173c33610f02565b61177b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161177290613f4d565b60405180910390fd5b600f548111156117c0576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117b790613ced565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050601154828261181391906140ab565b1115611854576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161184b90613ecd565b60405180910390fd5b81600b546118629190614132565b3410156118a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161189b90613f0d565b60405180910390fd5b600d54826118b26007612324565b6118bc91906140ab565b11156118fd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118f490613e6d565b60405180910390fd5b505b60001515601260029054906101000a900460ff1615151415611a4f57601054811115611960576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161195790613dad565b60405180910390fd5b600e548161196e6007612324565b61197891906140ab565b11156119b9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119b090613d8d565b60405180910390fd5b6000601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081600c54611a0b9190614132565b341015611a4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a4490613f0d565b60405180910390fd5b505b601260009054906101000a900460ff1615611a9f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9690613e2d565b60405180910390fd5b611aa93383612732565b5050565b611abf611ab8612263565b83836127c7565b5050565b600a8054611ad090614276565b80601f0160208091040260200160405190810160405280929190818152602001828054611afc90614276565b8015611b495780601f10611b1e57610100808354040283529160200191611b49565b820191906000526020600020905b815481529060010190602001808311611b2c57829003601f168201915b505050505081565b611b59612263565b73ffffffffffffffffffffffffffffffffffffffff16611b77611641565b73ffffffffffffffffffffffffffffffffffffffff1614611bcd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc490613e0d565b60405180910390fd5b8060108190555050565b611be8611be2612263565b83612332565b611c27576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c1e90613f2d565b60405180910390fd5b611c3384848484612934565b50505050565b60138181548110611c4957600080fd5b906000526020600020016000915054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b60115481565b6060611c89826121f7565b611cc8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cbf90613e8d565b60405180910390fd5b60001515601260019054906101000a900460ff1615151415611d7657600a8054611cf190614276565b80601f0160208091040260200160405190810160405280929190818152602001828054611d1d90614276565b8015611d6a5780601f10611d3f57610100808354040283529160200191611d6a565b820191906000526020600020905b815481529060010190602001808311611d4d57829003601f168201915b50505050509050611dd2565b6000611d80612990565b90506000815111611da05760405180602001604052806000815250611dce565b80611daa84612a22565b6009604051602001611dbe93929190613b41565b6040516020818303038152906040525b9150505b919050565b600e5481565b611de5612263565b73ffffffffffffffffffffffffffffffffffffffff16611e03611641565b73ffffffffffffffffffffffffffffffffffffffff1614611e59576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5090613e0d565b60405180910390fd5b80601260016101000a81548160ff02191690831515021790555050565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611f12612263565b73ffffffffffffffffffffffffffffffffffffffff16611f30611641565b73ffffffffffffffffffffffffffffffffffffffff1614611f86576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f7d90613e0d565b60405180910390fd5b60136000611f949190613015565b818160139190611fa5929190613036565b505050565b81600e5481611fb96007612324565b611fc391906140ab565b1115612004576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ffb90613eed565b60405180910390fd5b61200c612263565b73ffffffffffffffffffffffffffffffffffffffff1661202a611641565b73ffffffffffffffffffffffffffffffffffffffff1614612080576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161207790613e0d565b60405180910390fd5b61208a8284612732565b505050565b612097612263565b73ffffffffffffffffffffffffffffffffffffffff166120b5611641565b73ffffffffffffffffffffffffffffffffffffffff161461210b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161210290613e0d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff16141561217b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161217290613c6d565b60405180910390fd5b6121848161266c565b50565b600b5481565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b600033905090565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166122de8361131a565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b600081600001549050919050565b600061233d826121f7565b61237c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161237390613d0d565b60405180910390fd5b60006123878361131a565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806123f657508373ffffffffffffffffffffffffffffffffffffffff166123de84610ba1565b73ffffffffffffffffffffffffffffffffffffffff16145b8061240757506124068185611e76565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166124308261131a565b73ffffffffffffffffffffffffffffffffffffffff1614612486576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247d90613e4d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156124f6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016124ed90613cad565b60405180910390fd5b612501838383612b83565b61250c60008261226b565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461255c919061418c565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546125b391906140ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600660009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600660006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b60005b818110156127c2576127476007612b88565b601460003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000815480929190612797906142d9565b91905055506127af836127aa6007612324565b612b9e565b80806127ba906142d9565b915050612735565b505050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612836576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161282d90613ccd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516129279190613c10565b60405180910390a3505050565b61293f848484612410565b61294b84848484612bbc565b61298a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161298190613c4d565b60405180910390fd5b50505050565b60606008805461299f90614276565b80601f01602080910402602001604051908101604052809291908181526020018280546129cb90614276565b8015612a185780601f106129ed57610100808354040283529160200191612a18565b820191906000526020600020905b8154815290600101906020018083116129fb57829003601f168201915b5050505050905090565b60606000821415612a6a576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612b7e565b600082905060005b60008214612a9c578080612a85906142d9565b915050600a82612a959190614101565b9150612a72565b60008167ffffffffffffffff811115612ab857612ab761440f565b5b6040519080825280601f01601f191660200182016040528015612aea5781602001600182028036833780820191505090505b5090505b60008514612b7757600182612b03919061418c565b9150600a85612b129190614322565b6030612b1e91906140ab565b60f81b818381518110612b3457612b336143e0565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612b709190614101565b9450612aee565b8093505050505b919050565b505050565b6001816000016000828254019250508190555050565b612bb8828260405180602001604052806000815250612d53565b5050565b6000612bdd8473ffffffffffffffffffffffffffffffffffffffff16612dae565b15612d46578373ffffffffffffffffffffffffffffffffffffffff1663150b7a02612c06612263565b8786866040518563ffffffff1660e01b8152600401612c289493929190613ba2565b602060405180830381600087803b158015612c4257600080fd5b505af1925050508015612c7357506040513d601f19601f82011682018060405250810190612c7091906134fc565b60015b612cf6573d8060008114612ca3576040519150601f19603f3d011682016040523d82523d6000602084013e612ca8565b606091505b50600081511415612cee576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612ce590613c4d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050612d4b565b600190505b949350505050565b612d5d8383612dc1565b612d6a6000848484612bbc565b612da9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612da090613c4d565b60405180910390fd5b505050565b600080823b905060008111915050919050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612e31576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e2890613dcd565b60405180910390fd5b612e3a816121f7565b15612e7a576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612e7190613c8d565b60405180910390fd5b612e8660008383612b83565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612ed691906140ab565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b828054612f9b90614276565b90600052602060002090601f016020900481019282612fbd5760008555613004565b82601f10612fd657805160ff1916838001178555613004565b82800160010185558215613004579182015b82811115613003578251825591602001919060010190612fe8565b5b50905061301191906130d6565b5090565b508054600082559060005260206000209081019061303391906130d6565b50565b8280548282559060005260206000209081019282156130c5579160200282015b828111156130c457823573ffffffffffffffffffffffffffffffffffffffff168260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555091602001919060010190613056565b5b5090506130d291906130d6565b5090565b5b808211156130ef5760008160009055506001016130d7565b5090565b600061310661310184613fad565b613f88565b9050828152602081018484840111156131225761312161444d565b5b61312d848285614234565b509392505050565b600061314861314384613fde565b613f88565b9050828152602081018484840111156131645761316361444d565b5b61316f848285614234565b509392505050565b60008135905061318681614aab565b92915050565b60008083601f8401126131a2576131a1614443565b5b8235905067ffffffffffffffff8111156131bf576131be61443e565b5b6020830191508360208202830111156131db576131da614448565b5b9250929050565b6000813590506131f181614ac2565b92915050565b60008135905061320681614ad9565b92915050565b60008151905061321b81614ad9565b92915050565b600082601f83011261323657613235614443565b5b81356132468482602086016130f3565b91505092915050565b600082601f83011261326457613263614443565b5b8135613274848260208601613135565b91505092915050565b60008135905061328c81614af0565b92915050565b6000602082840312156132a8576132a7614457565b5b60006132b684828501613177565b91505092915050565b600080604083850312156132d6576132d5614457565b5b60006132e485828601613177565b92505060206132f585828601613177565b9150509250929050565b60008060006060848603121561331857613317614457565b5b600061332686828701613177565b935050602061333786828701613177565b92505060406133488682870161327d565b9150509250925092565b6000806000806080858703121561336c5761336b614457565b5b600061337a87828801613177565b945050602061338b87828801613177565b935050604061339c8782880161327d565b925050606085013567ffffffffffffffff8111156133bd576133bc614452565b5b6133c987828801613221565b91505092959194509250565b600080604083850312156133ec576133eb614457565b5b60006133fa85828601613177565b925050602061340b858286016131e2565b9150509250929050565b6000806040838503121561342c5761342b614457565b5b600061343a85828601613177565b925050602061344b8582860161327d565b9150509250929050565b6000806020838503121561346c5761346b614457565b5b600083013567ffffffffffffffff81111561348a57613489614452565b5b6134968582860161318c565b92509250509250929050565b6000602082840312156134b8576134b7614457565b5b60006134c6848285016131e2565b91505092915050565b6000602082840312156134e5576134e4614457565b5b60006134f3848285016131f7565b91505092915050565b60006020828403121561351257613511614457565b5b60006135208482850161320c565b91505092915050565b60006020828403121561353f5761353e614457565b5b600082013567ffffffffffffffff81111561355d5761355c614452565b5b6135698482850161324f565b91505092915050565b60006020828403121561358857613587614457565b5b60006135968482850161327d565b91505092915050565b600080604083850312156135b6576135b5614457565b5b60006135c48582860161327d565b92505060206135d585828601613177565b9150509250929050565b60006135eb8383613b23565b60208301905092915050565b613600816141c0565b82525050565b600061361182614034565b61361b8185614062565b93506136268361400f565b8060005b8381101561365757815161363e88826135df565b975061364983614055565b92505060018101905061362a565b5085935050505092915050565b61366d816141d2565b82525050565b600061367e8261403f565b6136888185614073565b9350613698818560208601614243565b6136a18161445c565b840191505092915050565b60006136b78261404a565b6136c1818561408f565b93506136d1818560208601614243565b6136da8161445c565b840191505092915050565b60006136f08261404a565b6136fa81856140a0565b935061370a818560208601614243565b80840191505092915050565b6000815461372381614276565b61372d81866140a0565b9450600182166000811461374857600181146137595761378c565b60ff1983168652818601935061378c565b6137628561401f565b60005b8381101561378457815481890152600182019150602081019050613765565b838801955050505b50505092915050565b60006137a260328361408f565b91506137ad8261446d565b604082019050919050565b60006137c560268361408f565b91506137d0826144bc565b604082019050919050565b60006137e8601c8361408f565b91506137f38261450b565b602082019050919050565b600061380b60248361408f565b915061381682614534565b604082019050919050565b600061382e60198361408f565b915061383982614583565b602082019050919050565b600061385160288361408f565b915061385c826145ac565b604082019050919050565b6000613874602c8361408f565b915061387f826145fb565b604082019050919050565b600061389760388361408f565b91506138a28261464a565b604082019050919050565b60006138ba602a8361408f565b91506138c582614699565b604082019050919050565b60006138dd60298361408f565b91506138e8826146e8565b604082019050919050565b600061390060168361408f565b915061390b82614737565b602082019050919050565b600061392360248361408f565b915061392e82614760565b604082019050919050565b600061394660208361408f565b9150613951826147af565b602082019050919050565b6000613969602c8361408f565b9150613974826147d8565b604082019050919050565b600061398c60208361408f565b915061399782614827565b602082019050919050565b60006139af60178361408f565b91506139ba82614850565b602082019050919050565b60006139d260298361408f565b91506139dd82614879565b604082019050919050565b60006139f5601e8361408f565b9150613a00826148c8565b602082019050919050565b6000613a18602f8361408f565b9150613a23826148f1565b604082019050919050565b6000613a3b60218361408f565b9150613a4682614940565b604082019050919050565b6000613a5e60248361408f565b9150613a698261498f565b604082019050919050565b6000613a81600083614084565b9150613a8c826149de565b600082019050919050565b6000613aa460148361408f565b9150613aaf826149e1565b602082019050919050565b6000613ac760128361408f565b9150613ad282614a0a565b602082019050919050565b6000613aea60318361408f565b9150613af582614a33565b604082019050919050565b6000613b0d60178361408f565b9150613b1882614a82565b602082019050919050565b613b2c8161422a565b82525050565b613b3b8161422a565b82525050565b6000613b4d82866136e5565b9150613b5982856136e5565b9150613b658284613716565b9150819050949350505050565b6000613b7d82613a74565b9150819050919050565b6000602082019050613b9c60008301846135f7565b92915050565b6000608082019050613bb760008301876135f7565b613bc460208301866135f7565b613bd16040830185613b32565b8181036060830152613be38184613673565b905095945050505050565b60006020820190508181036000830152613c088184613606565b905092915050565b6000602082019050613c256000830184613664565b92915050565b60006020820190508181036000830152613c4581846136ac565b905092915050565b60006020820190508181036000830152613c6681613795565b9050919050565b60006020820190508181036000830152613c86816137b8565b9050919050565b60006020820190508181036000830152613ca6816137db565b9050919050565b60006020820190508181036000830152613cc6816137fe565b9050919050565b60006020820190508181036000830152613ce681613821565b9050919050565b60006020820190508181036000830152613d0681613844565b9050919050565b60006020820190508181036000830152613d2681613867565b9050919050565b60006020820190508181036000830152613d468161388a565b9050919050565b60006020820190508181036000830152613d66816138ad565b9050919050565b60006020820190508181036000830152613d86816138d0565b9050919050565b60006020820190508181036000830152613da6816138f3565b9050919050565b60006020820190508181036000830152613dc681613916565b9050919050565b60006020820190508181036000830152613de681613939565b9050919050565b60006020820190508181036000830152613e068161395c565b9050919050565b60006020820190508181036000830152613e268161397f565b9050919050565b60006020820190508181036000830152613e46816139a2565b9050919050565b60006020820190508181036000830152613e66816139c5565b9050919050565b60006020820190508181036000830152613e86816139e8565b9050919050565b60006020820190508181036000830152613ea681613a0b565b9050919050565b60006020820190508181036000830152613ec681613a2e565b9050919050565b60006020820190508181036000830152613ee681613a51565b9050919050565b60006020820190508181036000830152613f0681613a97565b9050919050565b60006020820190508181036000830152613f2681613aba565b9050919050565b60006020820190508181036000830152613f4681613add565b9050919050565b60006020820190508181036000830152613f6681613b00565b9050919050565b6000602082019050613f826000830184613b32565b92915050565b6000613f92613fa3565b9050613f9e82826142a8565b919050565b6000604051905090565b600067ffffffffffffffff821115613fc857613fc761440f565b5b613fd18261445c565b9050602081019050919050565b600067ffffffffffffffff821115613ff957613ff861440f565b5b6140028261445c565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b600082825260208201905092915050565b600081905092915050565b60006140b68261422a565b91506140c18361422a565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff038211156140f6576140f5614353565b5b828201905092915050565b600061410c8261422a565b91506141178361422a565b92508261412757614126614382565b5b828204905092915050565b600061413d8261422a565b91506141488361422a565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff048311821515161561418157614180614353565b5b828202905092915050565b60006141978261422a565b91506141a28361422a565b9250828210156141b5576141b4614353565b5b828203905092915050565b60006141cb8261420a565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b83811015614261578082015181840152602081019050614246565b83811115614270576000848401525b50505050565b6000600282049050600182168061428e57607f821691505b602082108114156142a2576142a16143b1565b5b50919050565b6142b18261445c565b810181811067ffffffffffffffff821117156142d0576142cf61440f565b5b80604052505050565b60006142e48261422a565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561431757614316614353565b5b600182019050919050565b600061432d8261422a565b91506143388361422a565b92508261434857614347614382565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f6d6178206d696e7420616d6f756e7420706572207472616e73616374696f6e2060008201527f6578636565646564000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e4654206c696d697420657863656564656400000000000000000000600082015250565b7f6d6178206d696e7420616d6f756e74207065722073657373696f6e206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f54686520636f6e74726163742069732070617573656421000000000000000000600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f6d6178204e46542070726573616c65206c696d69742065786365656465640000600082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f6d61782050726573616c65204e4654207065722061646472657373206578636560008201527f6564656400000000000000000000000000000000000000000000000000000000602082015250565b50565b7f4d617820737570706c7920657863656564656421000000000000000000000000600082015250565b7f696e73756666696369656e742066756e64730000000000000000000000000000600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f75736572206973206e6f742077686974656c6973746564000000000000000000600082015250565b614ab4816141c0565b8114614abf57600080fd5b50565b614acb816141d2565b8114614ad657600080fd5b50565b614ae2816141de565b8114614aed57600080fd5b50565b614af98161422a565b8114614b0457600080fd5b5056fea2646970667358221220b91a9e5d7d864fb0f35b513630f2e5071761c014cc9071022b131a937bd914ce64736f6c63430008070033
Deployed Bytecode Sourcemap
37778:5482:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25242:305;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26187:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27746:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;27269:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38116:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38080:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42309:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42415:77;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40163:89;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38490:55;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;28496:339;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;39916:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42753:141;;;;;;;;;;;;;:::i;:::-;;28906:185;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40621:635;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41849:74;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42065:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38372:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38341:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25881:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25611:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;6230:103;;;;;;;;;;;;;:::i;:::-;;38196:45;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42203:100;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42500:95;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;5579:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38246:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26356:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38405:34;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40258:184;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28039:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;37997:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41929:130;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;29162:328;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38448:37;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38289:44;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41262:494;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;38159:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;41762:81;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;28265:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42601:144;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40450:165;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;6488:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;38037:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25242:305;25344:4;25396:25;25381:40;;;:11;:40;;;;:105;;;;25453:33;25438:48;;;:11;:48;;;;25381:105;:158;;;;25503:36;25527:11;25503:23;:36::i;:::-;25381:158;25361:178;;25242:305;;;:::o;26187:100::-;26241:13;26274:5;26267:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26187:100;:::o;27746:221::-;27822:7;27850:16;27858:7;27850;:16::i;:::-;27842:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;27935:15;:24;27951:7;27935:24;;;;;;;;;;;;;;;;;;;;;27928:31;;27746:221;;;:::o;27269:411::-;27350:13;27366:23;27381:7;27366:14;:23::i;:::-;27350:39;;27414:5;27408:11;;:2;:11;;;;27400:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;27508:5;27492:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;27517:37;27534:5;27541:12;:10;:12::i;:::-;27517:16;:37::i;:::-;27492:62;27470:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;27651:21;27660:2;27664:7;27651:8;:21::i;:::-;27339:341;27269:411;;:::o;38116:38::-;;;;:::o;38080:31::-;;;;:::o;42309:100::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42393:10:::1;42381:9;:22;;;;;;;;;;;;:::i;:::-;;42309:100:::0;:::o;42415:77::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42480:6:::1;42471;;:15;;;;;;;;;;;;;;;;;;42415:77:::0;:::o;40163:89::-;40207:7;40230:16;:6;:14;:16::i;:::-;40223:23;;40163:89;:::o;38490:55::-;;;;;;;;;;;;;;;;;:::o;28496:339::-;28691:41;28710:12;:10;:12::i;:::-;28724:7;28691:18;:41::i;:::-;28683:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;28799:28;28809:4;28815:2;28819:7;28799:9;:28::i;:::-;28496:339;;;:::o;39916:239::-;39975:4;39993:6;40002:1;39993:10;;39988:143;40009:20;:27;;;;40005:1;:31;39988:143;;;40083:5;40056:32;;:20;40077:1;40056:23;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;:32;;;40052:72;;;40110:4;40103:11;;;;;40052:72;40038:3;;;;;:::i;:::-;;;;39988:143;;;;40144:5;40137:12;;39916:239;;;;:::o;42753:141::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42800:7:::1;42821;:5;:7::i;:::-;42813:21;;42842;42813:55;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;42799:69;;;42883:2;42875:11;;;::::0;::::1;;42790:104;42753:141::o:0;28906:185::-;29044:39;29061:4;29067:2;29071:7;29044:39;;;;;;;;;;;;:16;:39::i;:::-;28906:185;;;:::o;40621:635::-;40696:16;40724:23;40750:17;40760:6;40750:9;:17::i;:::-;40724:43;;40774:30;40821:15;40807:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40774:63;;40844:22;40869:1;40844:26;;40877:23;40913:309;40938:15;40920;:33;:64;;;;;40975:9;;40957:14;:27;;40920:64;40913:309;;;40995:25;41023:23;41031:14;41023:7;:23::i;:::-;40995:51;;41082:6;41061:27;;:17;:27;;;41057:131;;;41134:14;41101:13;41115:15;41101:30;;;;;;;;:::i;:::-;;;;;;;:47;;;;;41161:17;;;;;:::i;:::-;;;;41057:131;41198:16;;;;;:::i;:::-;;;;40986:236;40913:309;;;41237:13;41230:20;;;;;;40621:635;;;:::o;41849:74::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41912:5:::1;41905:4;:12;;;;41849:74:::0;:::o;42065:132::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42173:18:::1;42153:17;:38;;;;;;;;;;;;:::i;:::-;;42065:132:::0;:::o;38372:28::-;;;;;;;;;;;;;:::o;38341:26::-;;;;;;;;;;;;;:::o;25881:239::-;25953:7;25973:13;25989:7;:16;25997:7;25989:16;;;;;;;;;;;;;;;;;;;;;25973:32;;26041:1;26024:19;;:5;:19;;;;26016:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;26107:5;26100:12;;;25881:239;;;:::o;25611:208::-;25683:7;25728:1;25711:19;;:5;:19;;;;25703:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;25795:9;:16;25805:5;25795:16;;;;;;;;;;;;;;;;25788:23;;25611:208;;;:::o;6230:103::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6295:30:::1;6322:1;6295:18;:30::i;:::-;6230:103::o:0;38196:45::-;;;;:::o;42203:100::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42287:10:::1;42275:9;:22;;;;;;;;;;;;:::i;:::-;;42203:100:::0;:::o;42500:95::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42583:6:::1;42565:15;;:24;;;;;;;;;;;;;;;;;;42500:95:::0;:::o;5579:87::-;5625:7;5652:6;;;;;;;;;;;5645:13;;5579:87;:::o;38246:38::-;;;;:::o;26356:104::-;26412:13;26445:7;26438:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;26356:104;:::o;38405:34::-;;;;;;;;;;;;;:::o;40258:184::-;40323:11;38774:4;38755:23;;:15;;;;;;;;;;;:23;;;38751:604;;;38802:25;38816:10;38802:13;:25::i;:::-;38794:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;38893:26;;38878:11;:41;;38870:93;;;;;;;;;;;;:::i;:::-;;;;;;;;;38978:24;39005:20;:32;39026:10;39005:32;;;;;;;;;;;;;;;;38978:59;;39094:25;;39079:11;39060:16;:30;;;;:::i;:::-;:59;;39052:108;;;;;;;;;;;;:::i;:::-;;;;;;;;;39210:11;39196;;:25;;;;:::i;:::-;39183:9;:38;;39175:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;39301:16;;39286:11;39267:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:50;;39259:92;;;;;;;;;;;;:::i;:::-;;;;;;;;;38779:576;38751:604;39380:5;39361:24;;:15;;;;;;;;;;;:24;;;39357:374;;;39424:18;;39409:11;:33;;39401:82;;;;;;;;;;;;:::i;:::-;;;;;;;;;39540:9;;39525:11;39506:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39498:78;;;;;;;;;;;;:::i;:::-;;;;;;;;;39591:24;39618:20;:32;39639:10;39618:32;;;;;;;;;;;;;;;;39591:59;;39693:11;39686:4;;:18;;;;:::i;:::-;39673:9;:31;;39665:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;39386:345;39357:374;40352:6:::1;;;;;;;;;;;40351:7;40343:43;;;;;;;;;;;;:::i;:::-;;;;;;;;;40402:34;40412:10;40424:11;40402:9;:34::i;:::-;40258:184:::0;;:::o;28039:155::-;28134:52;28153:12;:10;:12::i;:::-;28167:8;28177;28134:18;:52::i;:::-;28039:155;;:::o;37997:31::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;41929:130::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42034:19:::1;42013:18;:40;;;;41929:130:::0;:::o;29162:328::-;29337:41;29356:12;:10;:12::i;:::-;29370:7;29337:18;:41::i;:::-;29329:103;;;;;;;;;;;;:::i;:::-;;;;;;;;;29443:39;29457:4;29463:2;29467:7;29476:5;29443:13;:39::i;:::-;29162:328;;;;:::o;38448:37::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;38289:44::-;;;;:::o;41262:494::-;41361:13;41402:17;41410:8;41402:7;:17::i;:::-;41386:98;;;;;;;;;;;;:::i;:::-;;;;;;;;;41509:5;41497:17;;:8;;;;;;;;;;;:17;;;41493:64;;;41532:17;41525:24;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;41493:64;41565:28;41596:10;:8;:10::i;:::-;41565:41;;41651:1;41626:14;41620:28;:32;:130;;;;;;;;;;;;;;;;;41688:14;41704:19;:8;:17;:19::i;:::-;41725:9;41671:64;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;41620:130;41613:137;;;41262:494;;;;:::o;38159:32::-;;;;:::o;41762:81::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;41831:6:::1;41820:8;;:17;;;;;;;;;;;;;;;;;;41762:81:::0;:::o;28265:164::-;28362:4;28386:18;:25;28405:5;28386:25;;;;;;;;;;;;;;;:35;28412:8;28386:35;;;;;;;;;;;;;;;;;;;;;;;;;28379:42;;28265:164;;;;:::o;42601:144::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;42683:20:::1;;42676:27;;;;:::i;:::-;42733:6;;42710:20;:29;;;;;;;:::i;:::-;;42601:144:::0;;:::o;40450:165::-;40546:11;39862:9;;39847:11;39828:16;:6;:14;:16::i;:::-;:30;;;;:::i;:::-;:43;;39820:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;5810:12:::1;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;40576:33:::2;40586:9;40597:11;40576:9;:33::i;:::-;40450:165:::0;;;:::o;6488:201::-;5810:12;:10;:12::i;:::-;5799:23;;:7;:5;:7::i;:::-;:23;;;5791:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;6597:1:::1;6577:22;;:8;:22;;;;6569:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;6653:28;6672:8;6653:18;:28::i;:::-;6488:201:::0;:::o;38037:38::-;;;;:::o;18011:157::-;18096:4;18135:25;18120:40;;;:11;:40;;;;18113:47;;18011:157;;;:::o;31000:127::-;31065:4;31117:1;31089:30;;:7;:16;31097:7;31089:16;;;;;;;;;;;;;;;;;;;;;:30;;;;31082:37;;31000:127;;;:::o;4303:98::-;4356:7;4383:10;4376:17;;4303:98;:::o;34982:174::-;35084:2;35057:15;:24;35073:7;35057:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;35140:7;35136:2;35102:46;;35111:23;35126:7;35111:14;:23::i;:::-;35102:46;;;;;;;;;;;;34982:174;;:::o;907:114::-;972:7;999;:14;;;992:21;;907:114;;;:::o;31294:348::-;31387:4;31412:16;31420:7;31412;:16::i;:::-;31404:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;31488:13;31504:23;31519:7;31504:14;:23::i;:::-;31488:39;;31557:5;31546:16;;:7;:16;;;:51;;;;31590:7;31566:31;;:20;31578:7;31566:11;:20::i;:::-;:31;;;31546:51;:87;;;;31601:32;31618:5;31625:7;31601:16;:32::i;:::-;31546:87;31538:96;;;31294:348;;;;:::o;34286:578::-;34445:4;34418:31;;:23;34433:7;34418:14;:23::i;:::-;:31;;;34410:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;34528:1;34514:16;;:2;:16;;;;34506:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;34584:39;34605:4;34611:2;34615:7;34584:20;:39::i;:::-;34688:29;34705:1;34709:7;34688:8;:29::i;:::-;34749:1;34730:9;:15;34740:4;34730:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;34778:1;34761:9;:13;34771:2;34761:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;34809:2;34790:7;:16;34798:7;34790:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;34848:7;34844:2;34829:27;;34838:4;34829:27;;;;;;;;;;;;34286:578;;;:::o;6849:191::-;6923:16;6942:6;;;;;;;;;;;6923:25;;6968:8;6959:6;;:17;;;;;;;;;;;;;;;;;;7023:8;6992:40;;7013:8;6992:40;;;;;;;;;;;;6912:128;6849:191;:::o;42900:247::-;42980:9;42975:167;42999:11;42995:1;:15;42975:167;;;43026:18;:6;:16;:18::i;:::-;43053:20;:32;43074:10;43053:32;;;;;;;;;;;;;;;;:34;;;;;;;;;:::i;:::-;;;;;;43096:38;43106:9;43117:16;:6;:14;:16::i;:::-;43096:9;:38::i;:::-;43012:3;;;;;:::i;:::-;;;;42975:167;;;;42900:247;;:::o;35298:315::-;35453:8;35444:17;;:5;:17;;;;35436:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;35540:8;35502:18;:25;35521:5;35502:25;;;;;;;;;;;;;;;:35;35528:8;35502:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35586:8;35564:41;;35579:5;35564:41;;;35596:8;35564:41;;;;;;:::i;:::-;;;;;;;;35298:315;;;:::o;30372:::-;30529:28;30539:4;30545:2;30549:7;30529:9;:28::i;:::-;30576:48;30599:4;30605:2;30609:7;30618:5;30576:22;:48::i;:::-;30568:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;30372:315;;;;:::o;43153:104::-;43213:13;43242:9;43235:16;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43153:104;:::o;1865:723::-;1921:13;2151:1;2142:5;:10;2138:53;;;2169:10;;;;;;;;;;;;;;;;;;;;;2138:53;2201:12;2216:5;2201:20;;2232:14;2257:78;2272:1;2264:4;:9;2257:78;;2290:8;;;;;:::i;:::-;;;;2321:2;2313:10;;;;;:::i;:::-;;;2257:78;;;2345:19;2377:6;2367:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;2345:39;;2395:154;2411:1;2402:5;:10;2395:154;;2439:1;2429:11;;;;;:::i;:::-;;;2506:2;2498:5;:10;;;;:::i;:::-;2485:2;:24;;;;:::i;:::-;2472:39;;2455:6;2462;2455:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;2535:2;2526:11;;;;;:::i;:::-;;;2395:154;;;2573:6;2559:21;;;;;1865:723;;;;:::o;37549:126::-;;;;:::o;1029:127::-;1136:1;1118:7;:14;;;:19;;;;;;;;;;;1029:127;:::o;31984:110::-;32060:26;32070:2;32074:7;32060:26;;;;;;;;;;;;:9;:26::i;:::-;31984:110;;:::o;36178:799::-;36333:4;36354:15;:2;:13;;;:15::i;:::-;36350:620;;;36406:2;36390:36;;;36427:12;:10;:12::i;:::-;36441:4;36447:7;36456:5;36390:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;36386:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;36649:1;36632:6;:13;:18;36628:272;;;36675:60;;;;;;;;;;:::i;:::-;;;;;;;;36628:272;36850:6;36844:13;36835:6;36831:2;36827:15;36820:38;36386:529;36523:41;;;36513:51;;;:6;:51;;;;36506:58;;;;;36350:620;36954:4;36947:11;;36178:799;;;;;;;:::o;32321:321::-;32451:18;32457:2;32461:7;32451:5;:18::i;:::-;32502:54;32533:1;32537:2;32541:7;32550:5;32502:22;:54::i;:::-;32480:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;32321:321;;;:::o;7867:387::-;7927:4;8135:12;8202:7;8190:20;8182:28;;8245:1;8238:4;:8;8231:15;;;7867:387;;;:::o;32978:382::-;33072:1;33058:16;;:2;:16;;;;33050:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;33131:16;33139:7;33131;:16::i;:::-;33130:17;33122:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;33193:45;33222:1;33226:2;33230:7;33193:20;:45::i;:::-;33268:1;33251:9;:13;33261:2;33251:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;33299:2;33280:7;:16;33288:7;33280:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;33344:7;33340:2;33319:33;;33336:1;33319:33;;;;;;;;;;;;32978:382;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;7:410:1:-;84:5;109:65;125:48;166:6;125:48;:::i;:::-;109:65;:::i;:::-;100:74;;197:6;190:5;183:21;235:4;228:5;224:16;273:3;264:6;259:3;255:16;252:25;249:112;;;280:79;;:::i;:::-;249:112;370:41;404:6;399:3;394;370:41;:::i;:::-;90:327;7:410;;;;;:::o;423:412::-;501:5;526:66;542:49;584:6;542:49;:::i;:::-;526:66;:::i;:::-;517:75;;615:6;608:5;601:21;653:4;646:5;642:16;691:3;682:6;677:3;673:16;670:25;667:112;;;698:79;;:::i;:::-;667:112;788:41;822:6;817:3;812;788:41;:::i;:::-;507:328;423:412;;;;;:::o;841:139::-;887:5;925:6;912:20;903:29;;941:33;968:5;941:33;:::i;:::-;841:139;;;;:::o;1003:568::-;1076:8;1086:6;1136:3;1129:4;1121:6;1117:17;1113:27;1103:122;;1144:79;;:::i;:::-;1103:122;1257:6;1244:20;1234:30;;1287:18;1279:6;1276:30;1273:117;;;1309:79;;:::i;:::-;1273:117;1423:4;1415:6;1411:17;1399:29;;1477:3;1469:4;1461:6;1457:17;1447:8;1443:32;1440:41;1437:128;;;1484:79;;:::i;:::-;1437:128;1003:568;;;;;:::o;1577:133::-;1620:5;1658:6;1645:20;1636:29;;1674:30;1698:5;1674:30;:::i;:::-;1577:133;;;;:::o;1716:137::-;1761:5;1799:6;1786:20;1777:29;;1815:32;1841:5;1815:32;:::i;:::-;1716:137;;;;:::o;1859:141::-;1915:5;1946:6;1940:13;1931:22;;1962:32;1988:5;1962:32;:::i;:::-;1859:141;;;;:::o;2019:338::-;2074:5;2123:3;2116:4;2108:6;2104:17;2100:27;2090:122;;2131:79;;:::i;:::-;2090:122;2248:6;2235:20;2273:78;2347:3;2339:6;2332:4;2324:6;2320:17;2273:78;:::i;:::-;2264:87;;2080:277;2019:338;;;;:::o;2377:340::-;2433:5;2482:3;2475:4;2467:6;2463:17;2459:27;2449:122;;2490:79;;:::i;:::-;2449:122;2607:6;2594:20;2632:79;2707:3;2699:6;2692:4;2684:6;2680:17;2632:79;:::i;:::-;2623:88;;2439:278;2377:340;;;;:::o;2723:139::-;2769:5;2807:6;2794:20;2785:29;;2823:33;2850:5;2823:33;:::i;:::-;2723:139;;;;:::o;2868:329::-;2927:6;2976:2;2964:9;2955:7;2951:23;2947:32;2944:119;;;2982:79;;:::i;:::-;2944:119;3102:1;3127:53;3172:7;3163:6;3152:9;3148:22;3127:53;:::i;:::-;3117:63;;3073:117;2868:329;;;;:::o;3203:474::-;3271:6;3279;3328:2;3316:9;3307:7;3303:23;3299:32;3296:119;;;3334:79;;:::i;:::-;3296:119;3454:1;3479:53;3524:7;3515:6;3504:9;3500:22;3479:53;:::i;:::-;3469:63;;3425:117;3581:2;3607:53;3652:7;3643:6;3632:9;3628:22;3607:53;:::i;:::-;3597:63;;3552:118;3203:474;;;;;:::o;3683:619::-;3760:6;3768;3776;3825:2;3813:9;3804:7;3800:23;3796:32;3793:119;;;3831:79;;:::i;:::-;3793:119;3951:1;3976:53;4021:7;4012:6;4001:9;3997:22;3976:53;:::i;:::-;3966:63;;3922:117;4078:2;4104:53;4149:7;4140:6;4129:9;4125:22;4104:53;:::i;:::-;4094:63;;4049:118;4206:2;4232:53;4277:7;4268:6;4257:9;4253:22;4232:53;:::i;:::-;4222:63;;4177:118;3683:619;;;;;:::o;4308:943::-;4403:6;4411;4419;4427;4476:3;4464:9;4455:7;4451:23;4447:33;4444:120;;;4483:79;;:::i;:::-;4444:120;4603:1;4628:53;4673:7;4664:6;4653:9;4649:22;4628:53;:::i;:::-;4618:63;;4574:117;4730:2;4756:53;4801:7;4792:6;4781:9;4777:22;4756:53;:::i;:::-;4746:63;;4701:118;4858:2;4884:53;4929:7;4920:6;4909:9;4905:22;4884:53;:::i;:::-;4874:63;;4829:118;5014:2;5003:9;4999:18;4986:32;5045:18;5037:6;5034:30;5031:117;;;5067:79;;:::i;:::-;5031:117;5172:62;5226:7;5217:6;5206:9;5202:22;5172:62;:::i;:::-;5162:72;;4957:287;4308:943;;;;;;;:::o;5257:468::-;5322:6;5330;5379:2;5367:9;5358:7;5354:23;5350:32;5347:119;;;5385:79;;:::i;:::-;5347:119;5505:1;5530:53;5575:7;5566:6;5555:9;5551:22;5530:53;:::i;:::-;5520:63;;5476:117;5632:2;5658:50;5700:7;5691:6;5680:9;5676:22;5658:50;:::i;:::-;5648:60;;5603:115;5257:468;;;;;:::o;5731:474::-;5799:6;5807;5856:2;5844:9;5835:7;5831:23;5827:32;5824:119;;;5862:79;;:::i;:::-;5824:119;5982:1;6007:53;6052:7;6043:6;6032:9;6028:22;6007:53;:::i;:::-;5997:63;;5953:117;6109:2;6135:53;6180:7;6171:6;6160:9;6156:22;6135:53;:::i;:::-;6125:63;;6080:118;5731:474;;;;;:::o;6211:559::-;6297:6;6305;6354:2;6342:9;6333:7;6329:23;6325:32;6322:119;;;6360:79;;:::i;:::-;6322:119;6508:1;6497:9;6493:17;6480:31;6538:18;6530:6;6527:30;6524:117;;;6560:79;;:::i;:::-;6524:117;6673:80;6745:7;6736:6;6725:9;6721:22;6673:80;:::i;:::-;6655:98;;;;6451:312;6211:559;;;;;:::o;6776:323::-;6832:6;6881:2;6869:9;6860:7;6856:23;6852:32;6849:119;;;6887:79;;:::i;:::-;6849:119;7007:1;7032:50;7074:7;7065:6;7054:9;7050:22;7032:50;:::i;:::-;7022:60;;6978:114;6776:323;;;;:::o;7105:327::-;7163:6;7212:2;7200:9;7191:7;7187:23;7183:32;7180:119;;;7218:79;;:::i;:::-;7180:119;7338:1;7363:52;7407:7;7398:6;7387:9;7383:22;7363:52;:::i;:::-;7353:62;;7309:116;7105:327;;;;:::o;7438:349::-;7507:6;7556:2;7544:9;7535:7;7531:23;7527:32;7524:119;;;7562:79;;:::i;:::-;7524:119;7682:1;7707:63;7762:7;7753:6;7742:9;7738:22;7707:63;:::i;:::-;7697:73;;7653:127;7438:349;;;;:::o;7793:509::-;7862:6;7911:2;7899:9;7890:7;7886:23;7882:32;7879:119;;;7917:79;;:::i;:::-;7879:119;8065:1;8054:9;8050:17;8037:31;8095:18;8087:6;8084:30;8081:117;;;8117:79;;:::i;:::-;8081:117;8222:63;8277:7;8268:6;8257:9;8253:22;8222:63;:::i;:::-;8212:73;;8008:287;7793:509;;;;:::o;8308:329::-;8367:6;8416:2;8404:9;8395:7;8391:23;8387:32;8384:119;;;8422:79;;:::i;:::-;8384:119;8542:1;8567:53;8612:7;8603:6;8592:9;8588:22;8567:53;:::i;:::-;8557:63;;8513:117;8308:329;;;;:::o;8643:474::-;8711:6;8719;8768:2;8756:9;8747:7;8743:23;8739:32;8736:119;;;8774:79;;:::i;:::-;8736:119;8894:1;8919:53;8964:7;8955:6;8944:9;8940:22;8919:53;:::i;:::-;8909:63;;8865:117;9021:2;9047:53;9092:7;9083:6;9072:9;9068:22;9047:53;:::i;:::-;9037:63;;8992:118;8643:474;;;;;:::o;9123:179::-;9192:10;9213:46;9255:3;9247:6;9213:46;:::i;:::-;9291:4;9286:3;9282:14;9268:28;;9123:179;;;;:::o;9308:118::-;9395:24;9413:5;9395:24;:::i;:::-;9390:3;9383:37;9308:118;;:::o;9462:732::-;9581:3;9610:54;9658:5;9610:54;:::i;:::-;9680:86;9759:6;9754:3;9680:86;:::i;:::-;9673:93;;9790:56;9840:5;9790:56;:::i;:::-;9869:7;9900:1;9885:284;9910:6;9907:1;9904:13;9885:284;;;9986:6;9980:13;10013:63;10072:3;10057:13;10013:63;:::i;:::-;10006:70;;10099:60;10152:6;10099:60;:::i;:::-;10089:70;;9945:224;9932:1;9929;9925:9;9920:14;;9885:284;;;9889:14;10185:3;10178:10;;9586:608;;;9462:732;;;;:::o;10200:109::-;10281:21;10296:5;10281:21;:::i;:::-;10276:3;10269:34;10200:109;;:::o;10315:360::-;10401:3;10429:38;10461:5;10429:38;:::i;:::-;10483:70;10546:6;10541:3;10483:70;:::i;:::-;10476:77;;10562:52;10607:6;10602:3;10595:4;10588:5;10584:16;10562:52;:::i;:::-;10639:29;10661:6;10639:29;:::i;:::-;10634:3;10630:39;10623:46;;10405:270;10315:360;;;;:::o;10681:364::-;10769:3;10797:39;10830:5;10797:39;:::i;:::-;10852:71;10916:6;10911:3;10852:71;:::i;:::-;10845:78;;10932:52;10977:6;10972:3;10965:4;10958:5;10954:16;10932:52;:::i;:::-;11009:29;11031:6;11009:29;:::i;:::-;11004:3;11000:39;10993:46;;10773:272;10681:364;;;;:::o;11051:377::-;11157:3;11185:39;11218:5;11185:39;:::i;:::-;11240:89;11322:6;11317:3;11240:89;:::i;:::-;11233:96;;11338:52;11383:6;11378:3;11371:4;11364:5;11360:16;11338:52;:::i;:::-;11415:6;11410:3;11406:16;11399:23;;11161:267;11051:377;;;;:::o;11458:845::-;11561:3;11598:5;11592:12;11627:36;11653:9;11627:36;:::i;:::-;11679:89;11761:6;11756:3;11679:89;:::i;:::-;11672:96;;11799:1;11788:9;11784:17;11815:1;11810:137;;;;11961:1;11956:341;;;;11777:520;;11810:137;11894:4;11890:9;11879;11875:25;11870:3;11863:38;11930:6;11925:3;11921:16;11914:23;;11810:137;;11956:341;12023:38;12055:5;12023:38;:::i;:::-;12083:1;12097:154;12111:6;12108:1;12105:13;12097:154;;;12185:7;12179:14;12175:1;12170:3;12166:11;12159:35;12235:1;12226:7;12222:15;12211:26;;12133:4;12130:1;12126:12;12121:17;;12097:154;;;12280:6;12275:3;12271:16;12264:23;;11963:334;;11777:520;;11565:738;;11458:845;;;;:::o;12309:366::-;12451:3;12472:67;12536:2;12531:3;12472:67;:::i;:::-;12465:74;;12548:93;12637:3;12548:93;:::i;:::-;12666:2;12661:3;12657:12;12650:19;;12309:366;;;:::o;12681:::-;12823:3;12844:67;12908:2;12903:3;12844:67;:::i;:::-;12837:74;;12920:93;13009:3;12920:93;:::i;:::-;13038:2;13033:3;13029:12;13022:19;;12681:366;;;:::o;13053:::-;13195:3;13216:67;13280:2;13275:3;13216:67;:::i;:::-;13209:74;;13292:93;13381:3;13292:93;:::i;:::-;13410:2;13405:3;13401:12;13394:19;;13053:366;;;:::o;13425:::-;13567:3;13588:67;13652:2;13647:3;13588:67;:::i;:::-;13581:74;;13664:93;13753:3;13664:93;:::i;:::-;13782:2;13777:3;13773:12;13766:19;;13425:366;;;:::o;13797:::-;13939:3;13960:67;14024:2;14019:3;13960:67;:::i;:::-;13953:74;;14036:93;14125:3;14036:93;:::i;:::-;14154:2;14149:3;14145:12;14138:19;;13797:366;;;:::o;14169:::-;14311:3;14332:67;14396:2;14391:3;14332:67;:::i;:::-;14325:74;;14408:93;14497:3;14408:93;:::i;:::-;14526:2;14521:3;14517:12;14510:19;;14169:366;;;:::o;14541:::-;14683:3;14704:67;14768:2;14763:3;14704:67;:::i;:::-;14697:74;;14780:93;14869:3;14780:93;:::i;:::-;14898:2;14893:3;14889:12;14882:19;;14541:366;;;:::o;14913:::-;15055:3;15076:67;15140:2;15135:3;15076:67;:::i;:::-;15069:74;;15152:93;15241:3;15152:93;:::i;:::-;15270:2;15265:3;15261:12;15254:19;;14913:366;;;:::o;15285:::-;15427:3;15448:67;15512:2;15507:3;15448:67;:::i;:::-;15441:74;;15524:93;15613:3;15524:93;:::i;:::-;15642:2;15637:3;15633:12;15626:19;;15285:366;;;:::o;15657:::-;15799:3;15820:67;15884:2;15879:3;15820:67;:::i;:::-;15813:74;;15896:93;15985:3;15896:93;:::i;:::-;16014:2;16009:3;16005:12;15998:19;;15657:366;;;:::o;16029:::-;16171:3;16192:67;16256:2;16251:3;16192:67;:::i;:::-;16185:74;;16268:93;16357:3;16268:93;:::i;:::-;16386:2;16381:3;16377:12;16370:19;;16029:366;;;:::o;16401:::-;16543:3;16564:67;16628:2;16623:3;16564:67;:::i;:::-;16557:74;;16640:93;16729:3;16640:93;:::i;:::-;16758:2;16753:3;16749:12;16742:19;;16401:366;;;:::o;16773:::-;16915:3;16936:67;17000:2;16995:3;16936:67;:::i;:::-;16929:74;;17012:93;17101:3;17012:93;:::i;:::-;17130:2;17125:3;17121:12;17114:19;;16773:366;;;:::o;17145:::-;17287:3;17308:67;17372:2;17367:3;17308:67;:::i;:::-;17301:74;;17384:93;17473:3;17384:93;:::i;:::-;17502:2;17497:3;17493:12;17486:19;;17145:366;;;:::o;17517:::-;17659:3;17680:67;17744:2;17739:3;17680:67;:::i;:::-;17673:74;;17756:93;17845:3;17756:93;:::i;:::-;17874:2;17869:3;17865:12;17858:19;;17517:366;;;:::o;17889:::-;18031:3;18052:67;18116:2;18111:3;18052:67;:::i;:::-;18045:74;;18128:93;18217:3;18128:93;:::i;:::-;18246:2;18241:3;18237:12;18230:19;;17889:366;;;:::o;18261:::-;18403:3;18424:67;18488:2;18483:3;18424:67;:::i;:::-;18417:74;;18500:93;18589:3;18500:93;:::i;:::-;18618:2;18613:3;18609:12;18602:19;;18261:366;;;:::o;18633:::-;18775:3;18796:67;18860:2;18855:3;18796:67;:::i;:::-;18789:74;;18872:93;18961:3;18872:93;:::i;:::-;18990:2;18985:3;18981:12;18974:19;;18633:366;;;:::o;19005:::-;19147:3;19168:67;19232:2;19227:3;19168:67;:::i;:::-;19161:74;;19244:93;19333:3;19244:93;:::i;:::-;19362:2;19357:3;19353:12;19346:19;;19005:366;;;:::o;19377:::-;19519:3;19540:67;19604:2;19599:3;19540:67;:::i;:::-;19533:74;;19616:93;19705:3;19616:93;:::i;:::-;19734:2;19729:3;19725:12;19718:19;;19377:366;;;:::o;19749:::-;19891:3;19912:67;19976:2;19971:3;19912:67;:::i;:::-;19905:74;;19988:93;20077:3;19988:93;:::i;:::-;20106:2;20101:3;20097:12;20090:19;;19749:366;;;:::o;20121:398::-;20280:3;20301:83;20382:1;20377:3;20301:83;:::i;:::-;20294:90;;20393:93;20482:3;20393:93;:::i;:::-;20511:1;20506:3;20502:11;20495:18;;20121:398;;;:::o;20525:366::-;20667:3;20688:67;20752:2;20747:3;20688:67;:::i;:::-;20681:74;;20764:93;20853:3;20764:93;:::i;:::-;20882:2;20877:3;20873:12;20866:19;;20525:366;;;:::o;20897:::-;21039:3;21060:67;21124:2;21119:3;21060:67;:::i;:::-;21053:74;;21136:93;21225:3;21136:93;:::i;:::-;21254:2;21249:3;21245:12;21238:19;;20897:366;;;:::o;21269:::-;21411:3;21432:67;21496:2;21491:3;21432:67;:::i;:::-;21425:74;;21508:93;21597:3;21508:93;:::i;:::-;21626:2;21621:3;21617:12;21610:19;;21269:366;;;:::o;21641:::-;21783:3;21804:67;21868:2;21863:3;21804:67;:::i;:::-;21797:74;;21880:93;21969:3;21880:93;:::i;:::-;21998:2;21993:3;21989:12;21982:19;;21641:366;;;:::o;22013:108::-;22090:24;22108:5;22090:24;:::i;:::-;22085:3;22078:37;22013:108;;:::o;22127:118::-;22214:24;22232:5;22214:24;:::i;:::-;22209:3;22202:37;22127:118;;:::o;22251:589::-;22476:3;22498:95;22589:3;22580:6;22498:95;:::i;:::-;22491:102;;22610:95;22701:3;22692:6;22610:95;:::i;:::-;22603:102;;22722:92;22810:3;22801:6;22722:92;:::i;:::-;22715:99;;22831:3;22824:10;;22251:589;;;;;;:::o;22846:379::-;23030:3;23052:147;23195:3;23052:147;:::i;:::-;23045:154;;23216:3;23209:10;;22846:379;;;:::o;23231:222::-;23324:4;23362:2;23351:9;23347:18;23339:26;;23375:71;23443:1;23432:9;23428:17;23419:6;23375:71;:::i;:::-;23231:222;;;;:::o;23459:640::-;23654:4;23692:3;23681:9;23677:19;23669:27;;23706:71;23774:1;23763:9;23759:17;23750:6;23706:71;:::i;:::-;23787:72;23855:2;23844:9;23840:18;23831:6;23787:72;:::i;:::-;23869;23937:2;23926:9;23922:18;23913:6;23869:72;:::i;:::-;23988:9;23982:4;23978:20;23973:2;23962:9;23958:18;23951:48;24016:76;24087:4;24078:6;24016:76;:::i;:::-;24008:84;;23459:640;;;;;;;:::o;24105:373::-;24248:4;24286:2;24275:9;24271:18;24263:26;;24335:9;24329:4;24325:20;24321:1;24310:9;24306:17;24299:47;24363:108;24466:4;24457:6;24363:108;:::i;:::-;24355:116;;24105:373;;;;:::o;24484:210::-;24571:4;24609:2;24598:9;24594:18;24586:26;;24622:65;24684:1;24673:9;24669:17;24660:6;24622:65;:::i;:::-;24484:210;;;;:::o;24700:313::-;24813:4;24851:2;24840:9;24836:18;24828:26;;24900:9;24894:4;24890:20;24886:1;24875:9;24871:17;24864:47;24928:78;25001:4;24992:6;24928:78;:::i;:::-;24920:86;;24700:313;;;;:::o;25019:419::-;25185:4;25223:2;25212:9;25208:18;25200:26;;25272:9;25266:4;25262:20;25258:1;25247:9;25243:17;25236:47;25300:131;25426:4;25300:131;:::i;:::-;25292:139;;25019:419;;;:::o;25444:::-;25610:4;25648:2;25637:9;25633:18;25625:26;;25697:9;25691:4;25687:20;25683:1;25672:9;25668:17;25661:47;25725:131;25851:4;25725:131;:::i;:::-;25717:139;;25444:419;;;:::o;25869:::-;26035:4;26073:2;26062:9;26058:18;26050:26;;26122:9;26116:4;26112:20;26108:1;26097:9;26093:17;26086:47;26150:131;26276:4;26150:131;:::i;:::-;26142:139;;25869:419;;;:::o;26294:::-;26460:4;26498:2;26487:9;26483:18;26475:26;;26547:9;26541:4;26537:20;26533:1;26522:9;26518:17;26511:47;26575:131;26701:4;26575:131;:::i;:::-;26567:139;;26294:419;;;:::o;26719:::-;26885:4;26923:2;26912:9;26908:18;26900:26;;26972:9;26966:4;26962:20;26958:1;26947:9;26943:17;26936:47;27000:131;27126:4;27000:131;:::i;:::-;26992:139;;26719:419;;;:::o;27144:::-;27310:4;27348:2;27337:9;27333:18;27325:26;;27397:9;27391:4;27387:20;27383:1;27372:9;27368:17;27361:47;27425:131;27551:4;27425:131;:::i;:::-;27417:139;;27144:419;;;:::o;27569:::-;27735:4;27773:2;27762:9;27758:18;27750:26;;27822:9;27816:4;27812:20;27808:1;27797:9;27793:17;27786:47;27850:131;27976:4;27850:131;:::i;:::-;27842:139;;27569:419;;;:::o;27994:::-;28160:4;28198:2;28187:9;28183:18;28175:26;;28247:9;28241:4;28237:20;28233:1;28222:9;28218:17;28211:47;28275:131;28401:4;28275:131;:::i;:::-;28267:139;;27994:419;;;:::o;28419:::-;28585:4;28623:2;28612:9;28608:18;28600:26;;28672:9;28666:4;28662:20;28658:1;28647:9;28643:17;28636:47;28700:131;28826:4;28700:131;:::i;:::-;28692:139;;28419:419;;;:::o;28844:::-;29010:4;29048:2;29037:9;29033:18;29025:26;;29097:9;29091:4;29087:20;29083:1;29072:9;29068:17;29061:47;29125:131;29251:4;29125:131;:::i;:::-;29117:139;;28844:419;;;:::o;29269:::-;29435:4;29473:2;29462:9;29458:18;29450:26;;29522:9;29516:4;29512:20;29508:1;29497:9;29493:17;29486:47;29550:131;29676:4;29550:131;:::i;:::-;29542:139;;29269:419;;;:::o;29694:::-;29860:4;29898:2;29887:9;29883:18;29875:26;;29947:9;29941:4;29937:20;29933:1;29922:9;29918:17;29911:47;29975:131;30101:4;29975:131;:::i;:::-;29967:139;;29694:419;;;:::o;30119:::-;30285:4;30323:2;30312:9;30308:18;30300:26;;30372:9;30366:4;30362:20;30358:1;30347:9;30343:17;30336:47;30400:131;30526:4;30400:131;:::i;:::-;30392:139;;30119:419;;;:::o;30544:::-;30710:4;30748:2;30737:9;30733:18;30725:26;;30797:9;30791:4;30787:20;30783:1;30772:9;30768:17;30761:47;30825:131;30951:4;30825:131;:::i;:::-;30817:139;;30544:419;;;:::o;30969:::-;31135:4;31173:2;31162:9;31158:18;31150:26;;31222:9;31216:4;31212:20;31208:1;31197:9;31193:17;31186:47;31250:131;31376:4;31250:131;:::i;:::-;31242:139;;30969:419;;;:::o;31394:::-;31560:4;31598:2;31587:9;31583:18;31575:26;;31647:9;31641:4;31637:20;31633:1;31622:9;31618:17;31611:47;31675:131;31801:4;31675:131;:::i;:::-;31667:139;;31394:419;;;:::o;31819:::-;31985:4;32023:2;32012:9;32008:18;32000:26;;32072:9;32066:4;32062:20;32058:1;32047:9;32043:17;32036:47;32100:131;32226:4;32100:131;:::i;:::-;32092:139;;31819:419;;;:::o;32244:::-;32410:4;32448:2;32437:9;32433:18;32425:26;;32497:9;32491:4;32487:20;32483:1;32472:9;32468:17;32461:47;32525:131;32651:4;32525:131;:::i;:::-;32517:139;;32244:419;;;:::o;32669:::-;32835:4;32873:2;32862:9;32858:18;32850:26;;32922:9;32916:4;32912:20;32908:1;32897:9;32893:17;32886:47;32950:131;33076:4;32950:131;:::i;:::-;32942:139;;32669:419;;;:::o;33094:::-;33260:4;33298:2;33287:9;33283:18;33275:26;;33347:9;33341:4;33337:20;33333:1;33322:9;33318:17;33311:47;33375:131;33501:4;33375:131;:::i;:::-;33367:139;;33094:419;;;:::o;33519:::-;33685:4;33723:2;33712:9;33708:18;33700:26;;33772:9;33766:4;33762:20;33758:1;33747:9;33743:17;33736:47;33800:131;33926:4;33800:131;:::i;:::-;33792:139;;33519:419;;;:::o;33944:::-;34110:4;34148:2;34137:9;34133:18;34125:26;;34197:9;34191:4;34187:20;34183:1;34172:9;34168:17;34161:47;34225:131;34351:4;34225:131;:::i;:::-;34217:139;;33944:419;;;:::o;34369:::-;34535:4;34573:2;34562:9;34558:18;34550:26;;34622:9;34616:4;34612:20;34608:1;34597:9;34593:17;34586:47;34650:131;34776:4;34650:131;:::i;:::-;34642:139;;34369:419;;;:::o;34794:::-;34960:4;34998:2;34987:9;34983:18;34975:26;;35047:9;35041:4;35037:20;35033:1;35022:9;35018:17;35011:47;35075:131;35201:4;35075:131;:::i;:::-;35067:139;;34794:419;;;:::o;35219:::-;35385:4;35423:2;35412:9;35408:18;35400:26;;35472:9;35466:4;35462:20;35458:1;35447:9;35443:17;35436:47;35500:131;35626:4;35500:131;:::i;:::-;35492:139;;35219:419;;;:::o;35644:222::-;35737:4;35775:2;35764:9;35760:18;35752:26;;35788:71;35856:1;35845:9;35841:17;35832:6;35788:71;:::i;:::-;35644:222;;;;:::o;35872:129::-;35906:6;35933:20;;:::i;:::-;35923:30;;35962:33;35990:4;35982:6;35962:33;:::i;:::-;35872:129;;;:::o;36007:75::-;36040:6;36073:2;36067:9;36057:19;;36007:75;:::o;36088:307::-;36149:4;36239:18;36231:6;36228:30;36225:56;;;36261:18;;:::i;:::-;36225:56;36299:29;36321:6;36299:29;:::i;:::-;36291:37;;36383:4;36377;36373:15;36365:23;;36088:307;;;:::o;36401:308::-;36463:4;36553:18;36545:6;36542:30;36539:56;;;36575:18;;:::i;:::-;36539:56;36613:29;36635:6;36613:29;:::i;:::-;36605:37;;36697:4;36691;36687:15;36679:23;;36401:308;;;:::o;36715:132::-;36782:4;36805:3;36797:11;;36835:4;36830:3;36826:14;36818:22;;36715:132;;;:::o;36853:141::-;36902:4;36925:3;36917:11;;36948:3;36945:1;36938:14;36982:4;36979:1;36969:18;36961:26;;36853:141;;;:::o;37000:114::-;37067:6;37101:5;37095:12;37085:22;;37000:114;;;:::o;37120:98::-;37171:6;37205:5;37199:12;37189:22;;37120:98;;;:::o;37224:99::-;37276:6;37310:5;37304:12;37294:22;;37224:99;;;:::o;37329:113::-;37399:4;37431;37426:3;37422:14;37414:22;;37329:113;;;:::o;37448:184::-;37547:11;37581:6;37576:3;37569:19;37621:4;37616:3;37612:14;37597:29;;37448:184;;;;:::o;37638:168::-;37721:11;37755:6;37750:3;37743:19;37795:4;37790:3;37786:14;37771:29;;37638:168;;;;:::o;37812:147::-;37913:11;37950:3;37935:18;;37812:147;;;;:::o;37965:169::-;38049:11;38083:6;38078:3;38071:19;38123:4;38118:3;38114:14;38099:29;;37965:169;;;;:::o;38140:148::-;38242:11;38279:3;38264:18;;38140:148;;;;:::o;38294:305::-;38334:3;38353:20;38371:1;38353:20;:::i;:::-;38348:25;;38387:20;38405:1;38387:20;:::i;:::-;38382:25;;38541:1;38473:66;38469:74;38466:1;38463:81;38460:107;;;38547:18;;:::i;:::-;38460:107;38591:1;38588;38584:9;38577:16;;38294:305;;;;:::o;38605:185::-;38645:1;38662:20;38680:1;38662:20;:::i;:::-;38657:25;;38696:20;38714:1;38696:20;:::i;:::-;38691:25;;38735:1;38725:35;;38740:18;;:::i;:::-;38725:35;38782:1;38779;38775:9;38770:14;;38605:185;;;;:::o;38796:348::-;38836:7;38859:20;38877:1;38859:20;:::i;:::-;38854:25;;38893:20;38911:1;38893:20;:::i;:::-;38888:25;;39081:1;39013:66;39009:74;39006:1;39003:81;38998:1;38991:9;38984:17;38980:105;38977:131;;;39088:18;;:::i;:::-;38977:131;39136:1;39133;39129:9;39118:20;;38796:348;;;;:::o;39150:191::-;39190:4;39210:20;39228:1;39210:20;:::i;:::-;39205:25;;39244:20;39262:1;39244:20;:::i;:::-;39239:25;;39283:1;39280;39277:8;39274:34;;;39288:18;;:::i;:::-;39274:34;39333:1;39330;39326:9;39318:17;;39150:191;;;;:::o;39347:96::-;39384:7;39413:24;39431:5;39413:24;:::i;:::-;39402:35;;39347:96;;;:::o;39449:90::-;39483:7;39526:5;39519:13;39512:21;39501:32;;39449:90;;;:::o;39545:149::-;39581:7;39621:66;39614:5;39610:78;39599:89;;39545:149;;;:::o;39700:126::-;39737:7;39777:42;39770:5;39766:54;39755:65;;39700:126;;;:::o;39832:77::-;39869:7;39898:5;39887:16;;39832:77;;;:::o;39915:154::-;39999:6;39994:3;39989;39976:30;40061:1;40052:6;40047:3;40043:16;40036:27;39915:154;;;:::o;40075:307::-;40143:1;40153:113;40167:6;40164:1;40161:13;40153:113;;;40252:1;40247:3;40243:11;40237:18;40233:1;40228:3;40224:11;40217:39;40189:2;40186:1;40182:10;40177:15;;40153:113;;;40284:6;40281:1;40278:13;40275:101;;;40364:1;40355:6;40350:3;40346:16;40339:27;40275:101;40124:258;40075:307;;;:::o;40388:320::-;40432:6;40469:1;40463:4;40459:12;40449:22;;40516:1;40510:4;40506:12;40537:18;40527:81;;40593:4;40585:6;40581:17;40571:27;;40527:81;40655:2;40647:6;40644:14;40624:18;40621:38;40618:84;;;40674:18;;:::i;:::-;40618:84;40439:269;40388:320;;;:::o;40714:281::-;40797:27;40819:4;40797:27;:::i;:::-;40789:6;40785:40;40927:6;40915:10;40912:22;40891:18;40879:10;40876:34;40873:62;40870:88;;;40938:18;;:::i;:::-;40870:88;40978:10;40974:2;40967:22;40757:238;40714:281;;:::o;41001:233::-;41040:3;41063:24;41081:5;41063:24;:::i;:::-;41054:33;;41109:66;41102:5;41099:77;41096:103;;;41179:18;;:::i;:::-;41096:103;41226:1;41219:5;41215:13;41208:20;;41001:233;;;:::o;41240:176::-;41272:1;41289:20;41307:1;41289:20;:::i;:::-;41284:25;;41323:20;41341:1;41323:20;:::i;:::-;41318:25;;41362:1;41352:35;;41367:18;;:::i;:::-;41352:35;41408:1;41405;41401:9;41396:14;;41240:176;;;;:::o;41422:180::-;41470:77;41467:1;41460:88;41567:4;41564:1;41557:15;41591:4;41588:1;41581:15;41608:180;41656:77;41653:1;41646:88;41753:4;41750:1;41743:15;41777:4;41774:1;41767:15;41794:180;41842:77;41839:1;41832:88;41939:4;41936:1;41929:15;41963:4;41960:1;41953:15;41980:180;42028:77;42025:1;42018:88;42125:4;42122:1;42115:15;42149:4;42146:1;42139:15;42166:180;42214:77;42211:1;42204:88;42311:4;42308:1;42301:15;42335:4;42332:1;42325:15;42352:117;42461:1;42458;42451:12;42475:117;42584:1;42581;42574:12;42598:117;42707:1;42704;42697:12;42721:117;42830:1;42827;42820:12;42844:117;42953:1;42950;42943:12;42967:117;43076:1;43073;43066:12;43090:102;43131:6;43182:2;43178:7;43173:2;43166:5;43162:14;43158:28;43148:38;;43090:102;;;:::o;43198:237::-;43338:34;43334:1;43326:6;43322:14;43315:58;43407:20;43402:2;43394:6;43390:15;43383:45;43198:237;:::o;43441:225::-;43581:34;43577:1;43569:6;43565:14;43558:58;43650:8;43645:2;43637:6;43633:15;43626:33;43441:225;:::o;43672:178::-;43812:30;43808:1;43800:6;43796:14;43789:54;43672:178;:::o;43856:223::-;43996:34;43992:1;43984:6;43980:14;43973:58;44065:6;44060:2;44052:6;44048:15;44041:31;43856:223;:::o;44085:175::-;44225:27;44221:1;44213:6;44209:14;44202:51;44085:175;:::o;44266:227::-;44406:34;44402:1;44394:6;44390:14;44383:58;44475:10;44470:2;44462:6;44458:15;44451:35;44266:227;:::o;44499:231::-;44639:34;44635:1;44627:6;44623:14;44616:58;44708:14;44703:2;44695:6;44691:15;44684:39;44499:231;:::o;44736:243::-;44876:34;44872:1;44864:6;44860:14;44853:58;44945:26;44940:2;44932:6;44928:15;44921:51;44736:243;:::o;44985:229::-;45125:34;45121:1;45113:6;45109:14;45102:58;45194:12;45189:2;45181:6;45177:15;45170:37;44985:229;:::o;45220:228::-;45360:34;45356:1;45348:6;45344:14;45337:58;45429:11;45424:2;45416:6;45412:15;45405:36;45220:228;:::o;45454:172::-;45594:24;45590:1;45582:6;45578:14;45571:48;45454:172;:::o;45632:223::-;45772:34;45768:1;45760:6;45756:14;45749:58;45841:6;45836:2;45828:6;45824:15;45817:31;45632:223;:::o;45861:182::-;46001:34;45997:1;45989:6;45985:14;45978:58;45861:182;:::o;46049:231::-;46189:34;46185:1;46177:6;46173:14;46166:58;46258:14;46253:2;46245:6;46241:15;46234:39;46049:231;:::o;46286:182::-;46426:34;46422:1;46414:6;46410:14;46403:58;46286:182;:::o;46474:173::-;46614:25;46610:1;46602:6;46598:14;46591:49;46474:173;:::o;46653:228::-;46793:34;46789:1;46781:6;46777:14;46770:58;46862:11;46857:2;46849:6;46845:15;46838:36;46653:228;:::o;46887:180::-;47027:32;47023:1;47015:6;47011:14;47004:56;46887:180;:::o;47073:234::-;47213:34;47209:1;47201:6;47197:14;47190:58;47282:17;47277:2;47269:6;47265:15;47258:42;47073:234;:::o;47313:220::-;47453:34;47449:1;47441:6;47437:14;47430:58;47522:3;47517:2;47509:6;47505:15;47498:28;47313:220;:::o;47539:223::-;47679:34;47675:1;47667:6;47663:14;47656:58;47748:6;47743:2;47735:6;47731:15;47724:31;47539:223;:::o;47768:114::-;;:::o;47888:170::-;48028:22;48024:1;48016:6;48012:14;48005:46;47888:170;:::o;48064:168::-;48204:20;48200:1;48192:6;48188:14;48181:44;48064:168;:::o;48238:236::-;48378:34;48374:1;48366:6;48362:14;48355:58;48447:19;48442:2;48434:6;48430:15;48423:44;48238:236;:::o;48480:173::-;48620:25;48616:1;48608:6;48604:14;48597:49;48480:173;:::o;48659:122::-;48732:24;48750:5;48732:24;:::i;:::-;48725:5;48722:35;48712:63;;48771:1;48768;48761:12;48712:63;48659:122;:::o;48787:116::-;48857:21;48872:5;48857:21;:::i;:::-;48850:5;48847:32;48837:60;;48893:1;48890;48883:12;48837:60;48787:116;:::o;48909:120::-;48981:23;48998:5;48981:23;:::i;:::-;48974:5;48971:34;48961:62;;49019:1;49016;49009:12;48961:62;48909:120;:::o;49035:122::-;49108:24;49126:5;49108:24;:::i;:::-;49101:5;49098:35;49088:63;;49147:1;49144;49137:12;49088:63;49035:122;:::o
Swarm Source
ipfs://b91a9e5d7d864fb0f35b513630f2e5071761c014cc9071022b131a937bd914ce
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A contract address hosts a smart contract, which is a set of code stored on the blockchain that runs when predetermined conditions are met. Learn more about addresses in our Knowledge Base.