Overview
AVAX Balance
AVAX Value
$0.00More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 2,600 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Safe Transfer Fr... | 55295290 | 109 days ago | IN | 0 AVAX | 0.00024368 | ||||
Set Approval For... | 54229445 | 132 days ago | IN | 0 AVAX | 0.00078455 | ||||
Set Approval For... | 53782319 | 142 days ago | IN | 0 AVAX | 0.0012358 | ||||
Set Approval For... | 51875553 | 188 days ago | IN | 0 AVAX | 0.00078485 | ||||
Set Approval For... | 46913278 | 307 days ago | IN | 0 AVAX | 0.00130389 | ||||
Set Approval For... | 45727742 | 336 days ago | IN | 0 AVAX | 0.00078455 | ||||
Set Approval For... | 45469689 | 342 days ago | IN | 0 AVAX | 0.00128124 | ||||
Set Approval For... | 45101741 | 351 days ago | IN | 0 AVAX | 0.00123802 | ||||
Set Approval For... | 45090768 | 352 days ago | IN | 0 AVAX | 0.00078455 | ||||
Safe Transfer Fr... | 44892462 | 356 days ago | IN | 0 AVAX | 0.0025847 | ||||
Set Approval For... | 44749046 | 360 days ago | IN | 0 AVAX | 0.00123802 | ||||
Set Approval For... | 44739929 | 360 days ago | IN | 0 AVAX | 0.00139902 | ||||
Set Approval For... | 44082723 | 376 days ago | IN | 0 AVAX | 0.00123802 | ||||
Set Approval For... | 43984025 | 378 days ago | IN | 0 AVAX | 0.00128474 | ||||
Set Approval For... | 42673688 | 409 days ago | IN | 0 AVAX | 0.0012358 | ||||
Set Approval For... | 41884191 | 428 days ago | IN | 0 AVAX | 0.00128474 | ||||
Set Approval For... | 40325116 | 465 days ago | IN | 0 AVAX | 0.00121466 | ||||
Set Approval For... | 40067351 | 471 days ago | IN | 0 AVAX | 0.00123802 | ||||
Set Approval For... | 39963929 | 473 days ago | IN | 0 AVAX | 0.0012358 | ||||
Set Approval For... | 39886767 | 475 days ago | IN | 0 AVAX | 0.00123802 | ||||
Set Approval For... | 39595632 | 482 days ago | IN | 0 AVAX | 0.0012358 | ||||
Set Approval For... | 37903522 | 522 days ago | IN | 0 AVAX | 0.00078485 | ||||
Set Approval For... | 36129089 | 564 days ago | IN | 0 AVAX | 0.00078455 | ||||
Transfer From | 35276664 | 584 days ago | IN | 0 AVAX | 0.00365685 | ||||
Set Approval For... | 35276656 | 584 days ago | IN | 0 AVAX | 0.0014001 |
Latest 1 internal transaction
Parent Transaction Hash | Block | From | To | |||
---|---|---|---|---|---|---|
9504353 | 1196 days ago | 750 AVAX |
Loading...
Loading
Contract Name:
Avarobots
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at snowscan.xyz on 2022-01-08 */ // File: @openzeppelin/contracts/utils/math/SafeMath.sol // OpenZeppelin Contracts v4.4.1 (utils/math/SafeMath.sol) pragma solidity ^0.8.0; // CAUTION // This version of SafeMath should only be used with Solidity 0.8 or later, // because it relies on the compiler's built in overflow checks. /** * @dev Wrappers over Solidity's arithmetic operations. * * NOTE: `SafeMath` is generally not needed starting with Solidity 0.8, since the compiler * now has built in overflow checking. */ library SafeMath { /** * @dev Returns the addition of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryAdd(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { uint256 c = a + b; if (c < a) return (false, 0); return (true, c); } } /** * @dev Returns the substraction of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function trySub(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b > a) return (false, 0); return (true, a - b); } } /** * @dev Returns the multiplication of two unsigned integers, with an overflow flag. * * _Available since v3.4._ */ function tryMul(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { // Gas optimization: this is cheaper than requiring 'a' not being zero, but the // benefit is lost if 'b' is also tested. // See: https://github.com/OpenZeppelin/openzeppelin-contracts/pull/522 if (a == 0) return (true, 0); uint256 c = a * b; if (c / a != b) return (false, 0); return (true, c); } } /** * @dev Returns the division of two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryDiv(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a / b); } } /** * @dev Returns the remainder of dividing two unsigned integers, with a division by zero flag. * * _Available since v3.4._ */ function tryMod(uint256 a, uint256 b) internal pure returns (bool, uint256) { unchecked { if (b == 0) return (false, 0); return (true, a % b); } } /** * @dev Returns the addition of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `+` operator. * * Requirements: * * - Addition cannot overflow. */ function add(uint256 a, uint256 b) internal pure returns (uint256) { return a + b; } /** * @dev Returns the subtraction of two unsigned integers, reverting on * overflow (when the result is negative). * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub(uint256 a, uint256 b) internal pure returns (uint256) { return a - b; } /** * @dev Returns the multiplication of two unsigned integers, reverting on * overflow. * * Counterpart to Solidity's `*` operator. * * Requirements: * * - Multiplication cannot overflow. */ function mul(uint256 a, uint256 b) internal pure returns (uint256) { return a * b; } /** * @dev Returns the integer division of two unsigned integers, reverting on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. * * Requirements: * * - The divisor cannot be zero. */ function div(uint256 a, uint256 b) internal pure returns (uint256) { return a / b; } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting when dividing by zero. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod(uint256 a, uint256 b) internal pure returns (uint256) { return a % b; } /** * @dev Returns the subtraction of two unsigned integers, reverting with custom message on * overflow (when the result is negative). * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {trySub}. * * Counterpart to Solidity's `-` operator. * * Requirements: * * - Subtraction cannot overflow. */ function sub( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b <= a, errorMessage); return a - b; } } /** * @dev Returns the integer division of two unsigned integers, reverting with custom message on * division by zero. The result is rounded towards zero. * * Counterpart to Solidity's `/` operator. Note: this function uses a * `revert` opcode (which leaves remaining gas untouched) while Solidity * uses an invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function div( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a / b; } } /** * @dev Returns the remainder of dividing two unsigned integers. (unsigned integer modulo), * reverting with custom message when dividing by zero. * * CAUTION: This function is deprecated because it requires allocating memory for the error * message unnecessarily. For custom revert reasons use {tryMod}. * * Counterpart to Solidity's `%` operator. This function uses a `revert` * opcode (which leaves remaining gas untouched) while Solidity uses an * invalid opcode to revert (consuming all remaining gas). * * Requirements: * * - The divisor cannot be zero. */ function mod( uint256 a, uint256 b, string memory errorMessage ) internal pure returns (uint256) { unchecked { require(b > 0, errorMessage); return a % b; } } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts v4.4.1 (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; /** * @dev Converts a `uint256` to its ASCII `string` decimal representation. */ function toString(uint256 value) internal pure returns (string memory) { // Inspired by OraclizeAPI's implementation - MIT licence // https://github.com/oraclize/ethereum-api/blob/b42146b063c7d6ee1358846c198246239e9360e8/oraclizeAPI_0.4.25.sol if (value == 0) { return "0"; } uint256 temp = value; uint256 digits; while (temp != 0) { digits++; temp /= 10; } bytes memory buffer = new bytes(digits); while (value != 0) { digits -= 1; buffer[digits] = bytes1(uint8(48 + uint256(value % 10))); value /= 10; } return string(buffer); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation. */ function toHexString(uint256 value) internal pure returns (string memory) { if (value == 0) { return "0x00"; } uint256 temp = value; uint256 length = 0; while (temp != 0) { length++; temp >>= 8; } return toHexString(value, length); } /** * @dev Converts a `uint256` to its ASCII `string` hexadecimal representation with fixed length. */ function toHexString(uint256 value, uint256 length) internal pure returns (string memory) { bytes memory buffer = new bytes(2 * length + 2); buffer[0] = "0"; buffer[1] = "x"; for (uint256 i = 2 * length + 1; i > 1; --i) { buffer[i] = _HEX_SYMBOLS[value & 0xf]; value >>= 4; } require(value == 0, "Strings: hex length insufficient"); return string(buffer); } } // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts v4.4.1 (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { require(owner() == _msgSender(), "Ownable: caller is not the owner"); _; } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts v4.4.1 (utils/Address.sol) pragma solidity ^0.8.0; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize, which returns 0 for contracts in // construction, since the code is only stored at the end of the // constructor execution. uint256 size; assembly { size := extcodesize(account) } return size > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // File: @openzeppelin/contracts/token/ERC721/IERC721Receiver.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721Receiver.sol) pragma solidity ^0.8.0; /** * @title ERC721 token receiver interface * @dev Interface for any contract that wants to support safeTransfers * from ERC721 asset contracts. */ interface IERC721Receiver { /** * @dev Whenever an {IERC721} `tokenId` token is transferred to this contract via {IERC721-safeTransferFrom} * by `operator` from `from`, this function is called. * * It must return its Solidity selector to confirm the token transfer. * If any other value is returned or the interface is not implemented by the recipient, the transfer will be reverted. * * The selector can be obtained in Solidity with `IERC721.onERC721Received.selector`. */ function onERC721Received( address operator, address from, uint256 tokenId, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/utils/introspection/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC721/IERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/IERC721.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC721 compliant contract. */ interface IERC721 is IERC165 { /** * @dev Emitted when `tokenId` token is transferred from `from` to `to`. */ event Transfer(address indexed from, address indexed to, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables `approved` to manage the `tokenId` token. */ event Approval(address indexed owner, address indexed approved, uint256 indexed tokenId); /** * @dev Emitted when `owner` enables or disables (`approved`) `operator` to manage all of its assets. */ event ApprovalForAll(address indexed owner, address indexed operator, bool approved); /** * @dev Returns the number of tokens in ``owner``'s account. */ function balanceOf(address owner) external view returns (uint256 balance); /** * @dev Returns the owner of the `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function ownerOf(uint256 tokenId) external view returns (address owner); /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be have been allowed to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Transfers `tokenId` token from `from` to `to`. * * WARNING: Usage of this method is discouraged, use {safeTransferFrom} whenever possible. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * * Emits a {Transfer} event. */ function transferFrom( address from, address to, uint256 tokenId ) external; /** * @dev Gives permission to `to` to transfer `tokenId` token to another account. * The approval is cleared when the token is transferred. * * Only a single account can be approved at a time, so approving the zero address clears previous approvals. * * Requirements: * * - The caller must own the token or be an approved operator. * - `tokenId` must exist. * * Emits an {Approval} event. */ function approve(address to, uint256 tokenId) external; /** * @dev Returns the account approved for `tokenId` token. * * Requirements: * * - `tokenId` must exist. */ function getApproved(uint256 tokenId) external view returns (address operator); /** * @dev Approve or remove `operator` as an operator for the caller. * Operators can call {transferFrom} or {safeTransferFrom} for any token owned by the caller. * * Requirements: * * - The `operator` cannot be the caller. * * Emits an {ApprovalForAll} event. */ function setApprovalForAll(address operator, bool _approved) external; /** * @dev Returns if the `operator` is allowed to manage all of the assets of `owner`. * * See {setApprovalForAll} */ function isApprovedForAll(address owner, address operator) external view returns (bool); /** * @dev Safely transfers `tokenId` token from `from` to `to`. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If the caller is not `from`, it must be approved to move this token by either {approve} or {setApprovalForAll}. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional enumeration extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Enumerable is IERC721 { /** * @dev Returns the total amount of tokens stored by the contract. */ function totalSupply() external view returns (uint256); /** * @dev Returns a token ID owned by `owner` at a given `index` of its token list. * Use along with {balanceOf} to enumerate all of ``owner``'s tokens. */ function tokenOfOwnerByIndex(address owner, uint256 index) external view returns (uint256 tokenId); /** * @dev Returns a token ID at a given `index` of all the tokens stored by the contract. * Use along with {totalSupply} to enumerate all tokens. */ function tokenByIndex(uint256 index) external view returns (uint256); } // File: @openzeppelin/contracts/token/ERC721/extensions/IERC721Metadata.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/IERC721Metadata.sol) pragma solidity ^0.8.0; /** * @title ERC-721 Non-Fungible Token Standard, optional metadata extension * @dev See https://eips.ethereum.org/EIPS/eip-721 */ interface IERC721Metadata is IERC721 { /** * @dev Returns the token collection name. */ function name() external view returns (string memory); /** * @dev Returns the token collection symbol. */ function symbol() external view returns (string memory); /** * @dev Returns the Uniform Resource Identifier (URI) for `tokenId` token. */ function tokenURI(uint256 tokenId) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC721/ERC721.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/ERC721.sol) pragma solidity ^0.8.0; /** * @dev Implementation of https://eips.ethereum.org/EIPS/eip-721[ERC721] Non-Fungible Token Standard, including * the Metadata extension, but not including the Enumerable extension, which is available separately as * {ERC721Enumerable}. */ contract ERC721 is Context, ERC165, IERC721, IERC721Metadata { using Address for address; using Strings for uint256; // Token name string private _name; // Token symbol string private _symbol; // Mapping from token ID to owner address mapping(uint256 => address) private _owners; // Mapping owner address to token count mapping(address => uint256) private _balances; // Mapping from token ID to approved address mapping(uint256 => address) private _tokenApprovals; // Mapping from owner to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; /** * @dev Initializes the contract by setting a `name` and a `symbol` to the token collection. */ constructor(string memory name_, string memory symbol_) { _name = name_; _symbol = symbol_; } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC721).interfaceId || interfaceId == type(IERC721Metadata).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721-balanceOf}. */ function balanceOf(address owner) public view virtual override returns (uint256) { require(owner != address(0), "ERC721: balance query for the zero address"); return _balances[owner]; } /** * @dev See {IERC721-ownerOf}. */ function ownerOf(uint256 tokenId) public view virtual override returns (address) { address owner = _owners[tokenId]; require(owner != address(0), "ERC721: owner query for nonexistent token"); return owner; } /** * @dev See {IERC721Metadata-name}. */ function name() public view virtual override returns (string memory) { return _name; } /** * @dev See {IERC721Metadata-symbol}. */ function symbol() public view virtual override returns (string memory) { return _symbol; } /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721Metadata: URI query for nonexistent token"); string memory baseURI = _baseURI(); return bytes(baseURI).length > 0 ? string(abi.encodePacked(baseURI, tokenId.toString())) : ""; } /** * @dev Base URI for computing {tokenURI}. If set, the resulting URI for each * token will be the concatenation of the `baseURI` and the `tokenId`. Empty * by default, can be overriden in child contracts. */ function _baseURI() internal view virtual returns (string memory) { return ""; } /** * @dev See {IERC721-approve}. */ function approve(address to, uint256 tokenId) public virtual override { address owner = ERC721.ownerOf(tokenId); require(to != owner, "ERC721: approval to current owner"); require( _msgSender() == owner || isApprovedForAll(owner, _msgSender()), "ERC721: approve caller is not owner nor approved for all" ); _approve(to, tokenId); } /** * @dev See {IERC721-getApproved}. */ function getApproved(uint256 tokenId) public view virtual override returns (address) { require(_exists(tokenId), "ERC721: approved query for nonexistent token"); return _tokenApprovals[tokenId]; } /** * @dev See {IERC721-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC721-isApprovedForAll}. */ function isApprovedForAll(address owner, address operator) public view virtual override returns (bool) { return _operatorApprovals[owner][operator]; } /** * @dev See {IERC721-transferFrom}. */ function transferFrom( address from, address to, uint256 tokenId ) public virtual override { //solhint-disable-next-line max-line-length require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _transfer(from, to, tokenId); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId ) public virtual override { safeTransferFrom(from, to, tokenId, ""); } /** * @dev See {IERC721-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public virtual override { require(_isApprovedOrOwner(_msgSender(), tokenId), "ERC721: transfer caller is not owner nor approved"); _safeTransfer(from, to, tokenId, _data); } /** * @dev Safely transfers `tokenId` token from `from` to `to`, checking first that contract recipients * are aware of the ERC721 protocol to prevent tokens from being forever locked. * * `_data` is additional data, it has no specified format and it is sent in call to `to`. * * This internal function is equivalent to {safeTransferFrom}, and can be used to e.g. * implement alternative mechanisms to perform token transfer, such as signature-based. * * Requirements: * * - `from` cannot be the zero address. * - `to` cannot be the zero address. * - `tokenId` token must exist and be owned by `from`. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeTransfer( address from, address to, uint256 tokenId, bytes memory _data ) internal virtual { _transfer(from, to, tokenId); require(_checkOnERC721Received(from, to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer"); } /** * @dev Returns whether `tokenId` exists. * * Tokens can be managed by their owner or approved accounts via {approve} or {setApprovalForAll}. * * Tokens start existing when they are minted (`_mint`), * and stop existing when they are burned (`_burn`). */ function _exists(uint256 tokenId) internal view virtual returns (bool) { return _owners[tokenId] != address(0); } /** * @dev Returns whether `spender` is allowed to manage `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _isApprovedOrOwner(address spender, uint256 tokenId) internal view virtual returns (bool) { require(_exists(tokenId), "ERC721: operator query for nonexistent token"); address owner = ERC721.ownerOf(tokenId); return (spender == owner || getApproved(tokenId) == spender || isApprovedForAll(owner, spender)); } /** * @dev Safely mints `tokenId` and transfers it to `to`. * * Requirements: * * - `tokenId` must not exist. * - If `to` refers to a smart contract, it must implement {IERC721Receiver-onERC721Received}, which is called upon a safe transfer. * * Emits a {Transfer} event. */ function _safeMint(address to, uint256 tokenId) internal virtual { _safeMint(to, tokenId, ""); } /** * @dev Same as {xref-ERC721-_safeMint-address-uint256-}[`_safeMint`], with an additional `data` parameter which is * forwarded in {IERC721Receiver-onERC721Received} to contract recipients. */ function _safeMint( address to, uint256 tokenId, bytes memory _data ) internal virtual { _mint(to, tokenId); require( _checkOnERC721Received(address(0), to, tokenId, _data), "ERC721: transfer to non ERC721Receiver implementer" ); } /** * @dev Mints `tokenId` and transfers it to `to`. * * WARNING: Usage of this method is discouraged, use {_safeMint} whenever possible * * Requirements: * * - `tokenId` must not exist. * - `to` cannot be the zero address. * * Emits a {Transfer} event. */ function _mint(address to, uint256 tokenId) internal virtual { require(to != address(0), "ERC721: mint to the zero address"); require(!_exists(tokenId), "ERC721: token already minted"); _beforeTokenTransfer(address(0), to, tokenId); _balances[to] += 1; _owners[tokenId] = to; emit Transfer(address(0), to, tokenId); } /** * @dev Destroys `tokenId`. * The approval is cleared when the token is burned. * * Requirements: * * - `tokenId` must exist. * * Emits a {Transfer} event. */ function _burn(uint256 tokenId) internal virtual { address owner = ERC721.ownerOf(tokenId); _beforeTokenTransfer(owner, address(0), tokenId); // Clear approvals _approve(address(0), tokenId); _balances[owner] -= 1; delete _owners[tokenId]; emit Transfer(owner, address(0), tokenId); } /** * @dev Transfers `tokenId` from `from` to `to`. * As opposed to {transferFrom}, this imposes no restrictions on msg.sender. * * Requirements: * * - `to` cannot be the zero address. * - `tokenId` token must be owned by `from`. * * Emits a {Transfer} event. */ function _transfer( address from, address to, uint256 tokenId ) internal virtual { require(ERC721.ownerOf(tokenId) == from, "ERC721: transfer of token that is not own"); require(to != address(0), "ERC721: transfer to the zero address"); _beforeTokenTransfer(from, to, tokenId); // Clear approvals from the previous owner _approve(address(0), tokenId); _balances[from] -= 1; _balances[to] += 1; _owners[tokenId] = to; emit Transfer(from, to, tokenId); } /** * @dev Approve `to` to operate on `tokenId` * * Emits a {Approval} event. */ function _approve(address to, uint256 tokenId) internal virtual { _tokenApprovals[tokenId] = to; emit Approval(ERC721.ownerOf(tokenId), to, tokenId); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits a {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC721: approve to caller"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Internal function to invoke {IERC721Receiver-onERC721Received} on a target address. * The call is not executed if the target address is not a contract. * * @param from address representing the previous owner of the given token ID * @param to target address that will receive the tokens * @param tokenId uint256 ID of the token to be transferred * @param _data bytes optional data to send along with the call * @return bool whether the call correctly returned the expected magic value */ function _checkOnERC721Received( address from, address to, uint256 tokenId, bytes memory _data ) private returns (bool) { if (to.isContract()) { try IERC721Receiver(to).onERC721Received(_msgSender(), from, tokenId, _data) returns (bytes4 retval) { return retval == IERC721Receiver.onERC721Received.selector; } catch (bytes memory reason) { if (reason.length == 0) { revert("ERC721: transfer to non ERC721Receiver implementer"); } else { assembly { revert(add(32, reason), mload(reason)) } } } } else { return true; } } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` and `to` are never both zero. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual {} } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721URIStorage.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721URIStorage.sol) pragma solidity ^0.8.0; /** * @dev ERC721 token with storage based token URI management. */ abstract contract ERC721URIStorage is ERC721 { using Strings for uint256; // Optional mapping for token URIs mapping(uint256 => string) private _tokenURIs; /** * @dev See {IERC721Metadata-tokenURI}. */ function tokenURI(uint256 tokenId) public view virtual override returns (string memory) { require(_exists(tokenId), "ERC721URIStorage: URI query for nonexistent token"); string memory _tokenURI = _tokenURIs[tokenId]; string memory base = _baseURI(); // If there is no base URI, return the token URI. if (bytes(base).length == 0) { return _tokenURI; } // If both are set, concatenate the baseURI and tokenURI (via abi.encodePacked). if (bytes(_tokenURI).length > 0) { return string(abi.encodePacked(base, _tokenURI)); } return super.tokenURI(tokenId); } /** * @dev Sets `_tokenURI` as the tokenURI of `tokenId`. * * Requirements: * * - `tokenId` must exist. */ function _setTokenURI(uint256 tokenId, string memory _tokenURI) internal virtual { require(_exists(tokenId), "ERC721URIStorage: URI set of nonexistent token"); _tokenURIs[tokenId] = _tokenURI; } /** * @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 override { super._burn(tokenId); if (bytes(_tokenURIs[tokenId]).length != 0) { delete _tokenURIs[tokenId]; } } } // File: @openzeppelin/contracts/token/ERC721/extensions/ERC721Enumerable.sol // OpenZeppelin Contracts v4.4.1 (token/ERC721/extensions/ERC721Enumerable.sol) pragma solidity ^0.8.0; /** * @dev This implements an optional extension of {ERC721} defined in the EIP that adds * enumerability of all the token ids in the contract as well as all token ids owned by each * account. */ abstract contract ERC721Enumerable is ERC721, IERC721Enumerable { // Mapping from owner to list of owned token IDs mapping(address => mapping(uint256 => uint256)) private _ownedTokens; // Mapping from token ID to index of the owner tokens list mapping(uint256 => uint256) private _ownedTokensIndex; // Array with all token ids, used for enumeration uint256[] private _allTokens; // Mapping from token id to position in the allTokens array mapping(uint256 => uint256) private _allTokensIndex; /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(IERC165, ERC721) returns (bool) { return interfaceId == type(IERC721Enumerable).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC721Enumerable-tokenOfOwnerByIndex}. */ function tokenOfOwnerByIndex(address owner, uint256 index) public view virtual override returns (uint256) { require(index < ERC721.balanceOf(owner), "ERC721Enumerable: owner index out of bounds"); return _ownedTokens[owner][index]; } /** * @dev See {IERC721Enumerable-totalSupply}. */ function totalSupply() public view virtual override returns (uint256) { return _allTokens.length; } /** * @dev See {IERC721Enumerable-tokenByIndex}. */ function tokenByIndex(uint256 index) public view virtual override returns (uint256) { require(index < ERC721Enumerable.totalSupply(), "ERC721Enumerable: global index out of bounds"); return _allTokens[index]; } /** * @dev Hook that is called before any token transfer. This includes minting * and burning. * * Calling conditions: * * - When `from` and `to` are both non-zero, ``from``'s `tokenId` will be * transferred to `to`. * - When `from` is zero, `tokenId` will be minted for `to`. * - When `to` is zero, ``from``'s `tokenId` will be burned. * - `from` cannot be the zero address. * - `to` cannot be the zero address. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address from, address to, uint256 tokenId ) internal virtual override { super._beforeTokenTransfer(from, to, tokenId); if (from == address(0)) { _addTokenToAllTokensEnumeration(tokenId); } else if (from != to) { _removeTokenFromOwnerEnumeration(from, tokenId); } if (to == address(0)) { _removeTokenFromAllTokensEnumeration(tokenId); } else if (to != from) { _addTokenToOwnerEnumeration(to, tokenId); } } /** * @dev Private function to add a token to this extension's ownership-tracking data structures. * @param to address representing the new owner of the given token ID * @param tokenId uint256 ID of the token to be added to the tokens list of the given address */ function _addTokenToOwnerEnumeration(address to, uint256 tokenId) private { uint256 length = ERC721.balanceOf(to); _ownedTokens[to][length] = tokenId; _ownedTokensIndex[tokenId] = length; } /** * @dev Private function to add a token to this extension's token tracking data structures. * @param tokenId uint256 ID of the token to be added to the tokens list */ function _addTokenToAllTokensEnumeration(uint256 tokenId) private { _allTokensIndex[tokenId] = _allTokens.length; _allTokens.push(tokenId); } /** * @dev Private function to remove a token from this extension's ownership-tracking data structures. Note that * while the token is not assigned a new owner, the `_ownedTokensIndex` mapping is _not_ updated: this allows for * gas optimizations e.g. when performing a transfer operation (avoiding double writes). * This has O(1) time complexity, but alters the order of the _ownedTokens array. * @param from address representing the previous owner of the given token ID * @param tokenId uint256 ID of the token to be removed from the tokens list of the given address */ function _removeTokenFromOwnerEnumeration(address from, uint256 tokenId) private { // To prevent a gap in from's tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = ERC721.balanceOf(from) - 1; uint256 tokenIndex = _ownedTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary if (tokenIndex != lastTokenIndex) { uint256 lastTokenId = _ownedTokens[from][lastTokenIndex]; _ownedTokens[from][tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _ownedTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index } // This also deletes the contents at the last position of the array delete _ownedTokensIndex[tokenId]; delete _ownedTokens[from][lastTokenIndex]; } /** * @dev Private function to remove a token from this extension's token tracking data structures. * This has O(1) time complexity, but alters the order of the _allTokens array. * @param tokenId uint256 ID of the token to be removed from the tokens list */ function _removeTokenFromAllTokensEnumeration(uint256 tokenId) private { // To prevent a gap in the tokens array, we store the last token in the index of the token to delete, and // then delete the last slot (swap and pop). uint256 lastTokenIndex = _allTokens.length - 1; uint256 tokenIndex = _allTokensIndex[tokenId]; // When the token to delete is the last token, the swap operation is unnecessary. However, since this occurs so // rarely (when the last minted token is burnt) that we still do the swap here to avoid the gas cost of adding // an 'if' statement (like in _removeTokenFromOwnerEnumeration) uint256 lastTokenId = _allTokens[lastTokenIndex]; _allTokens[tokenIndex] = lastTokenId; // Move the last token to the slot of the to-delete token _allTokensIndex[lastTokenId] = tokenIndex; // Update the moved token's index // This also deletes the contents at the last position of the array delete _allTokensIndex[tokenId]; _allTokens.pop(); } } // File: contracts/NFT.sol /** *Submitted for verification at snowtrace.io on 2021-12-02 */ // OpenZeppelin Contracts v4.4.0 (utils/Address.sol) pragma solidity ^0.8.0; 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; } } //author: mickey. contract Avarobots is ERC721Enumerable, Ownable { using SafeMath for uint256; using Counters for Counters.Counter; address public architect; uint256 public startingIndex; uint256 public startingIndexBlock; mapping(address => bool) public excludedList; string public baseExtension = ".json"; uint256 public constant MAX_ELEMENTS = 500; uint256 public constant PRICE = 1.50 ether; uint256 public constant MAX_PER_TX = 5; uint256 public maxMintWhitelist = 1; Counters.Counter private _tokenIds; string public baseTokenURI; struct Whitelist { address addr; uint hasMinted; } mapping(address => Whitelist) public whitelist; address[] whitelistAddr; address public constant devAddress = 0x1ae0543C8440e1aAa7c2FCD5Dcf7cb2c64911580; bool public saleIsActive = false; bool public privateSaleIsActive = true; event congratsForYourAVAROBOTS(uint256 indexed id); constructor() ERC721('AVAROBOTS', 'AVAROBOTS') { architect = devAddress; } function setWhitelistMaxMint(uint256 maxMintWL) onlyOwner public { maxMintWhitelist = maxMintWL; } function addWhitelist(address[] memory addrs) onlyOwner public returns(bool success) { whitelistAddr = addrs; for(uint i = 0; i < whitelistAddr.length; i++) { addAddressToWhitelist(whitelistAddr[i]); } success = true; } function _baseURI() internal view virtual override returns (string memory) { return baseTokenURI; } 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, Strings.toString(tokenId), baseExtension)) : ""; } function setBaseURI(string memory baseURI) public onlyOwner { baseTokenURI = baseURI; } function setBaseExtension(string memory _newBaseExtension) public onlyOwner { baseExtension = _newBaseExtension; } function flipSaleState() public onlyOwner { saleIsActive = !saleIsActive; } function flipPrivateSaleState() public onlyOwner { privateSaleIsActive = !privateSaleIsActive; } function tokensOfOwner(address owner_) external view returns(uint256[] memory ) { uint256 tokenCount = balanceOf(owner_); if (tokenCount == 0) { // Return an empty array return new uint256[](0); } else { uint256[] memory result = new uint256[](tokenCount); uint256 index; for (index = 0; index < tokenCount; index++) { result[index] = tokenOfOwnerByIndex(owner_, index); } return result; } } function mintToken(address _to, uint numberOfTokens) public payable { require(saleIsActive, "Sale must be active to mint"); require(totalSupply().add(numberOfTokens) <= MAX_ELEMENTS, "Exceeds max supply"); require(PRICE.mul(numberOfTokens) <= msg.value, "AVAX sent is incorrect"); if(privateSaleIsActive) { require(numberOfTokens <= maxMintWhitelist, "Above max tx count"); require(isWhitelisted(_to), "Is not whitelisted"); require(whitelist[_to].hasMinted.add(numberOfTokens) <= maxMintWhitelist, "Can only mint 1 while whitelisted"); require(whitelist[_to].hasMinted <= maxMintWhitelist, "Can only mint 1 while whitelisted"); whitelist[_to].hasMinted = whitelist[_to].hasMinted.add(numberOfTokens); } else { require(numberOfTokens <= MAX_PER_TX, "Above max tx count"); } for(uint i = 0; i < numberOfTokens; i++) { uint mintIndex = totalSupply(); _safeMint(_to, mintIndex); emit congratsForYourAVAROBOTS(mintIndex); } } function transferFrom( address from, address to, uint256 tokenId ) public override { require( _isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved' ); _transfer(from, to, tokenId); } function safeTransferFrom( address from, address to, uint256 tokenId ) public override { safeTransferFrom(from, to, tokenId, ''); } function safeTransferFrom( address from, address to, uint256 tokenId, bytes memory _data ) public override { require( _isApprovedOrOwner(_msgSender(), tokenId), 'ERC721: transfer caller is not owner nor approved' ); _safeTransfer(from, to, tokenId, _data); } function setStartingIndex() public onlyOwner { require(startingIndex == 0, "Starting index is already set"); require(startingIndexBlock != 0, "Starting index block must be set"); startingIndex = uint(blockhash(startingIndexBlock)) % MAX_ELEMENTS; // just in case if this function is called late if (block.number.sub(startingIndexBlock) > 255) { startingIndex = uint(blockhash(block.number - 1)) % MAX_ELEMENTS; } } function addAddressToWhitelist(address addr) onlyOwner public returns(bool success) { require(!isWhitelisted(addr), "Already whitelisted"); whitelist[addr].addr = addr; whitelist[addr].hasMinted = 0; success = true; } function isWhitelisted(address addr) public view returns (bool isWhiteListed) { return whitelist[addr].addr == addr; } function claimAVAX() public { require(devAddress == _msgSender(), "Ownable: caller is not the devAddress"); payable(address(devAddress)).transfer(address(this).balance); //or _withdraw(devAddress); } }
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"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"congratsForYourAVAROBOTS","type":"event"},{"inputs":[],"name":"MAX_ELEMENTS","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"MAX_PER_TX","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"PRICE","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"addAddressToWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address[]","name":"addrs","type":"address[]"}],"name":"addWhitelist","outputs":[{"internalType":"bool","name":"success","type":"bool"}],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"approve","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"architect","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseExtension","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"baseTokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"claimAVAX","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"devAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"excludedList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"flipPrivateSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"flipSaleState","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"getApproved","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"addr","type":"address"}],"name":"isWhitelisted","outputs":[{"internalType":"bool","name":"isWhiteListed","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"maxMintWhitelist","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"_to","type":"address"},{"internalType":"uint256","name":"numberOfTokens","type":"uint256"}],"name":"mintToken","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"ownerOf","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"privateSaleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"renounceOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId","type":"uint256"},{"internalType":"bytes","name":"_data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"saleIsActive","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"_newBaseExtension","type":"string"}],"name":"setBaseExtension","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"baseURI","type":"string"}],"name":"setBaseURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"setStartingIndex","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxMintWL","type":"uint256"}],"name":"setWhitelistMaxMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"startingIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"startingIndexBlock","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner","type":"address"},{"internalType":"uint256","name":"index","type":"uint256"}],"name":"tokenOfOwnerByIndex","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"tokenURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"owner_","type":"address"}],"name":"tokensOfOwner","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"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":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"address","name":"addr","type":"address"},{"internalType":"uint256","name":"hasMinted","type":"uint256"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040526040518060400160405280600581526020017f2e6a736f6e000000000000000000000000000000000000000000000000000000815250600f90805190602001906200005192919062000284565b5060016010556000601560006101000a81548160ff0219169083151502179055506001601560016101000a81548160ff0219169083151502179055503480156200009a57600080fd5b506040518060400160405280600981526020017f415641524f424f545300000000000000000000000000000000000000000000008152506040518060400160405280600981526020017f415641524f424f5453000000000000000000000000000000000000000000000081525081600090805190602001906200011f92919062000284565b5080600190805190602001906200013892919062000284565b5050506200015b6200014f620001b660201b60201c565b620001be60201b60201c565b731ae0543c8440e1aaa7c2fcd5dcf7cb2c64911580600b60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff16021790555062000399565b600033905090565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b828054620002929062000334565b90600052602060002090601f016020900481019282620002b6576000855562000302565b82601f10620002d157805160ff191683800117855562000302565b8280016001018555821562000302579182015b8281111562000301578251825591602001919060010190620002e4565b5b50905062000311919062000315565b5090565b5b808211156200033057600081600090555060010162000316565b5090565b600060028204905060018216806200034d57607f821691505b602082108114156200036457620003636200036a565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b61535680620003a96000396000f3fe6080604052600436106102715760003560e01c80637b9417c81161014f578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c51461096d578063e9866550146109aa578063eb8d2444146109c1578063edac985b146109ec578063f2fde38b14610a29578063f43a22dc14610a5257610271565b8063c87b56dd1461085d578063cb774d471461089a578063d547cfb7146108c5578063da3ef23f146108f0578063e214696314610919578063e36d64981461094257610271565b806395d89b411161011357806395d89b411461074c5780639b19251a14610777578063a22cb465146107b5578063a759a7c8146107de578063b88d4fde14610809578063c66828621461083257610271565b80637b9417c8146106515780638462151c1461068e5780638d859f3e146106cb5780638da5cb5b146106f6578063936a9ec21461072157610271565b80633719e3b0116101e857806355f804b3116101ac57806355f804b31461053e5780635600d2fa146105675780636352211e146105a457806370a08231146105e1578063715018a61461061e57806379c650681461063557610271565b80633719e3b0146104595780633ad10ef6146104705780633af32abf1461049b57806342842e0e146104d85780634f6ccce71461050157610271565b8063095ea7b31161023a578063095ea7b31461035d57806318160ddd1461038657806323b872dd146103b15780632f745c59146103da57806334918dfd146104175780633502a7161461042e57610271565b8062b214ec1461027657806301ffc9a71461028d57806304737a01146102ca57806306fdde03146102f5578063081812fc14610320575b600080fd5b34801561028257600080fd5b5061028b610a7d565b005b34801561029957600080fd5b506102b460048036038101906102af9190613b85565b610b63565b6040516102c191906142e0565b60405180910390f35b3480156102d657600080fd5b506102df610bdd565b6040516102ec91906142e0565b60405180910390f35b34801561030157600080fd5b5061030a610bf0565b60405161031791906142fb565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613c28565b610c82565b604051610354919061422e565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613afc565b610d07565b005b34801561039257600080fd5b5061039b610e1f565b6040516103a8919061469d565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906139e6565b610e2c565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613afc565b610e8c565b60405161040e919061469d565b60405180910390f35b34801561042357600080fd5b5061042c610f31565b005b34801561043a57600080fd5b50610443610fd9565b604051610450919061469d565b60405180910390f35b34801561046557600080fd5b5061046e610fdf565b005b34801561047c57600080fd5b50610485611087565b604051610492919061422e565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190613979565b61109f565b6040516104cf91906142e0565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa91906139e6565b611139565b005b34801561050d57600080fd5b5061052860048036038101906105239190613c28565b611159565b604051610535919061469d565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613bdf565b6111ca565b005b34801561057357600080fd5b5061058e60048036038101906105899190613979565b611260565b60405161059b91906142e0565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613c28565b611280565b6040516105d8919061422e565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190613979565b611332565b604051610615919061469d565b60405180910390f35b34801561062a57600080fd5b506106336113ea565b005b61064f600480360381019061064a9190613afc565b611472565b005b34801561065d57600080fd5b5061067860048036038101906106739190613979565b61188a565b60405161068591906142e0565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613979565b611a23565b6040516106c291906142be565b60405180910390f35b3480156106d757600080fd5b506106e0611b2d565b6040516106ed919061469d565b60405180910390f35b34801561070257600080fd5b5061070b611b39565b604051610718919061422e565b60405180910390f35b34801561072d57600080fd5b50610736611b63565b604051610743919061422e565b60405180910390f35b34801561075857600080fd5b50610761611b89565b60405161076e91906142fb565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613979565b611c1b565b6040516107ac929190614295565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613abc565b611c5f565b005b3480156107ea57600080fd5b506107f3611c75565b604051610800919061469d565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190613a39565b611c7b565b005b34801561083e57600080fd5b50610847611cdd565b60405161085491906142fb565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190613c28565b611d6b565b60405161089191906142fb565b60405180910390f35b3480156108a657600080fd5b506108af611e15565b6040516108bc919061469d565b60405180910390f35b3480156108d157600080fd5b506108da611e1b565b6040516108e791906142fb565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190613bdf565b611ea9565b005b34801561092557600080fd5b50610940600480360381019061093b9190613c28565b611f3f565b005b34801561094e57600080fd5b50610957611fc5565b604051610964919061469d565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f91906139a6565b611fcb565b6040516109a191906142e0565b60405180910390f35b3480156109b657600080fd5b506109bf61205f565b005b3480156109cd57600080fd5b506109d66121c4565b6040516109e391906142e0565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613b3c565b6121d7565b604051610a2091906142e0565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613979565b6122e1565b005b348015610a5e57600080fd5b50610a676123d9565b604051610a74919061469d565b60405180910390f35b610a856123de565b73ffffffffffffffffffffffffffffffffffffffff16731ae0543c8440e1aaa7c2fcd5dcf7cb2c6491158073ffffffffffffffffffffffffffffffffffffffff1614610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd9061443d565b60405180910390fd5b731ae0543c8440e1aaa7c2fcd5dcf7cb2c6491158073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b60573d6000803e3d6000fd5b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd65750610bd5826123e6565b5b9050919050565b601560019054906101000a900460ff1681565b606060008054610bff906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b906149c7565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c8d826124c8565b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061455d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1282611280565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a906145fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da26123de565b73ffffffffffffffffffffffffffffffffffffffff161480610dd15750610dd081610dcb6123de565b611fcb565b5b610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061449d565b60405180910390fd5b610e1a8383612534565b505050565b6000600880549050905090565b610e3d610e376123de565b826125ed565b610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e739061463d565b60405180910390fd5b610e878383836126cb565b505050565b6000610e9783611332565b8210610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf9061431d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f396123de565b73ffffffffffffffffffffffffffffffffffffffff16610f57611b39565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa49061457d565b60405180910390fd5b601560009054906101000a900460ff1615601560006101000a81548160ff021916908315150217905550565b6101f481565b610fe76123de565b73ffffffffffffffffffffffffffffffffffffffff16611005611b39565b73ffffffffffffffffffffffffffffffffffffffff161461105b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110529061457d565b60405180910390fd5b601560019054906101000a900460ff1615601560016101000a81548160ff021916908315150217905550565b731ae0543c8440e1aaa7c2fcd5dcf7cb2c6491158081565b60008173ffffffffffffffffffffffffffffffffffffffff16601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b61115483838360405180602001604052806000815250611c7b565b505050565b6000611163610e1f565b82106111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b9061467d565b60405180910390fd5b600882815481106111b8576111b7614b60565b5b90600052602060002001549050919050565b6111d26123de565b73ffffffffffffffffffffffffffffffffffffffff166111f0611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d9061457d565b60405180910390fd5b806012908051906020019061125c929190613665565b5050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611320906144dd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a906144bd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f26123de565b73ffffffffffffffffffffffffffffffffffffffff16611410611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d9061457d565b60405180910390fd5b6114706000612927565b565b601560009054906101000a900460ff166114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b8906143fd565b60405180910390fd5b6101f46114de826114d0610e1f565b6129ed90919063ffffffff16565b111561151f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611516906144fd565b60405180910390fd5b3461153b826714d1120d7b160000612a0390919063ffffffff16565b111561157c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115739061445d565b60405180910390fd5b601560019054906101000a900460ff16156117de576010548111156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd906143dd565b60405180910390fd5b6115df8261109f565b61161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116159061465d565b60405180910390fd5b60105461167682601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546129ed90919063ffffffff16565b11156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae9061453d565b60405180910390fd5b601054601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154111561173e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359061453d565b60405180910390fd5b61179381601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546129ed90919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611823565b6005811115611822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611819906143dd565b60405180910390fd5b5b60005b81811015611885576000611838610e1f565b90506118448482612a19565b807fcd0f2f6541687da765ffb6f31b3c5f1334c4f5e9c14eb11aa9b78e841750b84b60405160405180910390a250808061187d90614a2a565b915050611826565b505050565b60006118946123de565b73ffffffffffffffffffffffffffffffffffffffff166118b2611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061457d565b60405180910390fd5b6119118261109f565b15611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906145dd565b60405180910390fd5b81601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060019050919050565b60606000611a3083611332565b90506000811415611a8d57600067ffffffffffffffff811115611a5657611a55614b8f565b5b604051908082528060200260200182016040528015611a845781602001602082028036833780820191505090505b50915050611b28565b60008167ffffffffffffffff811115611aa957611aa8614b8f565b5b604051908082528060200260200182016040528015611ad75781602001602082028036833780820191505090505b50905060005b82811015611b2157611aef8582610e8c565b828281518110611b0257611b01614b60565b5b6020026020010181815250508080611b1990614a2a565b915050611add565b8193505050505b919050565b6714d1120d7b16000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611b98906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc4906149c7565b8015611c115780601f10611be657610100808354040283529160200191611c11565b820191906000526020600020905b815481529060010190602001808311611bf457829003601f168201915b5050505050905090565b60136020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b611c71611c6a6123de565b8383612a37565b5050565b60105481565b611c8c611c866123de565b836125ed565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061463d565b60405180910390fd5b611cd784848484612ba4565b50505050565b600f8054611cea906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d16906149c7565b8015611d635780601f10611d3857610100808354040283529160200191611d63565b820191906000526020600020905b815481529060010190602001808311611d4657829003601f168201915b505050505081565b6060611d76826124c8565b611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906145bd565b60405180910390fd5b6000611dbf612c00565b90506000815111611ddf5760405180602001604052806000815250611e0d565b80611de984612c92565b600f604051602001611dfd939291906141fd565b6040516020818303038152906040525b915050919050565b600c5481565b60128054611e28906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e54906149c7565b8015611ea15780601f10611e7657610100808354040283529160200191611ea1565b820191906000526020600020905b815481529060010190602001808311611e8457829003601f168201915b505050505081565b611eb16123de565b73ffffffffffffffffffffffffffffffffffffffff16611ecf611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c9061457d565b60405180910390fd5b80600f9080519060200190611f3b929190613665565b5050565b611f476123de565b73ffffffffffffffffffffffffffffffffffffffff16611f65611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb29061457d565b60405180910390fd5b8060108190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120676123de565b73ffffffffffffffffffffffffffffffffffffffff16612085611b39565b73ffffffffffffffffffffffffffffffffffffffff16146120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d29061457d565b60405180910390fd5b6000600c5414612120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121179061447d565b60405180910390fd5b6000600d541415612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d9061461d565b60405180910390fd5b6101f4600d544060001c61217a9190614a73565b600c8190555060ff612197600d5443612df390919063ffffffff16565b11156121c2576101f46001436121ad91906148dd565b4060001c6121bb9190614a73565b600c819055505b565b601560009054906101000a900460ff1681565b60006121e16123de565b73ffffffffffffffffffffffffffffffffffffffff166121ff611b39565b73ffffffffffffffffffffffffffffffffffffffff1614612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c9061457d565b60405180910390fd5b816014908051906020019061226b9291906136eb565b5060005b6014805490508110156122d7576122c36014828154811061229357612292614b60565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661188a565b5080806122cf90614a2a565b91505061226f565b5060019050919050565b6122e96123de565b73ffffffffffffffffffffffffffffffffffffffff16612307611b39565b73ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123549061457d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061435d565b60405180910390fd5b6123d681612927565b50565b600581565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124b157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124c157506124c082612e09565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125a783611280565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125f8826124c8565b612637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262e9061441d565b60405180910390fd5b600061264283611280565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126b157508373ffffffffffffffffffffffffffffffffffffffff1661269984610c82565b73ffffffffffffffffffffffffffffffffffffffff16145b806126c257506126c18185611fcb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126eb82611280565b73ffffffffffffffffffffffffffffffffffffffff1614612741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127389061459d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a89061439d565b60405180910390fd5b6127bc838383612e73565b6127c7600082612534565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281791906148dd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286e91906147fc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836129fb91906147fc565b905092915050565b60008183612a119190614883565b905092915050565b612a33828260405180602001604052806000815250612f87565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906143bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b9791906142e0565b60405180910390a3505050565b612baf8484846126cb565b612bbb84848484612fe2565b612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf19061433d565b60405180910390fd5b50505050565b606060128054612c0f906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c3b906149c7565b8015612c885780601f10612c5d57610100808354040283529160200191612c88565b820191906000526020600020905b815481529060010190602001808311612c6b57829003601f168201915b5050505050905090565b60606000821415612cda576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dee565b600082905060005b60008214612d0c578080612cf590614a2a565b915050600a82612d059190614852565b9150612ce2565b60008167ffffffffffffffff811115612d2857612d27614b8f565b5b6040519080825280601f01601f191660200182016040528015612d5a5781602001600182028036833780820191505090505b5090505b60008514612de757600182612d7391906148dd565b9150600a85612d829190614a73565b6030612d8e91906147fc565b60f81b818381518110612da457612da3614b60565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de09190614852565b9450612d5e565b8093505050505b919050565b60008183612e0191906148dd565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e7e838383613179565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ec157612ebc8161317e565b612f00565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612eff57612efe83826131c7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4357612f3e81613334565b612f82565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f8157612f808282613405565b5b5b505050565b612f918383613484565b612f9e6000848484612fe2565b612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd49061433d565b60405180910390fd5b505050565b60006130038473ffffffffffffffffffffffffffffffffffffffff16613652565b1561316c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261302c6123de565b8786866040518563ffffffff1660e01b815260040161304e9493929190614249565b602060405180830381600087803b15801561306857600080fd5b505af192505050801561309957506040513d601f19601f820116820180604052508101906130969190613bb2565b60015b61311c573d80600081146130c9576040519150601f19603f3d011682016040523d82523d6000602084013e6130ce565b606091505b50600081511415613114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310b9061433d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613171565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131d484611332565b6131de91906148dd565b90506000600760008481526020019081526020016000205490508181146132c3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061334891906148dd565b905060006009600084815260200190815260200160002054905060006008838154811061337857613377614b60565b5b90600052602060002001549050806008838154811061339a57613399614b60565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806133e9576133e8614b31565b5b6001900381819060005260206000200160009055905550505050565b600061341083611332565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134eb9061451d565b60405180910390fd5b6134fd816124c8565b1561353d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135349061437d565b60405180910390fd5b61354960008383612e73565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359991906147fc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613671906149c7565b90600052602060002090601f01602090048101928261369357600085556136da565b82601f106136ac57805160ff19168380011785556136da565b828001600101855582156136da579182015b828111156136d95782518255916020019190600101906136be565b5b5090506136e79190613775565b5090565b828054828255906000526020600020908101928215613764579160200282015b828111156137635782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061370b565b5b5090506137719190613775565b5090565b5b8082111561378e576000816000905550600101613776565b5090565b60006137a56137a0846146dd565b6146b8565b905080838252602082019050828560208602820111156137c8576137c7614bc3565b5b60005b858110156137f857816137de8882613886565b8452602084019350602083019250506001810190506137cb565b5050509392505050565b600061381561381084614709565b6146b8565b90508281526020810184848401111561383157613830614bc8565b5b61383c848285614985565b509392505050565b60006138576138528461473a565b6146b8565b90508281526020810184848401111561387357613872614bc8565b5b61387e848285614985565b509392505050565b600081359050613895816152c4565b92915050565b600082601f8301126138b0576138af614bbe565b5b81356138c0848260208601613792565b91505092915050565b6000813590506138d8816152db565b92915050565b6000813590506138ed816152f2565b92915050565b600081519050613902816152f2565b92915050565b600082601f83011261391d5761391c614bbe565b5b813561392d848260208601613802565b91505092915050565b600082601f83011261394b5761394a614bbe565b5b813561395b848260208601613844565b91505092915050565b60008135905061397381615309565b92915050565b60006020828403121561398f5761398e614bd2565b5b600061399d84828501613886565b91505092915050565b600080604083850312156139bd576139bc614bd2565b5b60006139cb85828601613886565b92505060206139dc85828601613886565b9150509250929050565b6000806000606084860312156139ff576139fe614bd2565b5b6000613a0d86828701613886565b9350506020613a1e86828701613886565b9250506040613a2f86828701613964565b9150509250925092565b60008060008060808587031215613a5357613a52614bd2565b5b6000613a6187828801613886565b9450506020613a7287828801613886565b9350506040613a8387828801613964565b925050606085013567ffffffffffffffff811115613aa457613aa3614bcd565b5b613ab087828801613908565b91505092959194509250565b60008060408385031215613ad357613ad2614bd2565b5b6000613ae185828601613886565b9250506020613af2858286016138c9565b9150509250929050565b60008060408385031215613b1357613b12614bd2565b5b6000613b2185828601613886565b9250506020613b3285828601613964565b9150509250929050565b600060208284031215613b5257613b51614bd2565b5b600082013567ffffffffffffffff811115613b7057613b6f614bcd565b5b613b7c8482850161389b565b91505092915050565b600060208284031215613b9b57613b9a614bd2565b5b6000613ba9848285016138de565b91505092915050565b600060208284031215613bc857613bc7614bd2565b5b6000613bd6848285016138f3565b91505092915050565b600060208284031215613bf557613bf4614bd2565b5b600082013567ffffffffffffffff811115613c1357613c12614bcd565b5b613c1f84828501613936565b91505092915050565b600060208284031215613c3e57613c3d614bd2565b5b6000613c4c84828501613964565b91505092915050565b6000613c6183836141df565b60208301905092915050565b613c7681614911565b82525050565b6000613c8782614790565b613c9181856147be565b9350613c9c8361476b565b8060005b83811015613ccd578151613cb48882613c55565b9750613cbf836147b1565b925050600181019050613ca0565b5085935050505092915050565b613ce381614923565b82525050565b6000613cf48261479b565b613cfe81856147cf565b9350613d0e818560208601614994565b613d1781614bd7565b840191505092915050565b6000613d2d826147a6565b613d3781856147e0565b9350613d47818560208601614994565b613d5081614bd7565b840191505092915050565b6000613d66826147a6565b613d7081856147f1565b9350613d80818560208601614994565b80840191505092915050565b60008154613d99816149c7565b613da381866147f1565b94506001821660008114613dbe5760018114613dcf57613e02565b60ff19831686528186019350613e02565b613dd88561477b565b60005b83811015613dfa57815481890152600182019150602081019050613ddb565b838801955050505b50505092915050565b6000613e18602b836147e0565b9150613e2382614be8565b604082019050919050565b6000613e3b6032836147e0565b9150613e4682614c37565b604082019050919050565b6000613e5e6026836147e0565b9150613e6982614c86565b604082019050919050565b6000613e81601c836147e0565b9150613e8c82614cd5565b602082019050919050565b6000613ea46024836147e0565b9150613eaf82614cfe565b604082019050919050565b6000613ec76019836147e0565b9150613ed282614d4d565b602082019050919050565b6000613eea6012836147e0565b9150613ef582614d76565b602082019050919050565b6000613f0d601b836147e0565b9150613f1882614d9f565b602082019050919050565b6000613f30602c836147e0565b9150613f3b82614dc8565b604082019050919050565b6000613f536025836147e0565b9150613f5e82614e17565b604082019050919050565b6000613f766016836147e0565b9150613f8182614e66565b602082019050919050565b6000613f99601d836147e0565b9150613fa482614e8f565b602082019050919050565b6000613fbc6038836147e0565b9150613fc782614eb8565b604082019050919050565b6000613fdf602a836147e0565b9150613fea82614f07565b604082019050919050565b60006140026029836147e0565b915061400d82614f56565b604082019050919050565b60006140256012836147e0565b915061403082614fa5565b602082019050919050565b60006140486020836147e0565b915061405382614fce565b602082019050919050565b600061406b6021836147e0565b915061407682614ff7565b604082019050919050565b600061408e602c836147e0565b915061409982615046565b604082019050919050565b60006140b16020836147e0565b91506140bc82615095565b602082019050919050565b60006140d46029836147e0565b91506140df826150be565b604082019050919050565b60006140f7602f836147e0565b91506141028261510d565b604082019050919050565b600061411a6013836147e0565b91506141258261515c565b602082019050919050565b600061413d6021836147e0565b915061414882615185565b604082019050919050565b60006141606020836147e0565b915061416b826151d4565b602082019050919050565b60006141836031836147e0565b915061418e826151fd565b604082019050919050565b60006141a66012836147e0565b91506141b18261524c565b602082019050919050565b60006141c9602c836147e0565b91506141d482615275565b604082019050919050565b6141e88161497b565b82525050565b6141f78161497b565b82525050565b60006142098286613d5b565b91506142158285613d5b565b91506142218284613d8c565b9150819050949350505050565b60006020820190506142436000830184613c6d565b92915050565b600060808201905061425e6000830187613c6d565b61426b6020830186613c6d565b61427860408301856141ee565b818103606083015261428a8184613ce9565b905095945050505050565b60006040820190506142aa6000830185613c6d565b6142b760208301846141ee565b9392505050565b600060208201905081810360008301526142d88184613c7c565b905092915050565b60006020820190506142f56000830184613cda565b92915050565b600060208201905081810360008301526143158184613d22565b905092915050565b6000602082019050818103600083015261433681613e0b565b9050919050565b6000602082019050818103600083015261435681613e2e565b9050919050565b6000602082019050818103600083015261437681613e51565b9050919050565b6000602082019050818103600083015261439681613e74565b9050919050565b600060208201905081810360008301526143b681613e97565b9050919050565b600060208201905081810360008301526143d681613eba565b9050919050565b600060208201905081810360008301526143f681613edd565b9050919050565b6000602082019050818103600083015261441681613f00565b9050919050565b6000602082019050818103600083015261443681613f23565b9050919050565b6000602082019050818103600083015261445681613f46565b9050919050565b6000602082019050818103600083015261447681613f69565b9050919050565b6000602082019050818103600083015261449681613f8c565b9050919050565b600060208201905081810360008301526144b681613faf565b9050919050565b600060208201905081810360008301526144d681613fd2565b9050919050565b600060208201905081810360008301526144f681613ff5565b9050919050565b6000602082019050818103600083015261451681614018565b9050919050565b600060208201905081810360008301526145368161403b565b9050919050565b600060208201905081810360008301526145568161405e565b9050919050565b6000602082019050818103600083015261457681614081565b9050919050565b60006020820190508181036000830152614596816140a4565b9050919050565b600060208201905081810360008301526145b6816140c7565b9050919050565b600060208201905081810360008301526145d6816140ea565b9050919050565b600060208201905081810360008301526145f68161410d565b9050919050565b6000602082019050818103600083015261461681614130565b9050919050565b6000602082019050818103600083015261463681614153565b9050919050565b6000602082019050818103600083015261465681614176565b9050919050565b6000602082019050818103600083015261467681614199565b9050919050565b60006020820190508181036000830152614696816141bc565b9050919050565b60006020820190506146b260008301846141ee565b92915050565b60006146c26146d3565b90506146ce82826149f9565b919050565b6000604051905090565b600067ffffffffffffffff8211156146f8576146f7614b8f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561472457614723614b8f565b5b61472d82614bd7565b9050602081019050919050565b600067ffffffffffffffff82111561475557614754614b8f565b5b61475e82614bd7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148078261497b565b91506148128361497b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561484757614846614aa4565b5b828201905092915050565b600061485d8261497b565b91506148688361497b565b92508261487857614877614ad3565b5b828204905092915050565b600061488e8261497b565b91506148998361497b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148d2576148d1614aa4565b5b828202905092915050565b60006148e88261497b565b91506148f38361497b565b92508282101561490657614905614aa4565b5b828203905092915050565b600061491c8261495b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149b2578082015181840152602081019050614997565b838111156149c1576000848401525b50505050565b600060028204905060018216806149df57607f821691505b602082108114156149f3576149f2614b02565b5b50919050565b614a0282614bd7565b810181811067ffffffffffffffff82111715614a2157614a20614b8f565b5b80604052505050565b6000614a358261497b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a6857614a67614aa4565b5b600182019050919050565b6000614a7e8261497b565b9150614a898361497b565b925082614a9957614a98614ad3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41626f7665206d617820747820636f756e740000000000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520646576416460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f415641582073656e7420697320696e636f727265637400000000000000000000600082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e206f6e6c79206d696e742031207768696c652077686974656c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c72656164792077686974656c697374656400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4973206e6f742077686974656c69737465640000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6152cd81614911565b81146152d857600080fd5b50565b6152e481614923565b81146152ef57600080fd5b50565b6152fb8161492f565b811461530657600080fd5b50565b6153128161497b565b811461531d57600080fd5b5056fea2646970667358221220a51f09f6816755fc1e5753e8029a06aa63c4659f52f22576cf3c887218a9079764736f6c63430008070033
Deployed Bytecode
0x6080604052600436106102715760003560e01c80637b9417c81161014f578063c87b56dd116100c1578063e985e9c51161007a578063e985e9c51461096d578063e9866550146109aa578063eb8d2444146109c1578063edac985b146109ec578063f2fde38b14610a29578063f43a22dc14610a5257610271565b8063c87b56dd1461085d578063cb774d471461089a578063d547cfb7146108c5578063da3ef23f146108f0578063e214696314610919578063e36d64981461094257610271565b806395d89b411161011357806395d89b411461074c5780639b19251a14610777578063a22cb465146107b5578063a759a7c8146107de578063b88d4fde14610809578063c66828621461083257610271565b80637b9417c8146106515780638462151c1461068e5780638d859f3e146106cb5780638da5cb5b146106f6578063936a9ec21461072157610271565b80633719e3b0116101e857806355f804b3116101ac57806355f804b31461053e5780635600d2fa146105675780636352211e146105a457806370a08231146105e1578063715018a61461061e57806379c650681461063557610271565b80633719e3b0146104595780633ad10ef6146104705780633af32abf1461049b57806342842e0e146104d85780634f6ccce71461050157610271565b8063095ea7b31161023a578063095ea7b31461035d57806318160ddd1461038657806323b872dd146103b15780632f745c59146103da57806334918dfd146104175780633502a7161461042e57610271565b8062b214ec1461027657806301ffc9a71461028d57806304737a01146102ca57806306fdde03146102f5578063081812fc14610320575b600080fd5b34801561028257600080fd5b5061028b610a7d565b005b34801561029957600080fd5b506102b460048036038101906102af9190613b85565b610b63565b6040516102c191906142e0565b60405180910390f35b3480156102d657600080fd5b506102df610bdd565b6040516102ec91906142e0565b60405180910390f35b34801561030157600080fd5b5061030a610bf0565b60405161031791906142fb565b60405180910390f35b34801561032c57600080fd5b5061034760048036038101906103429190613c28565b610c82565b604051610354919061422e565b60405180910390f35b34801561036957600080fd5b50610384600480360381019061037f9190613afc565b610d07565b005b34801561039257600080fd5b5061039b610e1f565b6040516103a8919061469d565b60405180910390f35b3480156103bd57600080fd5b506103d860048036038101906103d391906139e6565b610e2c565b005b3480156103e657600080fd5b5061040160048036038101906103fc9190613afc565b610e8c565b60405161040e919061469d565b60405180910390f35b34801561042357600080fd5b5061042c610f31565b005b34801561043a57600080fd5b50610443610fd9565b604051610450919061469d565b60405180910390f35b34801561046557600080fd5b5061046e610fdf565b005b34801561047c57600080fd5b50610485611087565b604051610492919061422e565b60405180910390f35b3480156104a757600080fd5b506104c260048036038101906104bd9190613979565b61109f565b6040516104cf91906142e0565b60405180910390f35b3480156104e457600080fd5b506104ff60048036038101906104fa91906139e6565b611139565b005b34801561050d57600080fd5b5061052860048036038101906105239190613c28565b611159565b604051610535919061469d565b60405180910390f35b34801561054a57600080fd5b5061056560048036038101906105609190613bdf565b6111ca565b005b34801561057357600080fd5b5061058e60048036038101906105899190613979565b611260565b60405161059b91906142e0565b60405180910390f35b3480156105b057600080fd5b506105cb60048036038101906105c69190613c28565b611280565b6040516105d8919061422e565b60405180910390f35b3480156105ed57600080fd5b5061060860048036038101906106039190613979565b611332565b604051610615919061469d565b60405180910390f35b34801561062a57600080fd5b506106336113ea565b005b61064f600480360381019061064a9190613afc565b611472565b005b34801561065d57600080fd5b5061067860048036038101906106739190613979565b61188a565b60405161068591906142e0565b60405180910390f35b34801561069a57600080fd5b506106b560048036038101906106b09190613979565b611a23565b6040516106c291906142be565b60405180910390f35b3480156106d757600080fd5b506106e0611b2d565b6040516106ed919061469d565b60405180910390f35b34801561070257600080fd5b5061070b611b39565b604051610718919061422e565b60405180910390f35b34801561072d57600080fd5b50610736611b63565b604051610743919061422e565b60405180910390f35b34801561075857600080fd5b50610761611b89565b60405161076e91906142fb565b60405180910390f35b34801561078357600080fd5b5061079e60048036038101906107999190613979565b611c1b565b6040516107ac929190614295565b60405180910390f35b3480156107c157600080fd5b506107dc60048036038101906107d79190613abc565b611c5f565b005b3480156107ea57600080fd5b506107f3611c75565b604051610800919061469d565b60405180910390f35b34801561081557600080fd5b50610830600480360381019061082b9190613a39565b611c7b565b005b34801561083e57600080fd5b50610847611cdd565b60405161085491906142fb565b60405180910390f35b34801561086957600080fd5b50610884600480360381019061087f9190613c28565b611d6b565b60405161089191906142fb565b60405180910390f35b3480156108a657600080fd5b506108af611e15565b6040516108bc919061469d565b60405180910390f35b3480156108d157600080fd5b506108da611e1b565b6040516108e791906142fb565b60405180910390f35b3480156108fc57600080fd5b5061091760048036038101906109129190613bdf565b611ea9565b005b34801561092557600080fd5b50610940600480360381019061093b9190613c28565b611f3f565b005b34801561094e57600080fd5b50610957611fc5565b604051610964919061469d565b60405180910390f35b34801561097957600080fd5b50610994600480360381019061098f91906139a6565b611fcb565b6040516109a191906142e0565b60405180910390f35b3480156109b657600080fd5b506109bf61205f565b005b3480156109cd57600080fd5b506109d66121c4565b6040516109e391906142e0565b60405180910390f35b3480156109f857600080fd5b50610a136004803603810190610a0e9190613b3c565b6121d7565b604051610a2091906142e0565b60405180910390f35b348015610a3557600080fd5b50610a506004803603810190610a4b9190613979565b6122e1565b005b348015610a5e57600080fd5b50610a676123d9565b604051610a74919061469d565b60405180910390f35b610a856123de565b73ffffffffffffffffffffffffffffffffffffffff16731ae0543c8440e1aaa7c2fcd5dcf7cb2c6491158073ffffffffffffffffffffffffffffffffffffffff1614610b06576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610afd9061443d565b60405180910390fd5b731ae0543c8440e1aaa7c2fcd5dcf7cb2c6491158073ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f19350505050158015610b60573d6000803e3d6000fd5b50565b60007f780e9d63000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610bd65750610bd5826123e6565b5b9050919050565b601560019054906101000a900460ff1681565b606060008054610bff906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054610c2b906149c7565b8015610c785780601f10610c4d57610100808354040283529160200191610c78565b820191906000526020600020905b815481529060010190602001808311610c5b57829003601f168201915b5050505050905090565b6000610c8d826124c8565b610ccc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cc39061455d565b60405180910390fd5b6004600083815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050919050565b6000610d1282611280565b90508073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610d83576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610d7a906145fd565b60405180910390fd5b8073ffffffffffffffffffffffffffffffffffffffff16610da26123de565b73ffffffffffffffffffffffffffffffffffffffff161480610dd15750610dd081610dcb6123de565b611fcb565b5b610e10576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e079061449d565b60405180910390fd5b610e1a8383612534565b505050565b6000600880549050905090565b610e3d610e376123de565b826125ed565b610e7c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e739061463d565b60405180910390fd5b610e878383836126cb565b505050565b6000610e9783611332565b8210610ed8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ecf9061431d565b60405180910390fd5b600660008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002054905092915050565b610f396123de565b73ffffffffffffffffffffffffffffffffffffffff16610f57611b39565b73ffffffffffffffffffffffffffffffffffffffff1614610fad576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fa49061457d565b60405180910390fd5b601560009054906101000a900460ff1615601560006101000a81548160ff021916908315150217905550565b6101f481565b610fe76123de565b73ffffffffffffffffffffffffffffffffffffffff16611005611b39565b73ffffffffffffffffffffffffffffffffffffffff161461105b576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110529061457d565b60405180910390fd5b601560019054906101000a900460ff1615601560016101000a81548160ff021916908315150217905550565b731ae0543c8440e1aaa7c2fcd5dcf7cb2c6491158081565b60008173ffffffffffffffffffffffffffffffffffffffff16601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16149050919050565b61115483838360405180602001604052806000815250611c7b565b505050565b6000611163610e1f565b82106111a4576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161119b9061467d565b60405180910390fd5b600882815481106111b8576111b7614b60565b5b90600052602060002001549050919050565b6111d26123de565b73ffffffffffffffffffffffffffffffffffffffff166111f0611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611246576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161123d9061457d565b60405180910390fd5b806012908051906020019061125c929190613665565b5050565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000806002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff161415611329576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611320906144dd565b60405180910390fd5b80915050919050565b60008073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156113a3576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161139a906144bd565b60405180910390fd5b600360008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050919050565b6113f26123de565b73ffffffffffffffffffffffffffffffffffffffff16611410611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611466576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161145d9061457d565b60405180910390fd5b6114706000612927565b565b601560009054906101000a900460ff166114c1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b8906143fd565b60405180910390fd5b6101f46114de826114d0610e1f565b6129ed90919063ffffffff16565b111561151f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611516906144fd565b60405180910390fd5b3461153b826714d1120d7b160000612a0390919063ffffffff16565b111561157c576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115739061445d565b60405180910390fd5b601560019054906101000a900460ff16156117de576010548111156115d6576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115cd906143dd565b60405180910390fd5b6115df8261109f565b61161e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116159061465d565b60405180910390fd5b60105461167682601360008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546129ed90919063ffffffff16565b11156116b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116ae9061453d565b60405180910390fd5b601054601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010154111561173e576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117359061453d565b60405180910390fd5b61179381601360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600101546129ed90919063ffffffff16565b601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060010181905550611823565b6005811115611822576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611819906143dd565b60405180910390fd5b5b60005b81811015611885576000611838610e1f565b90506118448482612a19565b807fcd0f2f6541687da765ffb6f31b3c5f1334c4f5e9c14eb11aa9b78e841750b84b60405160405180910390a250808061187d90614a2a565b915050611826565b505050565b60006118946123de565b73ffffffffffffffffffffffffffffffffffffffff166118b2611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611908576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118ff9061457d565b60405180910390fd5b6119118261109f565b15611951576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611948906145dd565b60405180910390fd5b81601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060000160006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055506000601360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206001018190555060019050919050565b60606000611a3083611332565b90506000811415611a8d57600067ffffffffffffffff811115611a5657611a55614b8f565b5b604051908082528060200260200182016040528015611a845781602001602082028036833780820191505090505b50915050611b28565b60008167ffffffffffffffff811115611aa957611aa8614b8f565b5b604051908082528060200260200182016040528015611ad75781602001602082028036833780820191505090505b50905060005b82811015611b2157611aef8582610e8c565b828281518110611b0257611b01614b60565b5b6020026020010181815250508080611b1990614a2a565b915050611add565b8193505050505b919050565b6714d1120d7b16000081565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600b60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b606060018054611b98906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611bc4906149c7565b8015611c115780601f10611be657610100808354040283529160200191611c11565b820191906000526020600020905b815481529060010190602001808311611bf457829003601f168201915b5050505050905090565b60136020528060005260406000206000915090508060000160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16908060010154905082565b611c71611c6a6123de565b8383612a37565b5050565b60105481565b611c8c611c866123de565b836125ed565b611ccb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611cc29061463d565b60405180910390fd5b611cd784848484612ba4565b50505050565b600f8054611cea906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611d16906149c7565b8015611d635780601f10611d3857610100808354040283529160200191611d63565b820191906000526020600020905b815481529060010190602001808311611d4657829003601f168201915b505050505081565b6060611d76826124c8565b611db5576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dac906145bd565b60405180910390fd5b6000611dbf612c00565b90506000815111611ddf5760405180602001604052806000815250611e0d565b80611de984612c92565b600f604051602001611dfd939291906141fd565b6040516020818303038152906040525b915050919050565b600c5481565b60128054611e28906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054611e54906149c7565b8015611ea15780601f10611e7657610100808354040283529160200191611ea1565b820191906000526020600020905b815481529060010190602001808311611e8457829003601f168201915b505050505081565b611eb16123de565b73ffffffffffffffffffffffffffffffffffffffff16611ecf611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611f25576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611f1c9061457d565b60405180910390fd5b80600f9080519060200190611f3b929190613665565b5050565b611f476123de565b73ffffffffffffffffffffffffffffffffffffffff16611f65611b39565b73ffffffffffffffffffffffffffffffffffffffff1614611fbb576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611fb29061457d565b60405180910390fd5b8060108190555050565b600d5481565b6000600560008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b6120676123de565b73ffffffffffffffffffffffffffffffffffffffff16612085611b39565b73ffffffffffffffffffffffffffffffffffffffff16146120db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120d29061457d565b60405180910390fd5b6000600c5414612120576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121179061447d565b60405180910390fd5b6000600d541415612166576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161215d9061461d565b60405180910390fd5b6101f4600d544060001c61217a9190614a73565b600c8190555060ff612197600d5443612df390919063ffffffff16565b11156121c2576101f46001436121ad91906148dd565b4060001c6121bb9190614a73565b600c819055505b565b601560009054906101000a900460ff1681565b60006121e16123de565b73ffffffffffffffffffffffffffffffffffffffff166121ff611b39565b73ffffffffffffffffffffffffffffffffffffffff1614612255576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161224c9061457d565b60405180910390fd5b816014908051906020019061226b9291906136eb565b5060005b6014805490508110156122d7576122c36014828154811061229357612292614b60565b5b9060005260206000200160009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1661188a565b5080806122cf90614a2a565b91505061226f565b5060019050919050565b6122e96123de565b73ffffffffffffffffffffffffffffffffffffffff16612307611b39565b73ffffffffffffffffffffffffffffffffffffffff161461235d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123549061457d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156123cd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016123c49061435d565b60405180910390fd5b6123d681612927565b50565b600581565b600033905090565b60007f80ac58cd000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806124b157507f5b5e139f000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b806124c157506124c082612e09565b5b9050919050565b60008073ffffffffffffffffffffffffffffffffffffffff166002600084815260200190815260200160002060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1614159050919050565b816004600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff166125a783611280565b73ffffffffffffffffffffffffffffffffffffffff167f8c5be1e5ebec7d5bd14f71427d1e84f3dd0314c0f7b2291e5b200ac8c7c3b92560405160405180910390a45050565b60006125f8826124c8565b612637576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161262e9061441d565b60405180910390fd5b600061264283611280565b90508073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614806126b157508373ffffffffffffffffffffffffffffffffffffffff1661269984610c82565b73ffffffffffffffffffffffffffffffffffffffff16145b806126c257506126c18185611fcb565b5b91505092915050565b8273ffffffffffffffffffffffffffffffffffffffff166126eb82611280565b73ffffffffffffffffffffffffffffffffffffffff1614612741576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127389061459d565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156127b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016127a89061439d565b60405180910390fd5b6127bc838383612e73565b6127c7600082612534565b6001600360008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461281791906148dd565b925050819055506001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461286e91906147fc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a4505050565b6000600a60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600a60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600081836129fb91906147fc565b905092915050565b60008183612a119190614883565b905092915050565b612a33828260405180602001604052806000815250612f87565b5050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612aa6576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612a9d906143bd565b60405180910390fd5b80600560008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612b9791906142e0565b60405180910390a3505050565b612baf8484846126cb565b612bbb84848484612fe2565b612bfa576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612bf19061433d565b60405180910390fd5b50505050565b606060128054612c0f906149c7565b80601f0160208091040260200160405190810160405280929190818152602001828054612c3b906149c7565b8015612c885780601f10612c5d57610100808354040283529160200191612c88565b820191906000526020600020905b815481529060010190602001808311612c6b57829003601f168201915b5050505050905090565b60606000821415612cda576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612dee565b600082905060005b60008214612d0c578080612cf590614a2a565b915050600a82612d059190614852565b9150612ce2565b60008167ffffffffffffffff811115612d2857612d27614b8f565b5b6040519080825280601f01601f191660200182016040528015612d5a5781602001600182028036833780820191505090505b5090505b60008514612de757600182612d7391906148dd565b9150600a85612d829190614a73565b6030612d8e91906147fc565b60f81b818381518110612da457612da3614b60565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612de09190614852565b9450612d5e565b8093505050505b919050565b60008183612e0191906148dd565b905092915050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b612e7e838383613179565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612ec157612ebc8161317e565b612f00565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614612eff57612efe83826131c7565b5b5b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff161415612f4357612f3e81613334565b612f82565b8273ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614612f8157612f808282613405565b5b5b505050565b612f918383613484565b612f9e6000848484612fe2565b612fdd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612fd49061433d565b60405180910390fd5b505050565b60006130038473ffffffffffffffffffffffffffffffffffffffff16613652565b1561316c578373ffffffffffffffffffffffffffffffffffffffff1663150b7a0261302c6123de565b8786866040518563ffffffff1660e01b815260040161304e9493929190614249565b602060405180830381600087803b15801561306857600080fd5b505af192505050801561309957506040513d601f19601f820116820180604052508101906130969190613bb2565b60015b61311c573d80600081146130c9576040519150601f19603f3d011682016040523d82523d6000602084013e6130ce565b606091505b50600081511415613114576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161310b9061433d565b60405180910390fd5b805181602001fd5b63150b7a0260e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614915050613171565b600190505b949350505050565b505050565b6008805490506009600083815260200190815260200160002081905550600881908060018154018082558091505060019003906000526020600020016000909190919091505550565b600060016131d484611332565b6131de91906148dd565b90506000600760008481526020019081526020016000205490508181146132c3576000600660008673ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002054905080600660008773ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600084815260200190815260200160002081905550816007600083815260200190815260200160002081905550505b6007600084815260200190815260200160002060009055600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008381526020019081526020016000206000905550505050565b6000600160088054905061334891906148dd565b905060006009600084815260200190815260200160002054905060006008838154811061337857613377614b60565b5b90600052602060002001549050806008838154811061339a57613399614b60565b5b9060005260206000200181905550816009600083815260200190815260200160002081905550600960008581526020019081526020016000206000905560088054806133e9576133e8614b31565b5b6001900381819060005260206000200160009055905550505050565b600061341083611332565b905081600660008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600083815260200190815260200160002081905550806007600084815260200190815260200160002081905550505050565b600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff1614156134f4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134eb9061451d565b60405180910390fd5b6134fd816124c8565b1561353d576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135349061437d565b60405180910390fd5b61354960008383612e73565b6001600360008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461359991906147fc565b92505081905550816002600083815260200190815260200160002060006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff160217905550808273ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff167fddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef60405160405180910390a45050565b600080823b905060008111915050919050565b828054613671906149c7565b90600052602060002090601f01602090048101928261369357600085556136da565b82601f106136ac57805160ff19168380011785556136da565b828001600101855582156136da579182015b828111156136d95782518255916020019190600101906136be565b5b5090506136e79190613775565b5090565b828054828255906000526020600020908101928215613764579160200282015b828111156137635782518260006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055509160200191906001019061370b565b5b5090506137719190613775565b5090565b5b8082111561378e576000816000905550600101613776565b5090565b60006137a56137a0846146dd565b6146b8565b905080838252602082019050828560208602820111156137c8576137c7614bc3565b5b60005b858110156137f857816137de8882613886565b8452602084019350602083019250506001810190506137cb565b5050509392505050565b600061381561381084614709565b6146b8565b90508281526020810184848401111561383157613830614bc8565b5b61383c848285614985565b509392505050565b60006138576138528461473a565b6146b8565b90508281526020810184848401111561387357613872614bc8565b5b61387e848285614985565b509392505050565b600081359050613895816152c4565b92915050565b600082601f8301126138b0576138af614bbe565b5b81356138c0848260208601613792565b91505092915050565b6000813590506138d8816152db565b92915050565b6000813590506138ed816152f2565b92915050565b600081519050613902816152f2565b92915050565b600082601f83011261391d5761391c614bbe565b5b813561392d848260208601613802565b91505092915050565b600082601f83011261394b5761394a614bbe565b5b813561395b848260208601613844565b91505092915050565b60008135905061397381615309565b92915050565b60006020828403121561398f5761398e614bd2565b5b600061399d84828501613886565b91505092915050565b600080604083850312156139bd576139bc614bd2565b5b60006139cb85828601613886565b92505060206139dc85828601613886565b9150509250929050565b6000806000606084860312156139ff576139fe614bd2565b5b6000613a0d86828701613886565b9350506020613a1e86828701613886565b9250506040613a2f86828701613964565b9150509250925092565b60008060008060808587031215613a5357613a52614bd2565b5b6000613a6187828801613886565b9450506020613a7287828801613886565b9350506040613a8387828801613964565b925050606085013567ffffffffffffffff811115613aa457613aa3614bcd565b5b613ab087828801613908565b91505092959194509250565b60008060408385031215613ad357613ad2614bd2565b5b6000613ae185828601613886565b9250506020613af2858286016138c9565b9150509250929050565b60008060408385031215613b1357613b12614bd2565b5b6000613b2185828601613886565b9250506020613b3285828601613964565b9150509250929050565b600060208284031215613b5257613b51614bd2565b5b600082013567ffffffffffffffff811115613b7057613b6f614bcd565b5b613b7c8482850161389b565b91505092915050565b600060208284031215613b9b57613b9a614bd2565b5b6000613ba9848285016138de565b91505092915050565b600060208284031215613bc857613bc7614bd2565b5b6000613bd6848285016138f3565b91505092915050565b600060208284031215613bf557613bf4614bd2565b5b600082013567ffffffffffffffff811115613c1357613c12614bcd565b5b613c1f84828501613936565b91505092915050565b600060208284031215613c3e57613c3d614bd2565b5b6000613c4c84828501613964565b91505092915050565b6000613c6183836141df565b60208301905092915050565b613c7681614911565b82525050565b6000613c8782614790565b613c9181856147be565b9350613c9c8361476b565b8060005b83811015613ccd578151613cb48882613c55565b9750613cbf836147b1565b925050600181019050613ca0565b5085935050505092915050565b613ce381614923565b82525050565b6000613cf48261479b565b613cfe81856147cf565b9350613d0e818560208601614994565b613d1781614bd7565b840191505092915050565b6000613d2d826147a6565b613d3781856147e0565b9350613d47818560208601614994565b613d5081614bd7565b840191505092915050565b6000613d66826147a6565b613d7081856147f1565b9350613d80818560208601614994565b80840191505092915050565b60008154613d99816149c7565b613da381866147f1565b94506001821660008114613dbe5760018114613dcf57613e02565b60ff19831686528186019350613e02565b613dd88561477b565b60005b83811015613dfa57815481890152600182019150602081019050613ddb565b838801955050505b50505092915050565b6000613e18602b836147e0565b9150613e2382614be8565b604082019050919050565b6000613e3b6032836147e0565b9150613e4682614c37565b604082019050919050565b6000613e5e6026836147e0565b9150613e6982614c86565b604082019050919050565b6000613e81601c836147e0565b9150613e8c82614cd5565b602082019050919050565b6000613ea46024836147e0565b9150613eaf82614cfe565b604082019050919050565b6000613ec76019836147e0565b9150613ed282614d4d565b602082019050919050565b6000613eea6012836147e0565b9150613ef582614d76565b602082019050919050565b6000613f0d601b836147e0565b9150613f1882614d9f565b602082019050919050565b6000613f30602c836147e0565b9150613f3b82614dc8565b604082019050919050565b6000613f536025836147e0565b9150613f5e82614e17565b604082019050919050565b6000613f766016836147e0565b9150613f8182614e66565b602082019050919050565b6000613f99601d836147e0565b9150613fa482614e8f565b602082019050919050565b6000613fbc6038836147e0565b9150613fc782614eb8565b604082019050919050565b6000613fdf602a836147e0565b9150613fea82614f07565b604082019050919050565b60006140026029836147e0565b915061400d82614f56565b604082019050919050565b60006140256012836147e0565b915061403082614fa5565b602082019050919050565b60006140486020836147e0565b915061405382614fce565b602082019050919050565b600061406b6021836147e0565b915061407682614ff7565b604082019050919050565b600061408e602c836147e0565b915061409982615046565b604082019050919050565b60006140b16020836147e0565b91506140bc82615095565b602082019050919050565b60006140d46029836147e0565b91506140df826150be565b604082019050919050565b60006140f7602f836147e0565b91506141028261510d565b604082019050919050565b600061411a6013836147e0565b91506141258261515c565b602082019050919050565b600061413d6021836147e0565b915061414882615185565b604082019050919050565b60006141606020836147e0565b915061416b826151d4565b602082019050919050565b60006141836031836147e0565b915061418e826151fd565b604082019050919050565b60006141a66012836147e0565b91506141b18261524c565b602082019050919050565b60006141c9602c836147e0565b91506141d482615275565b604082019050919050565b6141e88161497b565b82525050565b6141f78161497b565b82525050565b60006142098286613d5b565b91506142158285613d5b565b91506142218284613d8c565b9150819050949350505050565b60006020820190506142436000830184613c6d565b92915050565b600060808201905061425e6000830187613c6d565b61426b6020830186613c6d565b61427860408301856141ee565b818103606083015261428a8184613ce9565b905095945050505050565b60006040820190506142aa6000830185613c6d565b6142b760208301846141ee565b9392505050565b600060208201905081810360008301526142d88184613c7c565b905092915050565b60006020820190506142f56000830184613cda565b92915050565b600060208201905081810360008301526143158184613d22565b905092915050565b6000602082019050818103600083015261433681613e0b565b9050919050565b6000602082019050818103600083015261435681613e2e565b9050919050565b6000602082019050818103600083015261437681613e51565b9050919050565b6000602082019050818103600083015261439681613e74565b9050919050565b600060208201905081810360008301526143b681613e97565b9050919050565b600060208201905081810360008301526143d681613eba565b9050919050565b600060208201905081810360008301526143f681613edd565b9050919050565b6000602082019050818103600083015261441681613f00565b9050919050565b6000602082019050818103600083015261443681613f23565b9050919050565b6000602082019050818103600083015261445681613f46565b9050919050565b6000602082019050818103600083015261447681613f69565b9050919050565b6000602082019050818103600083015261449681613f8c565b9050919050565b600060208201905081810360008301526144b681613faf565b9050919050565b600060208201905081810360008301526144d681613fd2565b9050919050565b600060208201905081810360008301526144f681613ff5565b9050919050565b6000602082019050818103600083015261451681614018565b9050919050565b600060208201905081810360008301526145368161403b565b9050919050565b600060208201905081810360008301526145568161405e565b9050919050565b6000602082019050818103600083015261457681614081565b9050919050565b60006020820190508181036000830152614596816140a4565b9050919050565b600060208201905081810360008301526145b6816140c7565b9050919050565b600060208201905081810360008301526145d6816140ea565b9050919050565b600060208201905081810360008301526145f68161410d565b9050919050565b6000602082019050818103600083015261461681614130565b9050919050565b6000602082019050818103600083015261463681614153565b9050919050565b6000602082019050818103600083015261465681614176565b9050919050565b6000602082019050818103600083015261467681614199565b9050919050565b60006020820190508181036000830152614696816141bc565b9050919050565b60006020820190506146b260008301846141ee565b92915050565b60006146c26146d3565b90506146ce82826149f9565b919050565b6000604051905090565b600067ffffffffffffffff8211156146f8576146f7614b8f565b5b602082029050602081019050919050565b600067ffffffffffffffff82111561472457614723614b8f565b5b61472d82614bd7565b9050602081019050919050565b600067ffffffffffffffff82111561475557614754614b8f565b5b61475e82614bd7565b9050602081019050919050565b6000819050602082019050919050565b60008190508160005260206000209050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006148078261497b565b91506148128361497b565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff0382111561484757614846614aa4565b5b828201905092915050565b600061485d8261497b565b91506148688361497b565b92508261487857614877614ad3565b5b828204905092915050565b600061488e8261497b565b91506148998361497b565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156148d2576148d1614aa4565b5b828202905092915050565b60006148e88261497b565b91506148f38361497b565b92508282101561490657614905614aa4565b5b828203905092915050565b600061491c8261495b565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b82818337600083830152505050565b60005b838110156149b2578082015181840152602081019050614997565b838111156149c1576000848401525b50505050565b600060028204905060018216806149df57607f821691505b602082108114156149f3576149f2614b02565b5b50919050565b614a0282614bd7565b810181811067ffffffffffffffff82111715614a2157614a20614b8f565b5b80604052505050565b6000614a358261497b565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff821415614a6857614a67614aa4565b5b600182019050919050565b6000614a7e8261497b565b9150614a898361497b565b925082614a9957614a98614ad3565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f455243373231456e756d657261626c653a206f776e657220696e646578206f7560008201527f74206f6620626f756e6473000000000000000000000000000000000000000000602082015250565b7f4552433732313a207472616e7366657220746f206e6f6e20455243373231526560008201527f63656976657220696d706c656d656e7465720000000000000000000000000000602082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20746f6b656e20616c7265616479206d696e74656400000000600082015250565b7f4552433732313a207472616e7366657220746f20746865207a65726f2061646460008201527f7265737300000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f766520746f2063616c6c657200000000000000600082015250565b7f41626f7665206d617820747820636f756e740000000000000000000000000000600082015250565b7f53616c65206d7573742062652061637469766520746f206d696e740000000000600082015250565b7f4552433732313a206f70657261746f7220717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f742074686520646576416460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f415641582073656e7420697320696e636f727265637400000000000000000000600082015250565b7f5374617274696e6720696e64657820697320616c726561647920736574000000600082015250565b7f4552433732313a20617070726f76652063616c6c6572206973206e6f74206f7760008201527f6e6572206e6f7220617070726f76656420666f7220616c6c0000000000000000602082015250565b7f4552433732313a2062616c616e636520717565727920666f7220746865207a6560008201527f726f206164647265737300000000000000000000000000000000000000000000602082015250565b7f4552433732313a206f776e657220717565727920666f72206e6f6e657869737460008201527f656e7420746f6b656e0000000000000000000000000000000000000000000000602082015250565b7f45786365656473206d617820737570706c790000000000000000000000000000600082015250565b7f4552433732313a206d696e7420746f20746865207a65726f2061646472657373600082015250565b7f43616e206f6e6c79206d696e742031207768696c652077686974656c6973746560008201527f6400000000000000000000000000000000000000000000000000000000000000602082015250565b7f4552433732313a20617070726f76656420717565727920666f72206e6f6e657860008201527f697374656e7420746f6b656e0000000000000000000000000000000000000000602082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f4552433732313a207472616e73666572206f6620746f6b656e2074686174206960008201527f73206e6f74206f776e0000000000000000000000000000000000000000000000602082015250565b7f4552433732314d657461646174613a2055524920717565727920666f72206e6f60008201527f6e6578697374656e7420746f6b656e0000000000000000000000000000000000602082015250565b7f416c72656164792077686974656c697374656400000000000000000000000000600082015250565b7f4552433732313a20617070726f76616c20746f2063757272656e74206f776e6560008201527f7200000000000000000000000000000000000000000000000000000000000000602082015250565b7f5374617274696e6720696e64657820626c6f636b206d75737420626520736574600082015250565b7f4552433732313a207472616e736665722063616c6c6572206973206e6f74206f60008201527f776e6572206e6f7220617070726f766564000000000000000000000000000000602082015250565b7f4973206e6f742077686974656c69737465640000000000000000000000000000600082015250565b7f455243373231456e756d657261626c653a20676c6f62616c20696e646578206f60008201527f7574206f6620626f756e64730000000000000000000000000000000000000000602082015250565b6152cd81614911565b81146152d857600080fd5b50565b6152e481614923565b81146152ef57600080fd5b50565b6152fb8161492f565b811461530657600080fd5b50565b6153128161497b565b811461531d57600080fd5b5056fea2646970667358221220a51f09f6816755fc1e5753e8029a06aa63c4659f52f22576cf3c887218a9079764736f6c63430008070033
Deployed Bytecode Sourcemap
54671:6155:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60592:231;;;;;;;;;;;;;:::i;:::-;;47298:224;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55564:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32787:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34346:221;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33869:411;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47938:113;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58827:313;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47606:256;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56903:89;;;;;;;;;;;;;:::i;:::-;;55008:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57000:110;;;;;;;;;;;;;:::i;:::-;;55437:79;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60452:132;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59148:173;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;48128:233;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56656:103;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54911:44;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32481:239;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32211:208;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11757:103;;;;;;;;;;;;;:::i;:::-;;57666:1153;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;60186:258;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57118:540;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55057:42;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;11106:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54805:24;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;32956:104;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55352:46;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;;:::i;:::-;;;;;;;;34639:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55151:35;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59329:355;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54964:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56292:356;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54836:28;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55238:26;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56767:128;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55770:112;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54871:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;34865:164;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;59692:486;;;;;;;;;;;;;:::i;:::-;;55525:32;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;55890:273;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;12015:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55106:38;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;60592:231;60653:12;:10;:12::i;:::-;60639:26;;55474:42;60639:26;;;60631:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;55474:42;60718:37;;:60;60756:21;60718:60;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;60592:231::o;47298:224::-;47400:4;47439:35;47424:50;;;:11;:50;;;;:90;;;;47478:36;47502:11;47478:23;:36::i;:::-;47424:90;47417:97;;47298:224;;;:::o;55564:38::-;;;;;;;;;;;;;:::o;32787:100::-;32841:13;32874:5;32867:12;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32787:100;:::o;34346:221::-;34422:7;34450:16;34458:7;34450;:16::i;:::-;34442:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;34535:15;:24;34551:7;34535:24;;;;;;;;;;;;;;;;;;;;;34528:31;;34346:221;;;:::o;33869:411::-;33950:13;33966:23;33981:7;33966:14;:23::i;:::-;33950:39;;34014:5;34008:11;;:2;:11;;;;34000:57;;;;;;;;;;;;:::i;:::-;;;;;;;;;34108:5;34092:21;;:12;:10;:12::i;:::-;:21;;;:62;;;;34117:37;34134:5;34141:12;:10;:12::i;:::-;34117:16;:37::i;:::-;34092:62;34070:168;;;;;;;;;;;;:::i;:::-;;;;;;;;;34251:21;34260:2;34264:7;34251:8;:21::i;:::-;33939:341;33869:411;;:::o;47938:113::-;47999:7;48026:10;:17;;;;48019:24;;47938:113;:::o;58827:313::-;58971:41;58990:12;:10;:12::i;:::-;59004:7;58971:18;:41::i;:::-;58949:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;59104:28;59114:4;59120:2;59124:7;59104:9;:28::i;:::-;58827:313;;;:::o;47606:256::-;47703:7;47739:23;47756:5;47739:16;:23::i;:::-;47731:5;:31;47723:87;;;;;;;;;;;;:::i;:::-;;;;;;;;;47828:12;:19;47841:5;47828:19;;;;;;;;;;;;;;;:26;47848:5;47828:26;;;;;;;;;;;;47821:33;;47606:256;;;;:::o;56903:89::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56972:12:::1;;;;;;;;;;;56971:13;56956:12;;:28;;;;;;;;;;;;;;;;;;56903:89::o:0;55008:42::-;55047:3;55008:42;:::o;57000:110::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;57083:19:::1;;;;;;;;;;;57082:20;57060:19;;:42;;;;;;;;;;;;;;;;;;57000:110::o:0;55437:79::-;55474:42;55437:79;:::o;60452:132::-;60510:18;60572:4;60548:28;;:9;:15;60558:4;60548:15;;;;;;;;;;;;;;;:20;;;;;;;;;;;;:28;;;60541:35;;60452:132;;;:::o;59148:173::-;59274:39;59291:4;59297:2;59301:7;59274:39;;;;;;;;;;;;:16;:39::i;:::-;59148:173;;;:::o;48128:233::-;48203:7;48239:30;:28;:30::i;:::-;48231:5;:38;48223:95;;;;;;;;;;;;:::i;:::-;;;;;;;;;48336:10;48347:5;48336:17;;;;;;;;:::i;:::-;;;;;;;;;;48329:24;;48128:233;;;:::o;56656:103::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56744:7:::1;56729:12;:22;;;;;;;;;;;;:::i;:::-;;56656:103:::0;:::o;54911:44::-;;;;;;;;;;;;;;;;;;;;;;:::o;32481:239::-;32553:7;32573:13;32589:7;:16;32597:7;32589:16;;;;;;;;;;;;;;;;;;;;;32573:32;;32641:1;32624:19;;:5;:19;;;;32616:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;32707:5;32700:12;;;32481:239;;;:::o;32211:208::-;32283:7;32328:1;32311:19;;:5;:19;;;;32303:74;;;;;;;;;;;;:::i;:::-;;;;;;;;;32395:9;:16;32405:5;32395:16;;;;;;;;;;;;;;;;32388:23;;32211:208;;;:::o;11757:103::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;11822:30:::1;11849:1;11822:18;:30::i;:::-;11757:103::o:0;57666:1153::-;57755:12;;;;;;;;;;;57747:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;55047:3;57820:33;57838:14;57820:13;:11;:13::i;:::-;:17;;:33;;;;:::i;:::-;:49;;57812:80;;;;;;;;;;;;:::i;:::-;;;;;;;;;57942:9;57913:25;57923:14;55089:10;57913:9;;:25;;;;:::i;:::-;:38;;57905:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;57994:19;;;;;;;;;;;57991:604;;;58058:16;;58040:14;:34;;58032:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;58122:18;58136:3;58122:13;:18::i;:::-;58114:49;;;;;;;;;;;;:::i;:::-;;;;;;;;;58236:16;;58188:44;58217:14;58188:9;:14;58198:3;58188:14;;;;;;;;;;;;;;;:24;;;:28;;:44;;;;:::i;:::-;:64;;58180:110;;;;;;;;;;;;:::i;:::-;;;;;;;;;58343:16;;58315:9;:14;58325:3;58315:14;;;;;;;;;;;;;;;:24;;;:44;;58307:90;;;;;;;;;;;;:::i;:::-;;;;;;;;;58441:44;58470:14;58441:9;:14;58451:3;58441:14;;;;;;;;;;;;;;;:24;;;:28;;:44;;;;:::i;:::-;58414:9;:14;58424:3;58414:14;;;;;;;;;;;;;;;:24;;:71;;;;57991:604;;;55143:1;58530:14;:28;;58522:59;;;;;;;;;;;;:::i;:::-;;;;;;;;;57991:604;58613:6;58609:203;58629:14;58625:1;:18;58609:203;;;58667:14;58684:13;:11;:13::i;:::-;58667:30;;58714:25;58724:3;58729:9;58714;:25::i;:::-;58788:9;58763:35;;;;;;;;;;58650:162;58645:3;;;;;:::i;:::-;;;;58609:203;;;;57666:1153;;:::o;60186:258::-;60256:12;11337;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;60290:19:::1;60304:4;60290:13;:19::i;:::-;60289:20;60281:52;;;;;;;;;;;;:::i;:::-;;;;;;;;;60367:4;60344:9;:15;60354:4;60344:15;;;;;;;;;;;;;;;:20;;;:27;;;;;;;;;;;;;;;;;;60410:1;60382:9;:15;60392:4;60382:15;;;;;;;;;;;;;;;:25;;:29;;;;60432:4;60422:14;;60186:258:::0;;;:::o;57118:540::-;57179:16;57209:18;57230:17;57240:6;57230:9;:17::i;:::-;57209:38;;57276:1;57262:10;:15;57258:393;;;57353:1;57339:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57332:23;;;;;57258:393;57388:23;57428:10;57414:25;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57388:51;;57454:13;57482:130;57506:10;57498:5;:18;57482:130;;;57562:34;57582:6;57590:5;57562:19;:34::i;:::-;57546:6;57553:5;57546:13;;;;;;;;:::i;:::-;;;;;;;:50;;;;;57518:7;;;;;:::i;:::-;;;;57482:130;;;57633:6;57626:13;;;;;57118:540;;;;:::o;55057:42::-;55089:10;55057:42;:::o;11106:87::-;11152:7;11179:6;;;;;;;;;;;11172:13;;11106:87;:::o;54805:24::-;;;;;;;;;;;;;:::o;32956:104::-;33012:13;33045:7;33038:14;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32956:104;:::o;55352:46::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;34639:155::-;34734:52;34753:12;:10;:12::i;:::-;34767:8;34777;34734:18;:52::i;:::-;34639:155;;:::o;55151:35::-;;;;:::o;59329:355::-;59504:41;59523:12;:10;:12::i;:::-;59537:7;59504:18;:41::i;:::-;59482:142;;;;;;;;;;;;:::i;:::-;;;;;;;;;59637:39;59651:4;59657:2;59661:7;59670:5;59637:13;:39::i;:::-;59329:355;;;;:::o;54964:37::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56292:356::-;56365:13;56399:16;56407:7;56399;:16::i;:::-;56391:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;56480:21;56504:10;:8;:10::i;:::-;56480:34;;56556:1;56538:7;56532:21;:25;:108;;;;;;;;;;;;;;;;;56584:7;56593:25;56610:7;56593:16;:25::i;:::-;56620:13;56567:67;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;56532:108;56525:115;;;56292:356;;;:::o;54836:28::-;;;;:::o;55238:26::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;56767:128::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56870:17:::1;56854:13;:33;;;;;;;;;;;;:::i;:::-;;56767:128:::0;:::o;55770:112::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55865:9:::1;55846:16;:28;;;;55770:112:::0;:::o;54871:33::-;;;;:::o;34865:164::-;34962:4;34986:18;:25;35005:5;34986:25;;;;;;;;;;;;;;;:35;35012:8;34986:35;;;;;;;;;;;;;;;;;;;;;;;;;34979:42;;34865:164;;;;:::o;59692:486::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;59773:1:::1;59756:13;;:18;59748:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;59849:1;59827:18;;:23;;59819:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;55047:3;59929:18;;59919:29;59914:35;;:50;;;;:::i;:::-;59898:13;:66;;;;60075:3;60036:36;60053:18;;60036:12;:16;;:36;;;;:::i;:::-;:42;60032:139;;;55047:3;60141:1;60126:12;:16;;;;:::i;:::-;60116:27;60111:33;;:48;;;;:::i;:::-;60095:13;:64;;;;60032:139;59692:486::o:0;55525:32::-;;;;;;;;;;;;;:::o;55890:273::-;55961:12;11337;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;56002:5:::1;55986:13;:21;;;;;;;;;;;;:::i;:::-;;56022:6;56018:113;56038:13;:20;;;;56034:1;:24;56018:113;;;56080:39;56102:13;56116:1;56102:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;56080:21;:39::i;:::-;;56060:3;;;;;:::i;:::-;;;;56018:113;;;;56151:4;56141:14;;55890:273:::0;;;:::o;12015:201::-;11337:12;:10;:12::i;:::-;11326:23;;:7;:5;:7::i;:::-;:23;;;11318:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;12124:1:::1;12104:22;;:8;:22;;;;12096:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;12180:28;12199:8;12180:18;:28::i;:::-;12015:201:::0;:::o;55106:38::-;55143:1;55106:38;:::o;9830:98::-;9883:7;9910:10;9903:17;;9830:98;:::o;31842:305::-;31944:4;31996:25;31981:40;;;:11;:40;;;;:105;;;;32053:33;32038:48;;;:11;:48;;;;31981:105;:158;;;;32103:36;32127:11;32103:23;:36::i;:::-;31981:158;31961:178;;31842:305;;;:::o;37600:127::-;37665:4;37717:1;37689:30;;:7;:16;37697:7;37689:16;;;;;;;;;;;;;;;;;;;;;:30;;;;37682:37;;37600:127;;;:::o;41582:174::-;41684:2;41657:15;:24;41673:7;41657:24;;;;;;;;;;;;:29;;;;;;;;;;;;;;;;;;41740:7;41736:2;41702:46;;41711:23;41726:7;41711:14;:23::i;:::-;41702:46;;;;;;;;;;;;41582:174;;:::o;37894:348::-;37987:4;38012:16;38020:7;38012;:16::i;:::-;38004:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;38088:13;38104:23;38119:7;38104:14;:23::i;:::-;38088:39;;38157:5;38146:16;;:7;:16;;;:51;;;;38190:7;38166:31;;:20;38178:7;38166:11;:20::i;:::-;:31;;;38146:51;:87;;;;38201:32;38218:5;38225:7;38201:16;:32::i;:::-;38146:87;38138:96;;;37894:348;;;;:::o;40886:578::-;41045:4;41018:31;;:23;41033:7;41018:14;:23::i;:::-;:31;;;41010:85;;;;;;;;;;;;:::i;:::-;;;;;;;;;41128:1;41114:16;;:2;:16;;;;41106:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;41184:39;41205:4;41211:2;41215:7;41184:20;:39::i;:::-;41288:29;41305:1;41309:7;41288:8;:29::i;:::-;41349:1;41330:9;:15;41340:4;41330:15;;;;;;;;;;;;;;;;:20;;;;;;;:::i;:::-;;;;;;;;41378:1;41361:9;:13;41371:2;41361:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;41409:2;41390:7;:16;41398:7;41390:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;41448:7;41444:2;41429:27;;41438:4;41429:27;;;;;;;;;;;;40886:578;;;:::o;12376:191::-;12450:16;12469:6;;;;;;;;;;;12450:25;;12495:8;12486:6;;:17;;;;;;;;;;;;;;;;;;12550:8;12519:40;;12540:8;12519:40;;;;;;;;;;;;12439:128;12376:191;:::o;2862:98::-;2920:7;2951:1;2947;:5;;;;:::i;:::-;2940:12;;2862:98;;;;:::o;3600:::-;3658:7;3689:1;3685;:5;;;;:::i;:::-;3678:12;;3600:98;;;;:::o;38584:110::-;38660:26;38670:2;38674:7;38660:26;;;;;;;;;;;;:9;:26::i;:::-;38584:110;;:::o;41898:315::-;42053:8;42044:17;;:5;:17;;;;42036:55;;;;;;;;;;;;:::i;:::-;;;;;;;;;42140:8;42102:18;:25;42121:5;42102:25;;;;;;;;;;;;;;;:35;42128:8;42102:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42186:8;42164:41;;42179:5;42164:41;;;42196:8;42164:41;;;;;;:::i;:::-;;;;;;;;41898:315;;;:::o;36972:::-;37129:28;37139:4;37145:2;37149:7;37129:9;:28::i;:::-;37176:48;37199:4;37205:2;37209:7;37218:5;37176:22;:48::i;:::-;37168:111;;;;;;;;;;;;:::i;:::-;;;;;;;;;36972:315;;;;:::o;56171:113::-;56231:13;56264:12;56257:19;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;56171:113;:::o;7392:723::-;7448:13;7678:1;7669:5;:10;7665:53;;;7696:10;;;;;;;;;;;;;;;;;;;;;7665:53;7728:12;7743:5;7728:20;;7759:14;7784:78;7799:1;7791:4;:9;7784:78;;7817:8;;;;;:::i;:::-;;;;7848:2;7840:10;;;;;:::i;:::-;;;7784:78;;;7872:19;7904:6;7894:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;7872:39;;7922:154;7938:1;7929:5;:10;7922:154;;7966:1;7956:11;;;;;:::i;:::-;;;8033:2;8025:5;:10;;;;:::i;:::-;8012:2;:24;;;;:::i;:::-;7999:39;;7982:6;7989;7982:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;8062:2;8053:11;;;;;:::i;:::-;;;7922:154;;;8100:6;8086:21;;;;;7392:723;;;;:::o;3243:98::-;3301:7;3332:1;3328;:5;;;;:::i;:::-;3321:12;;3243:98;;;;:::o;23538:157::-;23623:4;23662:25;23647:40;;;:11;:40;;;;23640:47;;23538:157;;;:::o;48974:589::-;49118:45;49145:4;49151:2;49155:7;49118:26;:45::i;:::-;49196:1;49180:18;;:4;:18;;;49176:187;;;49215:40;49247:7;49215:31;:40::i;:::-;49176:187;;;49285:2;49277:10;;:4;:10;;;49273:90;;49304:47;49337:4;49343:7;49304:32;:47::i;:::-;49273:90;49176:187;49391:1;49377:16;;:2;:16;;;49373:183;;;49410:45;49447:7;49410:36;:45::i;:::-;49373:183;;;49483:4;49477:10;;:2;:10;;;49473:83;;49504:40;49532:2;49536:7;49504:27;:40::i;:::-;49473:83;49373:183;48974:589;;;:::o;38921:321::-;39051:18;39057:2;39061:7;39051:5;:18::i;:::-;39102:54;39133:1;39137:2;39141:7;39150:5;39102:22;:54::i;:::-;39080:154;;;;;;;;;;;;:::i;:::-;;;;;;;;;38921:321;;;:::o;42778:799::-;42933:4;42954:15;:2;:13;;;:15::i;:::-;42950:620;;;43006:2;42990:36;;;43027:12;:10;:12::i;:::-;43041:4;43047:7;43056:5;42990:72;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;42986:529;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43249:1;43232:6;:13;:18;43228:272;;;43275:60;;;;;;;;;;:::i;:::-;;;;;;;;43228:272;43450:6;43444:13;43435:6;43431:2;43427:15;43420:38;42986:529;43123:41;;;43113:51;;;:6;:51;;;;43106:58;;;;;42950:620;43554:4;43547:11;;42778:799;;;;;;;:::o;44149:126::-;;;;:::o;50286:164::-;50390:10;:17;;;;50363:15;:24;50379:7;50363:24;;;;;;;;;;;:44;;;;50418:10;50434:7;50418:24;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;50286:164;:::o;51077:988::-;51343:22;51393:1;51368:22;51385:4;51368:16;:22::i;:::-;:26;;;;:::i;:::-;51343:51;;51405:18;51426:17;:26;51444:7;51426:26;;;;;;;;;;;;51405:47;;51573:14;51559:10;:28;51555:328;;51604:19;51626:12;:18;51639:4;51626:18;;;;;;;;;;;;;;;:34;51645:14;51626:34;;;;;;;;;;;;51604:56;;51710:11;51677:12;:18;51690:4;51677:18;;;;;;;;;;;;;;;:30;51696:10;51677:30;;;;;;;;;;;:44;;;;51827:10;51794:17;:30;51812:11;51794:30;;;;;;;;;;;:43;;;;51589:294;51555:328;51979:17;:26;51997:7;51979:26;;;;;;;;;;;51972:33;;;52023:12;:18;52036:4;52023:18;;;;;;;;;;;;;;;:34;52042:14;52023:34;;;;;;;;;;;52016:41;;;51158:907;;51077:988;;:::o;52360:1079::-;52613:22;52658:1;52638:10;:17;;;;:21;;;;:::i;:::-;52613:46;;52670:18;52691:15;:24;52707:7;52691:24;;;;;;;;;;;;52670:45;;53042:19;53064:10;53075:14;53064:26;;;;;;;;:::i;:::-;;;;;;;;;;53042:48;;53128:11;53103:10;53114;53103:22;;;;;;;;:::i;:::-;;;;;;;;;:36;;;;53239:10;53208:15;:28;53224:11;53208:28;;;;;;;;;;;:41;;;;53380:15;:24;53396:7;53380:24;;;;;;;;;;;53373:31;;;53415:10;:16;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;52431:1008;;;52360:1079;:::o;49864:221::-;49949:14;49966:20;49983:2;49966:16;:20::i;:::-;49949:37;;50024:7;49997:12;:16;50010:2;49997:16;;;;;;;;;;;;;;;:24;50014:6;49997:24;;;;;;;;;;;:34;;;;50071:6;50042:17;:26;50060:7;50042:26;;;;;;;;;;;:35;;;;49938:147;49864:221;;:::o;39578:382::-;39672:1;39658:16;;:2;:16;;;;39650:61;;;;;;;;;;;;:::i;:::-;;;;;;;;;39731:16;39739:7;39731;:16::i;:::-;39730:17;39722:58;;;;;;;;;;;;:::i;:::-;;;;;;;;;39793:45;39822:1;39826:2;39830:7;39793:20;:45::i;:::-;39868:1;39851:9;:13;39861:2;39851:13;;;;;;;;;;;;;;;;:18;;;;;;;:::i;:::-;;;;;;;;39899:2;39880:7;:16;39888:7;39880:16;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;39944:7;39940:2;39919:33;;39936:1;39919:33;;;;;;;;;;;;39578:382;;:::o;13394:387::-;13454:4;13662:12;13729:7;13717:20;13709:28;;13772:1;13765:4;:8;13758:15;;;13394:387;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;:::o;:::-;;;;;;;;;;;;;;;;;;;;;:::o;24:722:1:-;120:5;145:81;161:64;218:6;161:64;:::i;:::-;145:81;:::i;:::-;136:90;;246:5;275:6;268:5;261:21;309:4;302:5;298:16;291:23;;335:6;385:3;377:4;369:6;365:17;360:3;356:27;353:36;350:143;;;404:79;;:::i;:::-;350:143;517:1;502:238;527:6;524:1;521:13;502:238;;;595:3;624:37;657:3;645:10;624:37;:::i;:::-;619:3;612:50;691:4;686:3;682:14;675:21;;725:4;720:3;716:14;709:21;;562:178;549:1;546;542:9;537:14;;502:238;;;506:14;126:620;;24:722;;;;;:::o;752:410::-;829:5;854:65;870:48;911:6;870:48;:::i;:::-;854:65;:::i;:::-;845:74;;942:6;935:5;928:21;980:4;973:5;969:16;1018:3;1009:6;1004:3;1000:16;997:25;994:112;;;1025:79;;:::i;:::-;994:112;1115:41;1149:6;1144:3;1139;1115:41;:::i;:::-;835:327;752:410;;;;;:::o;1168:412::-;1246:5;1271:66;1287:49;1329:6;1287:49;:::i;:::-;1271:66;:::i;:::-;1262:75;;1360:6;1353:5;1346:21;1398:4;1391:5;1387:16;1436:3;1427:6;1422:3;1418:16;1415:25;1412:112;;;1443:79;;:::i;:::-;1412:112;1533:41;1567:6;1562:3;1557;1533:41;:::i;:::-;1252:328;1168:412;;;;;:::o;1586:139::-;1632:5;1670:6;1657:20;1648:29;;1686:33;1713:5;1686:33;:::i;:::-;1586:139;;;;:::o;1748:370::-;1819:5;1868:3;1861:4;1853:6;1849:17;1845:27;1835:122;;1876:79;;:::i;:::-;1835:122;1993:6;1980:20;2018:94;2108:3;2100:6;2093:4;2085:6;2081:17;2018:94;:::i;:::-;2009:103;;1825:293;1748:370;;;;:::o;2124:133::-;2167:5;2205:6;2192:20;2183:29;;2221:30;2245:5;2221:30;:::i;:::-;2124:133;;;;:::o;2263:137::-;2308:5;2346:6;2333:20;2324:29;;2362:32;2388:5;2362:32;:::i;:::-;2263:137;;;;:::o;2406:141::-;2462:5;2493:6;2487:13;2478:22;;2509:32;2535:5;2509:32;:::i;:::-;2406:141;;;;:::o;2566:338::-;2621:5;2670:3;2663:4;2655:6;2651:17;2647:27;2637:122;;2678:79;;:::i;:::-;2637:122;2795:6;2782:20;2820:78;2894:3;2886:6;2879:4;2871:6;2867:17;2820:78;:::i;:::-;2811:87;;2627:277;2566:338;;;;:::o;2924:340::-;2980:5;3029:3;3022:4;3014:6;3010:17;3006:27;2996:122;;3037:79;;:::i;:::-;2996:122;3154:6;3141:20;3179:79;3254:3;3246:6;3239:4;3231:6;3227:17;3179:79;:::i;:::-;3170:88;;2986:278;2924:340;;;;:::o;3270:139::-;3316:5;3354:6;3341:20;3332:29;;3370:33;3397:5;3370:33;:::i;:::-;3270:139;;;;:::o;3415:329::-;3474:6;3523:2;3511:9;3502:7;3498:23;3494:32;3491:119;;;3529:79;;:::i;:::-;3491:119;3649:1;3674:53;3719:7;3710:6;3699:9;3695:22;3674:53;:::i;:::-;3664:63;;3620:117;3415:329;;;;:::o;3750:474::-;3818:6;3826;3875:2;3863:9;3854:7;3850:23;3846:32;3843:119;;;3881:79;;:::i;:::-;3843:119;4001:1;4026:53;4071:7;4062:6;4051:9;4047:22;4026:53;:::i;:::-;4016:63;;3972:117;4128:2;4154:53;4199:7;4190:6;4179:9;4175:22;4154:53;:::i;:::-;4144:63;;4099:118;3750:474;;;;;:::o;4230:619::-;4307:6;4315;4323;4372:2;4360:9;4351:7;4347:23;4343:32;4340:119;;;4378:79;;:::i;:::-;4340:119;4498:1;4523:53;4568:7;4559:6;4548:9;4544:22;4523:53;:::i;:::-;4513:63;;4469:117;4625:2;4651:53;4696:7;4687:6;4676:9;4672:22;4651:53;:::i;:::-;4641:63;;4596:118;4753:2;4779:53;4824:7;4815:6;4804:9;4800:22;4779:53;:::i;:::-;4769:63;;4724:118;4230:619;;;;;:::o;4855:943::-;4950:6;4958;4966;4974;5023:3;5011:9;5002:7;4998:23;4994:33;4991:120;;;5030:79;;:::i;:::-;4991:120;5150:1;5175:53;5220:7;5211:6;5200:9;5196:22;5175:53;:::i;:::-;5165:63;;5121:117;5277:2;5303:53;5348:7;5339:6;5328:9;5324:22;5303:53;:::i;:::-;5293:63;;5248:118;5405:2;5431:53;5476:7;5467:6;5456:9;5452:22;5431:53;:::i;:::-;5421:63;;5376:118;5561:2;5550:9;5546:18;5533:32;5592:18;5584:6;5581:30;5578:117;;;5614:79;;:::i;:::-;5578:117;5719:62;5773:7;5764:6;5753:9;5749:22;5719:62;:::i;:::-;5709:72;;5504:287;4855:943;;;;;;;:::o;5804:468::-;5869:6;5877;5926:2;5914:9;5905:7;5901:23;5897:32;5894:119;;;5932:79;;:::i;:::-;5894:119;6052:1;6077:53;6122:7;6113:6;6102:9;6098:22;6077:53;:::i;:::-;6067:63;;6023:117;6179:2;6205:50;6247:7;6238:6;6227:9;6223:22;6205:50;:::i;:::-;6195:60;;6150:115;5804:468;;;;;:::o;6278:474::-;6346:6;6354;6403:2;6391:9;6382:7;6378:23;6374:32;6371:119;;;6409:79;;:::i;:::-;6371:119;6529:1;6554:53;6599:7;6590:6;6579:9;6575:22;6554:53;:::i;:::-;6544:63;;6500:117;6656:2;6682:53;6727:7;6718:6;6707:9;6703:22;6682:53;:::i;:::-;6672:63;;6627:118;6278:474;;;;;:::o;6758:539::-;6842:6;6891:2;6879:9;6870:7;6866:23;6862:32;6859:119;;;6897:79;;:::i;:::-;6859:119;7045:1;7034:9;7030:17;7017:31;7075:18;7067:6;7064:30;7061:117;;;7097:79;;:::i;:::-;7061:117;7202:78;7272:7;7263:6;7252:9;7248:22;7202:78;:::i;:::-;7192:88;;6988:302;6758:539;;;;:::o;7303:327::-;7361:6;7410:2;7398:9;7389:7;7385:23;7381:32;7378:119;;;7416:79;;:::i;:::-;7378:119;7536:1;7561:52;7605:7;7596:6;7585:9;7581:22;7561:52;:::i;:::-;7551:62;;7507:116;7303:327;;;;:::o;7636:349::-;7705:6;7754:2;7742:9;7733:7;7729:23;7725:32;7722:119;;;7760:79;;:::i;:::-;7722:119;7880:1;7905:63;7960:7;7951:6;7940:9;7936:22;7905:63;:::i;:::-;7895:73;;7851:127;7636:349;;;;:::o;7991:509::-;8060:6;8109:2;8097:9;8088:7;8084:23;8080:32;8077:119;;;8115:79;;:::i;:::-;8077:119;8263:1;8252:9;8248:17;8235:31;8293:18;8285:6;8282:30;8279:117;;;8315:79;;:::i;:::-;8279:117;8420:63;8475:7;8466:6;8455:9;8451:22;8420:63;:::i;:::-;8410:73;;8206:287;7991:509;;;;:::o;8506:329::-;8565:6;8614:2;8602:9;8593:7;8589:23;8585:32;8582:119;;;8620:79;;:::i;:::-;8582:119;8740:1;8765:53;8810:7;8801:6;8790:9;8786:22;8765:53;:::i;:::-;8755:63;;8711:117;8506:329;;;;:::o;8841:179::-;8910:10;8931:46;8973:3;8965:6;8931:46;:::i;:::-;9009:4;9004:3;9000:14;8986:28;;8841:179;;;;:::o;9026:118::-;9113:24;9131:5;9113:24;:::i;:::-;9108:3;9101:37;9026:118;;:::o;9180:732::-;9299:3;9328:54;9376:5;9328:54;:::i;:::-;9398:86;9477:6;9472:3;9398:86;:::i;:::-;9391:93;;9508:56;9558:5;9508:56;:::i;:::-;9587:7;9618:1;9603:284;9628:6;9625:1;9622:13;9603:284;;;9704:6;9698:13;9731:63;9790:3;9775:13;9731:63;:::i;:::-;9724:70;;9817:60;9870:6;9817:60;:::i;:::-;9807:70;;9663:224;9650:1;9647;9643:9;9638:14;;9603:284;;;9607:14;9903:3;9896:10;;9304:608;;;9180:732;;;;:::o;9918:109::-;9999:21;10014:5;9999:21;:::i;:::-;9994:3;9987:34;9918:109;;:::o;10033:360::-;10119:3;10147:38;10179:5;10147:38;:::i;:::-;10201:70;10264:6;10259:3;10201:70;:::i;:::-;10194:77;;10280:52;10325:6;10320:3;10313:4;10306:5;10302:16;10280:52;:::i;:::-;10357:29;10379:6;10357:29;:::i;:::-;10352:3;10348:39;10341:46;;10123:270;10033:360;;;;:::o;10399:364::-;10487:3;10515:39;10548:5;10515:39;:::i;:::-;10570:71;10634:6;10629:3;10570:71;:::i;:::-;10563:78;;10650:52;10695:6;10690:3;10683:4;10676:5;10672:16;10650:52;:::i;:::-;10727:29;10749:6;10727:29;:::i;:::-;10722:3;10718:39;10711:46;;10491:272;10399:364;;;;:::o;10769:377::-;10875:3;10903:39;10936:5;10903:39;:::i;:::-;10958:89;11040:6;11035:3;10958:89;:::i;:::-;10951:96;;11056:52;11101:6;11096:3;11089:4;11082:5;11078:16;11056:52;:::i;:::-;11133:6;11128:3;11124:16;11117:23;;10879:267;10769:377;;;;:::o;11176:845::-;11279:3;11316:5;11310:12;11345:36;11371:9;11345:36;:::i;:::-;11397:89;11479:6;11474:3;11397:89;:::i;:::-;11390:96;;11517:1;11506:9;11502:17;11533:1;11528:137;;;;11679:1;11674:341;;;;11495:520;;11528:137;11612:4;11608:9;11597;11593:25;11588:3;11581:38;11648:6;11643:3;11639:16;11632:23;;11528:137;;11674:341;11741:38;11773:5;11741:38;:::i;:::-;11801:1;11815:154;11829:6;11826:1;11823:13;11815:154;;;11903:7;11897:14;11893:1;11888:3;11884:11;11877:35;11953:1;11944:7;11940:15;11929:26;;11851:4;11848:1;11844:12;11839:17;;11815:154;;;11998:6;11993:3;11989:16;11982:23;;11681:334;;11495:520;;11283:738;;11176:845;;;;:::o;12027:366::-;12169:3;12190:67;12254:2;12249:3;12190:67;:::i;:::-;12183:74;;12266:93;12355:3;12266:93;:::i;:::-;12384:2;12379:3;12375:12;12368:19;;12027:366;;;:::o;12399:::-;12541:3;12562:67;12626:2;12621:3;12562:67;:::i;:::-;12555:74;;12638:93;12727:3;12638:93;:::i;:::-;12756:2;12751:3;12747:12;12740:19;;12399:366;;;:::o;12771:::-;12913:3;12934:67;12998:2;12993:3;12934:67;:::i;:::-;12927:74;;13010:93;13099:3;13010:93;:::i;:::-;13128:2;13123:3;13119:12;13112:19;;12771:366;;;:::o;13143:::-;13285:3;13306:67;13370:2;13365:3;13306:67;:::i;:::-;13299:74;;13382:93;13471:3;13382:93;:::i;:::-;13500:2;13495:3;13491:12;13484:19;;13143:366;;;:::o;13515:::-;13657:3;13678:67;13742:2;13737:3;13678:67;:::i;:::-;13671:74;;13754:93;13843:3;13754:93;:::i;:::-;13872:2;13867:3;13863:12;13856:19;;13515:366;;;:::o;13887:::-;14029:3;14050:67;14114:2;14109:3;14050:67;:::i;:::-;14043:74;;14126:93;14215:3;14126:93;:::i;:::-;14244:2;14239:3;14235:12;14228:19;;13887:366;;;:::o;14259:::-;14401:3;14422:67;14486:2;14481:3;14422:67;:::i;:::-;14415:74;;14498:93;14587:3;14498:93;:::i;:::-;14616:2;14611:3;14607:12;14600:19;;14259:366;;;:::o;14631:::-;14773:3;14794:67;14858:2;14853:3;14794:67;:::i;:::-;14787:74;;14870:93;14959:3;14870:93;:::i;:::-;14988:2;14983:3;14979:12;14972:19;;14631:366;;;:::o;15003:::-;15145:3;15166:67;15230:2;15225:3;15166:67;:::i;:::-;15159:74;;15242:93;15331:3;15242:93;:::i;:::-;15360:2;15355:3;15351:12;15344:19;;15003:366;;;:::o;15375:::-;15517:3;15538:67;15602:2;15597:3;15538:67;:::i;:::-;15531:74;;15614:93;15703:3;15614:93;:::i;:::-;15732:2;15727:3;15723:12;15716:19;;15375:366;;;:::o;15747:::-;15889:3;15910:67;15974:2;15969:3;15910:67;:::i;:::-;15903:74;;15986:93;16075:3;15986:93;:::i;:::-;16104:2;16099:3;16095:12;16088:19;;15747:366;;;:::o;16119:::-;16261:3;16282:67;16346:2;16341:3;16282:67;:::i;:::-;16275:74;;16358:93;16447:3;16358:93;:::i;:::-;16476:2;16471:3;16467:12;16460:19;;16119:366;;;:::o;16491:::-;16633:3;16654:67;16718:2;16713:3;16654:67;:::i;:::-;16647:74;;16730:93;16819:3;16730:93;:::i;:::-;16848:2;16843:3;16839:12;16832:19;;16491:366;;;:::o;16863:::-;17005:3;17026:67;17090:2;17085:3;17026:67;:::i;:::-;17019:74;;17102:93;17191:3;17102:93;:::i;:::-;17220:2;17215:3;17211:12;17204:19;;16863:366;;;:::o;17235:::-;17377:3;17398:67;17462:2;17457:3;17398:67;:::i;:::-;17391:74;;17474:93;17563:3;17474:93;:::i;:::-;17592:2;17587:3;17583:12;17576:19;;17235:366;;;:::o;17607:::-;17749:3;17770:67;17834:2;17829:3;17770:67;:::i;:::-;17763:74;;17846:93;17935:3;17846:93;:::i;:::-;17964:2;17959:3;17955:12;17948:19;;17607:366;;;:::o;17979:::-;18121:3;18142:67;18206:2;18201:3;18142:67;:::i;:::-;18135:74;;18218:93;18307:3;18218:93;:::i;:::-;18336:2;18331:3;18327:12;18320:19;;17979:366;;;:::o;18351:::-;18493:3;18514:67;18578:2;18573:3;18514:67;:::i;:::-;18507:74;;18590:93;18679:3;18590:93;:::i;:::-;18708:2;18703:3;18699:12;18692:19;;18351:366;;;:::o;18723:::-;18865:3;18886:67;18950:2;18945:3;18886:67;:::i;:::-;18879:74;;18962:93;19051:3;18962:93;:::i;:::-;19080:2;19075:3;19071:12;19064:19;;18723:366;;;:::o;19095:::-;19237:3;19258:67;19322:2;19317:3;19258:67;:::i;:::-;19251:74;;19334:93;19423:3;19334:93;:::i;:::-;19452:2;19447:3;19443:12;19436:19;;19095:366;;;:::o;19467:::-;19609:3;19630:67;19694:2;19689:3;19630:67;:::i;:::-;19623:74;;19706:93;19795:3;19706:93;:::i;:::-;19824:2;19819:3;19815:12;19808:19;;19467:366;;;:::o;19839:::-;19981:3;20002:67;20066:2;20061:3;20002:67;:::i;:::-;19995:74;;20078:93;20167:3;20078:93;:::i;:::-;20196:2;20191:3;20187:12;20180:19;;19839:366;;;:::o;20211:::-;20353:3;20374:67;20438:2;20433:3;20374:67;:::i;:::-;20367:74;;20450:93;20539:3;20450:93;:::i;:::-;20568:2;20563:3;20559:12;20552:19;;20211:366;;;:::o;20583:::-;20725:3;20746:67;20810:2;20805:3;20746:67;:::i;:::-;20739:74;;20822:93;20911:3;20822:93;:::i;:::-;20940:2;20935:3;20931:12;20924:19;;20583:366;;;:::o;20955:::-;21097:3;21118:67;21182:2;21177:3;21118:67;:::i;:::-;21111:74;;21194:93;21283:3;21194:93;:::i;:::-;21312:2;21307:3;21303:12;21296:19;;20955:366;;;:::o;21327:::-;21469:3;21490:67;21554:2;21549:3;21490:67;:::i;:::-;21483:74;;21566:93;21655:3;21566:93;:::i;:::-;21684:2;21679:3;21675:12;21668:19;;21327:366;;;:::o;21699:::-;21841:3;21862:67;21926:2;21921:3;21862:67;:::i;:::-;21855:74;;21938:93;22027:3;21938:93;:::i;:::-;22056:2;22051:3;22047:12;22040:19;;21699:366;;;:::o;22071:::-;22213:3;22234:67;22298:2;22293:3;22234:67;:::i;:::-;22227:74;;22310:93;22399:3;22310:93;:::i;:::-;22428:2;22423:3;22419:12;22412:19;;22071:366;;;:::o;22443:108::-;22520:24;22538:5;22520:24;:::i;:::-;22515:3;22508:37;22443:108;;:::o;22557:118::-;22644:24;22662:5;22644:24;:::i;:::-;22639:3;22632:37;22557:118;;:::o;22681:589::-;22906:3;22928:95;23019:3;23010:6;22928:95;:::i;:::-;22921:102;;23040:95;23131:3;23122:6;23040:95;:::i;:::-;23033:102;;23152:92;23240:3;23231:6;23152:92;:::i;:::-;23145:99;;23261:3;23254:10;;22681:589;;;;;;:::o;23276:222::-;23369:4;23407:2;23396:9;23392:18;23384:26;;23420:71;23488:1;23477:9;23473:17;23464:6;23420:71;:::i;:::-;23276:222;;;;:::o;23504:640::-;23699:4;23737:3;23726:9;23722:19;23714:27;;23751:71;23819:1;23808:9;23804:17;23795:6;23751:71;:::i;:::-;23832:72;23900:2;23889:9;23885:18;23876:6;23832:72;:::i;:::-;23914;23982:2;23971:9;23967:18;23958:6;23914:72;:::i;:::-;24033:9;24027:4;24023:20;24018:2;24007:9;24003:18;23996:48;24061:76;24132:4;24123:6;24061:76;:::i;:::-;24053:84;;23504:640;;;;;;;:::o;24150:332::-;24271:4;24309:2;24298:9;24294:18;24286:26;;24322:71;24390:1;24379:9;24375:17;24366:6;24322:71;:::i;:::-;24403:72;24471:2;24460:9;24456:18;24447:6;24403:72;:::i;:::-;24150:332;;;;;:::o;24488:373::-;24631:4;24669:2;24658:9;24654:18;24646:26;;24718:9;24712:4;24708:20;24704:1;24693:9;24689:17;24682:47;24746:108;24849:4;24840:6;24746:108;:::i;:::-;24738:116;;24488:373;;;;:::o;24867:210::-;24954:4;24992:2;24981:9;24977:18;24969:26;;25005:65;25067:1;25056:9;25052:17;25043:6;25005:65;:::i;:::-;24867:210;;;;:::o;25083:313::-;25196:4;25234:2;25223:9;25219:18;25211:26;;25283:9;25277:4;25273:20;25269:1;25258:9;25254:17;25247:47;25311:78;25384:4;25375:6;25311:78;:::i;:::-;25303:86;;25083:313;;;;:::o;25402:419::-;25568:4;25606:2;25595:9;25591:18;25583:26;;25655:9;25649:4;25645:20;25641:1;25630:9;25626:17;25619:47;25683:131;25809:4;25683:131;:::i;:::-;25675:139;;25402:419;;;:::o;25827:::-;25993:4;26031:2;26020:9;26016:18;26008:26;;26080:9;26074:4;26070:20;26066:1;26055:9;26051:17;26044:47;26108:131;26234:4;26108:131;:::i;:::-;26100:139;;25827:419;;;:::o;26252:::-;26418:4;26456:2;26445:9;26441:18;26433:26;;26505:9;26499:4;26495:20;26491:1;26480:9;26476:17;26469:47;26533:131;26659:4;26533:131;:::i;:::-;26525:139;;26252:419;;;:::o;26677:::-;26843:4;26881:2;26870:9;26866:18;26858:26;;26930:9;26924:4;26920:20;26916:1;26905:9;26901:17;26894:47;26958:131;27084:4;26958:131;:::i;:::-;26950:139;;26677:419;;;:::o;27102:::-;27268:4;27306:2;27295:9;27291:18;27283:26;;27355:9;27349:4;27345:20;27341:1;27330:9;27326:17;27319:47;27383:131;27509:4;27383:131;:::i;:::-;27375:139;;27102:419;;;:::o;27527:::-;27693:4;27731:2;27720:9;27716:18;27708:26;;27780:9;27774:4;27770:20;27766:1;27755:9;27751:17;27744:47;27808:131;27934:4;27808:131;:::i;:::-;27800:139;;27527:419;;;:::o;27952:::-;28118:4;28156:2;28145:9;28141:18;28133:26;;28205:9;28199:4;28195:20;28191:1;28180:9;28176:17;28169:47;28233:131;28359:4;28233:131;:::i;:::-;28225:139;;27952:419;;;:::o;28377:::-;28543:4;28581:2;28570:9;28566:18;28558:26;;28630:9;28624:4;28620:20;28616:1;28605:9;28601:17;28594:47;28658:131;28784:4;28658:131;:::i;:::-;28650:139;;28377:419;;;:::o;28802:::-;28968:4;29006:2;28995:9;28991:18;28983:26;;29055:9;29049:4;29045:20;29041:1;29030:9;29026:17;29019:47;29083:131;29209:4;29083:131;:::i;:::-;29075:139;;28802:419;;;:::o;29227:::-;29393:4;29431:2;29420:9;29416:18;29408:26;;29480:9;29474:4;29470:20;29466:1;29455:9;29451:17;29444:47;29508:131;29634:4;29508:131;:::i;:::-;29500:139;;29227:419;;;:::o;29652:::-;29818:4;29856:2;29845:9;29841:18;29833:26;;29905:9;29899:4;29895:20;29891:1;29880:9;29876:17;29869:47;29933:131;30059:4;29933:131;:::i;:::-;29925:139;;29652:419;;;:::o;30077:::-;30243:4;30281:2;30270:9;30266:18;30258:26;;30330:9;30324:4;30320:20;30316:1;30305:9;30301:17;30294:47;30358:131;30484:4;30358:131;:::i;:::-;30350:139;;30077:419;;;:::o;30502:::-;30668:4;30706:2;30695:9;30691:18;30683:26;;30755:9;30749:4;30745:20;30741:1;30730:9;30726:17;30719:47;30783:131;30909:4;30783:131;:::i;:::-;30775:139;;30502:419;;;:::o;30927:::-;31093:4;31131:2;31120:9;31116:18;31108:26;;31180:9;31174:4;31170:20;31166:1;31155:9;31151:17;31144:47;31208:131;31334:4;31208:131;:::i;:::-;31200:139;;30927:419;;;:::o;31352:::-;31518:4;31556:2;31545:9;31541:18;31533:26;;31605:9;31599:4;31595:20;31591:1;31580:9;31576:17;31569:47;31633:131;31759:4;31633:131;:::i;:::-;31625:139;;31352:419;;;:::o;31777:::-;31943:4;31981:2;31970:9;31966:18;31958:26;;32030:9;32024:4;32020:20;32016:1;32005:9;32001:17;31994:47;32058:131;32184:4;32058:131;:::i;:::-;32050:139;;31777:419;;;:::o;32202:::-;32368:4;32406:2;32395:9;32391:18;32383:26;;32455:9;32449:4;32445:20;32441:1;32430:9;32426:17;32419:47;32483:131;32609:4;32483:131;:::i;:::-;32475:139;;32202:419;;;:::o;32627:::-;32793:4;32831:2;32820:9;32816:18;32808:26;;32880:9;32874:4;32870:20;32866:1;32855:9;32851:17;32844:47;32908:131;33034:4;32908:131;:::i;:::-;32900:139;;32627:419;;;:::o;33052:::-;33218:4;33256:2;33245:9;33241:18;33233:26;;33305:9;33299:4;33295:20;33291:1;33280:9;33276:17;33269:47;33333:131;33459:4;33333:131;:::i;:::-;33325:139;;33052:419;;;:::o;33477:::-;33643:4;33681:2;33670:9;33666:18;33658:26;;33730:9;33724:4;33720:20;33716:1;33705:9;33701:17;33694:47;33758:131;33884:4;33758:131;:::i;:::-;33750:139;;33477:419;;;:::o;33902:::-;34068:4;34106:2;34095:9;34091:18;34083:26;;34155:9;34149:4;34145:20;34141:1;34130:9;34126:17;34119:47;34183:131;34309:4;34183:131;:::i;:::-;34175:139;;33902:419;;;:::o;34327:::-;34493:4;34531:2;34520:9;34516:18;34508:26;;34580:9;34574:4;34570:20;34566:1;34555:9;34551:17;34544:47;34608:131;34734:4;34608:131;:::i;:::-;34600:139;;34327:419;;;:::o;34752:::-;34918:4;34956:2;34945:9;34941:18;34933:26;;35005:9;34999:4;34995:20;34991:1;34980:9;34976:17;34969:47;35033:131;35159:4;35033:131;:::i;:::-;35025:139;;34752:419;;;:::o;35177:::-;35343:4;35381:2;35370:9;35366:18;35358:26;;35430:9;35424:4;35420:20;35416:1;35405:9;35401:17;35394:47;35458:131;35584:4;35458:131;:::i;:::-;35450:139;;35177:419;;;:::o;35602:::-;35768:4;35806:2;35795:9;35791:18;35783:26;;35855:9;35849:4;35845:20;35841:1;35830:9;35826:17;35819:47;35883:131;36009:4;35883:131;:::i;:::-;35875:139;;35602:419;;;:::o;36027:::-;36193:4;36231:2;36220:9;36216:18;36208:26;;36280:9;36274:4;36270:20;36266:1;36255:9;36251:17;36244:47;36308:131;36434:4;36308:131;:::i;:::-;36300:139;;36027:419;;;:::o;36452:::-;36618:4;36656:2;36645:9;36641:18;36633:26;;36705:9;36699:4;36695:20;36691:1;36680:9;36676:17;36669:47;36733:131;36859:4;36733:131;:::i;:::-;36725:139;;36452:419;;;:::o;36877:::-;37043:4;37081:2;37070:9;37066:18;37058:26;;37130:9;37124:4;37120:20;37116:1;37105:9;37101:17;37094:47;37158:131;37284:4;37158:131;:::i;:::-;37150:139;;36877:419;;;:::o;37302:222::-;37395:4;37433:2;37422:9;37418:18;37410:26;;37446:71;37514:1;37503:9;37499:17;37490:6;37446:71;:::i;:::-;37302:222;;;;:::o;37530:129::-;37564:6;37591:20;;:::i;:::-;37581:30;;37620:33;37648:4;37640:6;37620:33;:::i;:::-;37530:129;;;:::o;37665:75::-;37698:6;37731:2;37725:9;37715:19;;37665:75;:::o;37746:311::-;37823:4;37913:18;37905:6;37902:30;37899:56;;;37935:18;;:::i;:::-;37899:56;37985:4;37977:6;37973:17;37965:25;;38045:4;38039;38035:15;38027:23;;37746:311;;;:::o;38063:307::-;38124:4;38214:18;38206:6;38203:30;38200:56;;;38236:18;;:::i;:::-;38200:56;38274:29;38296:6;38274:29;:::i;:::-;38266:37;;38358:4;38352;38348:15;38340:23;;38063:307;;;:::o;38376:308::-;38438:4;38528:18;38520:6;38517:30;38514:56;;;38550:18;;:::i;:::-;38514:56;38588:29;38610:6;38588:29;:::i;:::-;38580:37;;38672:4;38666;38662:15;38654:23;;38376:308;;;:::o;38690:132::-;38757:4;38780:3;38772:11;;38810:4;38805:3;38801:14;38793:22;;38690:132;;;:::o;38828:141::-;38877:4;38900:3;38892:11;;38923:3;38920:1;38913:14;38957:4;38954:1;38944:18;38936:26;;38828:141;;;:::o;38975:114::-;39042:6;39076:5;39070:12;39060:22;;38975:114;;;:::o;39095:98::-;39146:6;39180:5;39174:12;39164:22;;39095:98;;;:::o;39199:99::-;39251:6;39285:5;39279:12;39269:22;;39199:99;;;:::o;39304:113::-;39374:4;39406;39401:3;39397:14;39389:22;;39304:113;;;:::o;39423:184::-;39522:11;39556:6;39551:3;39544:19;39596:4;39591:3;39587:14;39572:29;;39423:184;;;;:::o;39613:168::-;39696:11;39730:6;39725:3;39718:19;39770:4;39765:3;39761:14;39746:29;;39613:168;;;;:::o;39787:169::-;39871:11;39905:6;39900:3;39893:19;39945:4;39940:3;39936:14;39921:29;;39787:169;;;;:::o;39962:148::-;40064:11;40101:3;40086:18;;39962:148;;;;:::o;40116:305::-;40156:3;40175:20;40193:1;40175:20;:::i;:::-;40170:25;;40209:20;40227:1;40209:20;:::i;:::-;40204:25;;40363:1;40295:66;40291:74;40288:1;40285:81;40282:107;;;40369:18;;:::i;:::-;40282:107;40413:1;40410;40406:9;40399:16;;40116:305;;;;:::o;40427:185::-;40467:1;40484:20;40502:1;40484:20;:::i;:::-;40479:25;;40518:20;40536:1;40518:20;:::i;:::-;40513:25;;40557:1;40547:35;;40562:18;;:::i;:::-;40547:35;40604:1;40601;40597:9;40592:14;;40427:185;;;;:::o;40618:348::-;40658:7;40681:20;40699:1;40681:20;:::i;:::-;40676:25;;40715:20;40733:1;40715:20;:::i;:::-;40710:25;;40903:1;40835:66;40831:74;40828:1;40825:81;40820:1;40813:9;40806:17;40802:105;40799:131;;;40910:18;;:::i;:::-;40799:131;40958:1;40955;40951:9;40940:20;;40618:348;;;;:::o;40972:191::-;41012:4;41032:20;41050:1;41032:20;:::i;:::-;41027:25;;41066:20;41084:1;41066:20;:::i;:::-;41061:25;;41105:1;41102;41099:8;41096:34;;;41110:18;;:::i;:::-;41096:34;41155:1;41152;41148:9;41140:17;;40972:191;;;;:::o;41169:96::-;41206:7;41235:24;41253:5;41235:24;:::i;:::-;41224:35;;41169:96;;;:::o;41271:90::-;41305:7;41348:5;41341:13;41334:21;41323:32;;41271:90;;;:::o;41367:149::-;41403:7;41443:66;41436:5;41432:78;41421:89;;41367:149;;;:::o;41522:126::-;41559:7;41599:42;41592:5;41588:54;41577:65;;41522:126;;;:::o;41654:77::-;41691:7;41720:5;41709:16;;41654:77;;;:::o;41737:154::-;41821:6;41816:3;41811;41798:30;41883:1;41874:6;41869:3;41865:16;41858:27;41737:154;;;:::o;41897:307::-;41965:1;41975:113;41989:6;41986:1;41983:13;41975:113;;;42074:1;42069:3;42065:11;42059:18;42055:1;42050:3;42046:11;42039:39;42011:2;42008:1;42004:10;41999:15;;41975:113;;;42106:6;42103:1;42100:13;42097:101;;;42186:1;42177:6;42172:3;42168:16;42161:27;42097:101;41946:258;41897:307;;;:::o;42210:320::-;42254:6;42291:1;42285:4;42281:12;42271:22;;42338:1;42332:4;42328:12;42359:18;42349:81;;42415:4;42407:6;42403:17;42393:27;;42349:81;42477:2;42469:6;42466:14;42446:18;42443:38;42440:84;;;42496:18;;:::i;:::-;42440:84;42261:269;42210:320;;;:::o;42536:281::-;42619:27;42641:4;42619:27;:::i;:::-;42611:6;42607:40;42749:6;42737:10;42734:22;42713:18;42701:10;42698:34;42695:62;42692:88;;;42760:18;;:::i;:::-;42692:88;42800:10;42796:2;42789:22;42579:238;42536:281;;:::o;42823:233::-;42862:3;42885:24;42903:5;42885:24;:::i;:::-;42876:33;;42931:66;42924:5;42921:77;42918:103;;;43001:18;;:::i;:::-;42918:103;43048:1;43041:5;43037:13;43030:20;;42823:233;;;:::o;43062:176::-;43094:1;43111:20;43129:1;43111:20;:::i;:::-;43106:25;;43145:20;43163:1;43145:20;:::i;:::-;43140:25;;43184:1;43174:35;;43189:18;;:::i;:::-;43174:35;43230:1;43227;43223:9;43218:14;;43062:176;;;;:::o;43244:180::-;43292:77;43289:1;43282:88;43389:4;43386:1;43379:15;43413:4;43410:1;43403:15;43430:180;43478:77;43475:1;43468:88;43575:4;43572:1;43565:15;43599:4;43596:1;43589:15;43616:180;43664:77;43661:1;43654:88;43761:4;43758:1;43751:15;43785:4;43782:1;43775:15;43802:180;43850:77;43847:1;43840:88;43947:4;43944:1;43937:15;43971:4;43968:1;43961:15;43988:180;44036:77;44033:1;44026:88;44133:4;44130:1;44123:15;44157:4;44154:1;44147:15;44174:180;44222:77;44219:1;44212:88;44319:4;44316:1;44309:15;44343:4;44340:1;44333:15;44360:117;44469:1;44466;44459:12;44483:117;44592:1;44589;44582:12;44606:117;44715:1;44712;44705:12;44729:117;44838:1;44835;44828:12;44852:117;44961:1;44958;44951:12;44975:102;45016:6;45067:2;45063:7;45058:2;45051:5;45047:14;45043:28;45033:38;;44975:102;;;:::o;45083:230::-;45223:34;45219:1;45211:6;45207:14;45200:58;45292:13;45287:2;45279:6;45275:15;45268:38;45083:230;:::o;45319:237::-;45459:34;45455:1;45447:6;45443:14;45436:58;45528:20;45523:2;45515:6;45511:15;45504:45;45319:237;:::o;45562:225::-;45702:34;45698:1;45690:6;45686:14;45679:58;45771:8;45766:2;45758:6;45754:15;45747:33;45562:225;:::o;45793:178::-;45933:30;45929:1;45921:6;45917:14;45910:54;45793:178;:::o;45977:223::-;46117:34;46113:1;46105:6;46101:14;46094:58;46186:6;46181:2;46173:6;46169:15;46162:31;45977:223;:::o;46206:175::-;46346:27;46342:1;46334:6;46330:14;46323:51;46206:175;:::o;46387:168::-;46527:20;46523:1;46515:6;46511:14;46504:44;46387:168;:::o;46561:177::-;46701:29;46697:1;46689:6;46685:14;46678:53;46561:177;:::o;46744:231::-;46884:34;46880:1;46872:6;46868:14;46861:58;46953:14;46948:2;46940:6;46936:15;46929:39;46744:231;:::o;46981:224::-;47121:34;47117:1;47109:6;47105:14;47098:58;47190:7;47185:2;47177:6;47173:15;47166:32;46981:224;:::o;47211:172::-;47351:24;47347:1;47339:6;47335:14;47328:48;47211:172;:::o;47389:179::-;47529:31;47525:1;47517:6;47513:14;47506:55;47389:179;:::o;47574:243::-;47714:34;47710:1;47702:6;47698:14;47691:58;47783:26;47778:2;47770:6;47766:15;47759:51;47574:243;:::o;47823:229::-;47963:34;47959:1;47951:6;47947:14;47940:58;48032:12;48027:2;48019:6;48015:15;48008:37;47823:229;:::o;48058:228::-;48198:34;48194:1;48186:6;48182:14;48175:58;48267:11;48262:2;48254:6;48250:15;48243:36;48058:228;:::o;48292:168::-;48432:20;48428:1;48420:6;48416:14;48409:44;48292:168;:::o;48466:182::-;48606:34;48602:1;48594:6;48590:14;48583:58;48466:182;:::o;48654:220::-;48794:34;48790:1;48782:6;48778:14;48771:58;48863:3;48858:2;48850:6;48846:15;48839:28;48654:220;:::o;48880:231::-;49020:34;49016:1;49008:6;49004:14;48997:58;49089:14;49084:2;49076:6;49072:15;49065:39;48880:231;:::o;49117:182::-;49257:34;49253:1;49245:6;49241:14;49234:58;49117:182;:::o;49305:228::-;49445:34;49441:1;49433:6;49429:14;49422:58;49514:11;49509:2;49501:6;49497:15;49490:36;49305:228;:::o;49539:234::-;49679:34;49675:1;49667:6;49663:14;49656:58;49748:17;49743:2;49735:6;49731:15;49724:42;49539:234;:::o;49779:169::-;49919:21;49915:1;49907:6;49903:14;49896:45;49779:169;:::o;49954:220::-;50094:34;50090:1;50082:6;50078:14;50071:58;50163:3;50158:2;50150:6;50146:15;50139:28;49954:220;:::o;50180:182::-;50320:34;50316:1;50308:6;50304:14;50297:58;50180:182;:::o;50368:236::-;50508:34;50504:1;50496:6;50492:14;50485:58;50577:19;50572:2;50564:6;50560:15;50553:44;50368:236;:::o;50610:168::-;50750:20;50746:1;50738:6;50734:14;50727:44;50610:168;:::o;50784:231::-;50924:34;50920:1;50912:6;50908:14;50901:58;50993:14;50988:2;50980:6;50976:15;50969:39;50784:231;:::o;51021:122::-;51094:24;51112:5;51094:24;:::i;:::-;51087:5;51084:35;51074:63;;51133:1;51130;51123:12;51074:63;51021:122;:::o;51149:116::-;51219:21;51234:5;51219:21;:::i;:::-;51212:5;51209:32;51199:60;;51255:1;51252;51245:12;51199:60;51149:116;:::o;51271:120::-;51343:23;51360:5;51343:23;:::i;:::-;51336:5;51333:34;51323:62;;51381:1;51378;51371:12;51323:62;51271:120;:::o;51397:122::-;51470:24;51488:5;51470:24;:::i;:::-;51463:5;51460:35;51450:63;;51509:1;51506;51499:12;51450:63;51397:122;:::o
Swarm Source
ipfs://a51f09f6816755fc1e5753e8029a06aa63c4659f52f22576cf3c887218a90797
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 34 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|
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.