More Info
Private Name Tags
ContractCreator
TokenTracker
Latest 25 from a total of 33 transactions
Transaction Hash |
Method
|
Block
|
From
|
To
|
|||||
---|---|---|---|---|---|---|---|---|---|
Mint | 17566004 | 547 days ago | IN | 0.08 ETH | 0.00147869 | ||||
Set Approval For... | 16821570 | 652 days ago | IN | 0 ETH | 0.00122413 | ||||
Set Approval For... | 16644159 | 677 days ago | IN | 0 ETH | 0.00176157 | ||||
Set Approval For... | 16619104 | 680 days ago | IN | 0 ETH | 0.00099431 | ||||
Safe Transfer Fr... | 16595082 | 683 days ago | IN | 0 ETH | 0.00124643 | ||||
Set Approval For... | 16548636 | 690 days ago | IN | 0 ETH | 0.00168018 | ||||
Set Approval For... | 16525896 | 693 days ago | IN | 0 ETH | 0.0006294 | ||||
Set Approval For... | 16487729 | 698 days ago | IN | 0 ETH | 0.0008411 | ||||
Mint | 15883127 | 783 days ago | IN | 0.08 ETH | 0.00125842 | ||||
Set Approval For... | 15874182 | 784 days ago | IN | 0 ETH | 0.00050895 | ||||
Safe Transfer Fr... | 15866539 | 785 days ago | IN | 0 ETH | 0.00037998 | ||||
Mint | 15866527 | 785 days ago | IN | 0.08 ETH | 0.00069203 | ||||
Owner Mint | 15838067 | 789 days ago | IN | 0 ETH | 0.00128935 | ||||
Mint | 15825502 | 791 days ago | IN | 0.08 ETH | 0.00269541 | ||||
Mint | 15804452 | 794 days ago | IN | 0.08 ETH | 0.00240469 | ||||
Mint | 15802513 | 794 days ago | IN | 0.08 ETH | 0.00173431 | ||||
Mint | 15795703 | 795 days ago | IN | 0.08 ETH | 0.00229786 | ||||
Mint | 15788696 | 796 days ago | IN | 0.08 ETH | 0.00197241 | ||||
Mint | 15785357 | 797 days ago | IN | 0.08 ETH | 0.0026736 | ||||
Mint | 15782368 | 797 days ago | IN | 0.08 ETH | 0.0019455 | ||||
Mint | 15782075 | 797 days ago | IN | 0.08 ETH | 0.0013622 | ||||
Set Approval For... | 15780970 | 797 days ago | IN | 0 ETH | 0.00087084 | ||||
Mint | 15780742 | 797 days ago | IN | 0.08 ETH | 0.00171619 | ||||
Mint | 15780717 | 797 days ago | IN | 0.08 ETH | 0.00168406 | ||||
Mint | 15780453 | 797 days ago | IN | 0.08 ETH | 0.00151682 |
View more zero value Internal Transactions in Advanced View mode
Advanced mode:
Loading...
Loading
Contract Name:
MetaSkullWhitelistPass
Compiler Version
v0.8.7+commit.e28d00a7
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2022-10-18 */ // SPDX-License-Identifier: MIT // File: @openzeppelin/contracts/security/ReentrancyGuard.sol // OpenZeppelin Contracts v4.4.1 (security/ReentrancyGuard.sol) pragma solidity ^0.8.0; /** * @dev Contract module that helps prevent reentrant calls to a function. * * Inheriting from `ReentrancyGuard` will make the {nonReentrant} modifier * available, which can be applied to functions to make sure there are no nested * (reentrant) calls to them. * * Note that because there is a single `nonReentrant` guard, functions marked as * `nonReentrant` may not call one another. This can be worked around by making * those functions `private`, and then adding `external` `nonReentrant` entry * points to them. * * TIP: If you would like to learn more about reentrancy and alternative ways * to protect against it, check out our blog post * https://blog.openzeppelin.com/reentrancy-after-istanbul/[Reentrancy After Istanbul]. */ abstract contract ReentrancyGuard { // Booleans are more expensive than uint256 or any type that takes up a full // word because each write operation emits an extra SLOAD to first read the // slot's contents, replace the bits taken up by the boolean, and then write // back. This is the compiler's defense against contract upgrades and // pointer aliasing, and it cannot be disabled. // The values being non-zero value makes deployment a bit more expensive, // but in exchange the refund on every call to nonReentrant will be lower in // amount. Since refunds are capped to a percentage of the total // transaction's gas, it is best to keep them low in cases like this one, to // increase the likelihood of the full refund coming into effect. uint256 private constant _NOT_ENTERED = 1; uint256 private constant _ENTERED = 2; uint256 private _status; constructor() { _status = _NOT_ENTERED; } /** * @dev Prevents a contract from calling itself, directly or indirectly. * Calling a `nonReentrant` function from another `nonReentrant` * function is not supported. It is possible to prevent this from happening * by making the `nonReentrant` function external, and making it call a * `private` function that does the actual work. */ modifier nonReentrant() { // On the first call to nonReentrant, _notEntered will be true require(_status != _ENTERED, "ReentrancyGuard: reentrant call"); // Any calls to nonReentrant after this point will fail _status = _ENTERED; _; // By storing the original value once again, a refund is triggered (see // https://eips.ethereum.org/EIPS/eip-2200) _status = _NOT_ENTERED; } } // File: @openzeppelin/contracts/utils/Strings.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Strings.sol) pragma solidity ^0.8.0; /** * @dev String operations. */ library Strings { bytes16 private constant _HEX_SYMBOLS = "0123456789abcdef"; uint8 private constant _ADDRESS_LENGTH = 20; /** * @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); } /** * @dev Converts an `address` with fixed length of 20 bytes to its not checksummed ASCII `string` hexadecimal representation. */ function toHexString(address addr) internal pure returns (string memory) { return toHexString(uint256(uint160(addr)), _ADDRESS_LENGTH); } } // 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/security/Pausable.sol // OpenZeppelin Contracts (last updated v4.7.0) (security/Pausable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which allows children to implement an emergency stop * mechanism that can be triggered by an authorized account. * * This module is used through inheritance. It will make available the * modifiers `whenNotPaused` and `whenPaused`, which can be applied to * the functions of your contract. Note that they will not be pausable by * simply including this module, only once the modifiers are put in place. */ abstract contract Pausable is Context { /** * @dev Emitted when the pause is triggered by `account`. */ event Paused(address account); /** * @dev Emitted when the pause is lifted by `account`. */ event Unpaused(address account); bool private _paused; /** * @dev Initializes the contract in unpaused state. */ constructor() { _paused = false; } /** * @dev Modifier to make a function callable only when the contract is not paused. * * Requirements: * * - The contract must not be paused. */ modifier whenNotPaused() { _requireNotPaused(); _; } /** * @dev Modifier to make a function callable only when the contract is paused. * * Requirements: * * - The contract must be paused. */ modifier whenPaused() { _requirePaused(); _; } /** * @dev Returns true if the contract is paused, and false otherwise. */ function paused() public view virtual returns (bool) { return _paused; } /** * @dev Throws if the contract is paused. */ function _requireNotPaused() internal view virtual { require(!paused(), "Pausable: paused"); } /** * @dev Throws if the contract is not paused. */ function _requirePaused() internal view virtual { require(paused(), "Pausable: not paused"); } /** * @dev Triggers stopped state. * * Requirements: * * - The contract must not be paused. */ function _pause() internal virtual whenNotPaused { _paused = true; emit Paused(_msgSender()); } /** * @dev Returns to normal state. * * Requirements: * * - The contract must be paused. */ function _unpause() internal virtual whenPaused { _paused = false; emit Unpaused(_msgSender()); } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.7.0) (access/Ownable.sol) pragma solidity ^0.8.0; /** * @dev Contract module which provides a basic access control mechanism, where * there is an account (an owner) that can be granted exclusive access to * specific functions. * * By default, the owner account will be the one that deploys the contract. This * can later be changed with {transferOwnership}. * * This module is used through inheritance. It will make available the modifier * `onlyOwner`, which can be applied to your functions to restrict their use to * the owner. */ abstract contract Ownable is Context { address private _owner; event OwnershipTransferred(address indexed previousOwner, address indexed newOwner); /** * @dev Initializes the contract setting the deployer as the initial owner. */ constructor() { _transferOwnership(_msgSender()); } /** * @dev Throws if called by any account other than the owner. */ modifier onlyOwner() { _checkOwner(); _; } /** * @dev Returns the address of the current owner. */ function owner() public view virtual returns (address) { return _owner; } /** * @dev Throws if the sender is not the owner. */ function _checkOwner() internal view virtual { require(owner() == _msgSender(), "Ownable: caller is not the owner"); } /** * @dev Leaves the contract without owner. It will not be possible to call * `onlyOwner` functions anymore. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby removing any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.7.0) (utils/Address.sol) pragma solidity ^0.8.1; /** * @dev Collection of functions related to the address type */ library Address { /** * @dev Returns true if `account` is a contract. * * [IMPORTANT] * ==== * It is unsafe to assume that an address for which this function returns * false is an externally-owned account (EOA) and not a contract. * * Among others, `isContract` will return false for the following * types of addresses: * * - an externally-owned account * - a contract in construction * - an address where a contract will be created * - an address where a contract lived, but was destroyed * ==== * * [IMPORTANT] * ==== * You shouldn't rely on `isContract` to protect against flash loan attacks! * * Preventing calls from contracts is highly discouraged. It breaks composability, breaks support for smart wallets * like Gnosis Safe, and does not provide security since it can be circumvented by calling from a contract * constructor. * ==== */ function isContract(address account) internal view returns (bool) { // This method relies on extcodesize/address.code.length, which returns 0 // for contracts in construction, since the code is only stored at the end // of the constructor execution. return account.code.length > 0; } /** * @dev Replacement for Solidity's `transfer`: sends `amount` wei to * `recipient`, forwarding all available gas and reverting on errors. * * https://eips.ethereum.org/EIPS/eip-1884[EIP1884] increases the gas cost * of certain opcodes, possibly making contracts go over the 2300 gas limit * imposed by `transfer`, making them unable to receive funds via * `transfer`. {sendValue} removes this limitation. * * https://diligence.consensys.net/posts/2019/09/stop-using-soliditys-transfer-now/[Learn more]. * * IMPORTANT: because control is transferred to `recipient`, care must be * taken to not create reentrancy vulnerabilities. Consider using * {ReentrancyGuard} or the * https://solidity.readthedocs.io/en/v0.5.11/security-considerations.html#use-the-checks-effects-interactions-pattern[checks-effects-interactions pattern]. */ function sendValue(address payable recipient, uint256 amount) internal { require(address(this).balance >= amount, "Address: insufficient balance"); (bool success, ) = recipient.call{value: amount}(""); require(success, "Address: unable to send value, recipient may have reverted"); } /** * @dev Performs a Solidity function call using a low level `call`. A * plain `call` is an unsafe replacement for a function call: use this * function instead. * * If `target` reverts with a revert reason, it is bubbled up by this * function (like regular Solidity function calls). * * Returns the raw returned data. To convert to the expected return value, * use https://solidity.readthedocs.io/en/latest/units-and-global-variables.html?highlight=abi.decode#abi-encoding-and-decoding-functions[`abi.decode`]. * * Requirements: * * - `target` must be a contract. * - calling `target` with `data` must not revert. * * _Available since v3.1._ */ function functionCall(address target, bytes memory data) internal returns (bytes memory) { return functionCall(target, data, "Address: low-level call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], but with * `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { return functionCallWithValue(target, data, 0, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but also transferring `value` wei to `target`. * * Requirements: * * - the calling contract must have an ETH balance of at least `value`. * - the called Solidity function must be `payable`. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value ) internal returns (bytes memory) { return functionCallWithValue(target, data, value, "Address: low-level call with value failed"); } /** * @dev Same as {xref-Address-functionCallWithValue-address-bytes-uint256-}[`functionCallWithValue`], but * with `errorMessage` as a fallback revert reason when `target` reverts. * * _Available since v3.1._ */ function functionCallWithValue( address target, bytes memory data, uint256 value, string memory errorMessage ) internal returns (bytes memory) { require(address(this).balance >= value, "Address: insufficient balance for call"); require(isContract(target), "Address: call to non-contract"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall(address target, bytes memory data) internal view returns (bytes memory) { return functionStaticCall(target, data, "Address: low-level static call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a static call. * * _Available since v3.3._ */ function functionStaticCall( address target, bytes memory data, string memory errorMessage ) internal view returns (bytes memory) { require(isContract(target), "Address: static call to non-contract"); (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Same as {xref-Address-functionCall-address-bytes-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall(address target, bytes memory data) internal returns (bytes memory) { return functionDelegateCall(target, data, "Address: low-level delegate call failed"); } /** * @dev Same as {xref-Address-functionCall-address-bytes-string-}[`functionCall`], * but performing a delegate call. * * _Available since v3.4._ */ function functionDelegateCall( address target, bytes memory data, string memory errorMessage ) internal returns (bytes memory) { require(isContract(target), "Address: delegate call to non-contract"); (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResult(success, returndata, errorMessage); } /** * @dev Tool to verifies that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason using the provided one. * * _Available since v4.3._ */ function verifyCallResult( bool success, bytes memory returndata, string memory errorMessage ) internal pure returns (bytes memory) { if (success) { return returndata; } else { // Look for revert reason and bubble it up if present if (returndata.length > 0) { // The easiest way to bubble the revert reason is using memory via assembly /// @solidity memory-safe-assembly assembly { let returndata_size := mload(returndata) revert(add(32, returndata), returndata_size) } } else { revert(errorMessage); } } } } // 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/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] calldata accounts, uint256[] calldata ids) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes calldata data ) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/ERC1155.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the basic standard multi-token. * See https://eips.ethereum.org/EIPS/eip-1155 * Originally based on code by Enjin: https://github.com/enjin/erc-1155 * * _Available since v3.1._ */ contract ERC1155 is Context, ERC165, IERC1155, IERC1155MetadataURI { using Address for address; // Mapping from token ID to account balances mapping(uint256 => mapping(address => uint256)) private _balances; // Mapping from account to operator approvals mapping(address => mapping(address => bool)) private _operatorApprovals; // Used as the URI for all token types by relying on ID substitution, e.g. https://token-cdn-domain/{id}.json string private _uri; /** * @dev See {_setURI}. */ constructor(string memory uri_) { _setURI(uri_); } /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override(ERC165, IERC165) returns (bool) { return interfaceId == type(IERC1155).interfaceId || interfaceId == type(IERC1155MetadataURI).interfaceId || super.supportsInterface(interfaceId); } /** * @dev See {IERC1155MetadataURI-uri}. * * This implementation returns the same URI for *all* token types. It relies * on the token type ID substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * Clients calling this function must replace the `\{id\}` substring with the * actual token type ID. */ function uri(uint256) public view virtual override returns (string memory) { return _uri; } /** * @dev See {IERC1155-balanceOf}. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) public view virtual override returns (uint256) { require(account != address(0), "ERC1155: address zero is not a valid owner"); return _balances[id][account]; } /** * @dev See {IERC1155-balanceOfBatch}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch(address[] memory accounts, uint256[] memory ids) public view virtual override returns (uint256[] memory) { require(accounts.length == ids.length, "ERC1155: accounts and ids length mismatch"); uint256[] memory batchBalances = new uint256[](accounts.length); for (uint256 i = 0; i < accounts.length; ++i) { batchBalances[i] = balanceOf(accounts[i], ids[i]); } return batchBalances; } /** * @dev See {IERC1155-setApprovalForAll}. */ function setApprovalForAll(address operator, bool approved) public virtual override { _setApprovalForAll(_msgSender(), operator, approved); } /** * @dev See {IERC1155-isApprovedForAll}. */ function isApprovedForAll(address account, address operator) public view virtual override returns (bool) { return _operatorApprovals[account][operator]; } /** * @dev See {IERC1155-safeTransferFrom}. */ function safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeTransferFrom(from, to, id, amount, data); } /** * @dev See {IERC1155-safeBatchTransferFrom}. */ function safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) public virtual override { require( from == _msgSender() || isApprovedForAll(from, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _safeBatchTransferFrom(from, to, ids, amounts, data); } /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _safeTransferFrom( address from, address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, to, ids, amounts, data); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; emit TransferSingle(operator, from, to, id, amount); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, from, to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _safeBatchTransferFrom( address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); require(to != address(0), "ERC1155: transfer to the zero address"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, to, ids, amounts, data); for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: insufficient balance for transfer"); unchecked { _balances[id][from] = fromBalance - amount; } _balances[id][to] += amount; } emit TransferBatch(operator, from, to, ids, amounts); _afterTokenTransfer(operator, from, to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, from, to, ids, amounts, data); } /** * @dev Sets a new URI for all token types, by relying on the token type ID * substitution mechanism * https://eips.ethereum.org/EIPS/eip-1155#metadata[defined in the EIP]. * * By this mechanism, any occurrence of the `\{id\}` substring in either the * URI or any of the amounts in the JSON file at said URI will be replaced by * clients with the token type ID. * * For example, the `https://token-cdn-domain/\{id\}.json` URI would be * interpreted by clients as * `https://token-cdn-domain/000000000000000000000000000000000000000000000000000000000004cce0.json` * for token type ID 0x4cce0. * * See {uri}. * * Because these URIs cannot be meaningfully represented by the {URI} event, * this function emits no events. */ function _setURI(string memory newuri) internal virtual { _uri = newuri; } /** * @dev Creates `amount` tokens of token type `id`, and assigns them to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function _mint( address to, uint256 id, uint256 amount, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); _balances[id][to] += amount; emit TransferSingle(operator, address(0), to, id, amount); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeTransferAcceptanceCheck(operator, address(0), to, id, amount, data); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_mint}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function _mintBatch( address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual { require(to != address(0), "ERC1155: mint to the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, address(0), to, ids, amounts, data); for (uint256 i = 0; i < ids.length; i++) { _balances[ids[i]][to] += amounts[i]; } emit TransferBatch(operator, address(0), to, ids, amounts); _afterTokenTransfer(operator, address(0), to, ids, amounts, data); _doSafeBatchTransferAcceptanceCheck(operator, address(0), to, ids, amounts, data); } /** * @dev Destroys `amount` tokens of token type `id` from `from` * * Emits a {TransferSingle} event. * * Requirements: * * - `from` cannot be the zero address. * - `from` must have at least `amount` tokens of token type `id`. */ function _burn( address from, uint256 id, uint256 amount ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); address operator = _msgSender(); uint256[] memory ids = _asSingletonArray(id); uint256[] memory amounts = _asSingletonArray(amount); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } emit TransferSingle(operator, from, address(0), id, amount); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {_burn}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. */ function _burnBatch( address from, uint256[] memory ids, uint256[] memory amounts ) internal virtual { require(from != address(0), "ERC1155: burn from the zero address"); require(ids.length == amounts.length, "ERC1155: ids and amounts length mismatch"); address operator = _msgSender(); _beforeTokenTransfer(operator, from, address(0), ids, amounts, ""); for (uint256 i = 0; i < ids.length; i++) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 fromBalance = _balances[id][from]; require(fromBalance >= amount, "ERC1155: burn amount exceeds balance"); unchecked { _balances[id][from] = fromBalance - amount; } } emit TransferBatch(operator, from, address(0), ids, amounts); _afterTokenTransfer(operator, from, address(0), ids, amounts, ""); } /** * @dev Approve `operator` to operate on all of `owner` tokens * * Emits an {ApprovalForAll} event. */ function _setApprovalForAll( address owner, address operator, bool approved ) internal virtual { require(owner != operator, "ERC1155: setting approval status for self"); _operatorApprovals[owner][operator] = approved; emit ApprovalForAll(owner, operator, approved); } /** * @dev Hook that is called before any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `ids` and `amounts` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} /** * @dev Hook that is called after any token transfer. This includes minting * and burning, as well as batched variants. * * The same hook is called on both single and batched variants. For single * transfers, the length of the `id` and `amount` arrays will be 1. * * Calling conditions (for each `id` and `amount` pair): * * - When `from` and `to` are both non-zero, `amount` of ``from``'s tokens * of token type `id` will be transferred to `to`. * - When `from` is zero, `amount` tokens of token type `id` will be minted * for `to`. * - when `to` is zero, `amount` of ``from``'s tokens of token type `id` * will be burned. * - `from` and `to` are never both zero. * - `ids` and `amounts` have the same, non-zero length. * * To learn more about hooks, head to xref:ROOT:extending-contracts.adoc#using-hooks[Using Hooks]. */ function _afterTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual {} function _doSafeTransferAcceptanceCheck( address operator, address from, address to, uint256 id, uint256 amount, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155Received(operator, from, id, amount, data) returns (bytes4 response) { if (response != IERC1155Receiver.onERC1155Received.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _doSafeBatchTransferAcceptanceCheck( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) private { if (to.isContract()) { try IERC1155Receiver(to).onERC1155BatchReceived(operator, from, ids, amounts, data) returns ( bytes4 response ) { if (response != IERC1155Receiver.onERC1155BatchReceived.selector) { revert("ERC1155: ERC1155Receiver rejected tokens"); } } catch Error(string memory reason) { revert(reason); } catch { revert("ERC1155: transfer to non ERC1155Receiver implementer"); } } } function _asSingletonArray(uint256 element) private pure returns (uint256[] memory) { uint256[] memory array = new uint256[](1); array[0] = element; return array; } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Burnable.sol // OpenZeppelin Contracts (last updated v4.7.0) (token/ERC1155/extensions/ERC1155Burnable.sol) pragma solidity ^0.8.0; /** * @dev Extension of {ERC1155} that allows token holders to destroy both their * own tokens and those that they have been approved to use. * * _Available since v3.1._ */ abstract contract ERC1155Burnable is ERC1155 { function burn( address account, uint256 id, uint256 value ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burn(account, id, value); } function burnBatch( address account, uint256[] memory ids, uint256[] memory values ) public virtual { require( account == _msgSender() || isApprovedForAll(account, _msgSender()), "ERC1155: caller is not token owner nor approved" ); _burnBatch(account, ids, values); } } // File: @openzeppelin/contracts/token/ERC1155/extensions/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: MetaSkullWhitelistPass.sol /************************************************************************************************************************************************************************ __ __ ________ ________ ______ ______ __ __ __ __ __ __ __ __ __ __ ______ ________ ________ __ ______ ______ ________ _______ ______ ______ ______ / \ / |/ |/ |/ \ / \ / | / |/ | / |/ | / | / | _ / |/ | / |/ |/ |/ |/ | / | / \ / | / \ / \ / \ / \ $$ \ /$$ |$$$$$$$$/ $$$$$$$$//$$$$$$ |/$$$$$$ |$$ | /$$/ $$ | $$ |$$ | $$ | $$ | / \ $$ |$$ | $$ |$$$$$$/ $$$$$$$$/ $$$$$$$$/ $$ | $$$$$$/ /$$$$$$ |$$$$$$$$/ $$$$$$$ |/$$$$$$ |/$$$$$$ |/$$$$$$ | $$$ \ /$$$ |$$ |__ $$ | $$ |__$$ |$$ \__$$/ $$ |/$$/ $$ | $$ |$$ | $$ | $$ |/$ \$$ |$$ |__$$ | $$ | $$ | $$ |__ $$ | $$ | $$ \__$$/ $$ | $$ |__$$ |$$ |__$$ |$$ \__$$/ $$ \__$$/ $$$$ /$$$$ |$$ | $$ | $$ $$ |$$ \ $$ $$< $$ | $$ |$$ | $$ | $$ /$$$ $$ |$$ $$ | $$ | $$ | $$ | $$ | $$ | $$ \ $$ | $$ $$/ $$ $$ |$$ \ $$ \ $$ $$ $$/$$ |$$$$$/ $$ | $$$$$$$$ | $$$$$$ |$$$$$ \ $$ | $$ |$$ | $$ | $$ $$/$$ $$ |$$$$$$$$ | $$ | $$ | $$$$$/ $$ | $$ | $$$$$$ | $$ | $$$$$$$/ $$$$$$$$ | $$$$$$ | $$$$$$ | $$ |$$$/ $$ |$$ |_____ $$ | $$ | $$ |/ \__$$ |$$ |$$ \ $$ \__$$ |$$ |_____ $$ |_____ $$$$/ $$$$ |$$ | $$ | _$$ |_ $$ | $$ |_____ $$ |_____ _$$ |_ / \__$$ | $$ | $$ | $$ | $$ |/ \__$$ |/ \__$$ | $$ | $/ $$ |$$ | $$ | $$ | $$ |$$ $$/ $$ | $$ |$$ $$/ $$ |$$ | $$$/ $$$ |$$ | $$ |/ $$ | $$ | $$ |$$ |/ $$ |$$ $$/ $$ | $$ | $$ | $$ |$$ $$/ $$ $$/ $$/ $$/ $$$$$$$$/ $$/ $$/ $$/ $$$$$$/ $$/ $$/ $$$$$$/ $$$$$$$$/ $$$$$$$$/ $$/ $$/ $$/ $$/ $$$$$$/ $$/ $$$$$$$$/ $$$$$$$$/ $$$$$$/ $$$$$$/ $$/ $$/ $$/ $$/ $$$$$$/ $$$$$$/ *************************************************************************************************************************************************************************/ pragma solidity ^0.8.7; contract MetaSkullWhitelistPass is ERC1155, Ownable, Pausable, ERC1155Supply, ERC1155Burnable, ReentrancyGuard { uint256 public _currentSupply = 0; uint256 public _maxSupply = 300; uint256 public _mintPrice = 0.08 ether; uint256 public _maxTokenPerOwner = 1; string public name; string public symbol; bool public _publicSaleIsOpen = false; mapping(address => bool) public whitelist; mapping(address => bool) public minted; address public _metaSkullAddress = 0x0000000000000000000000000000000000000000; event SetPublicSaleBool(bool publicSale); event Withdraw(uint256 balance); event SetMintPrice(uint256 mintPrice); event UpdateNameEvent(string oldName, string newName); event SetMetaSkullAddress(address who, address metaSkullAddress); event SetMaxSupply(uint256 maxSupply); constructor() ERC1155("") { name = "MetaSkull Whitelist Pass"; symbol = "MSWP"; } modifier txOriginIsWhitelistPassOwner() { require(tx.origin == owner(), "Can only be called by owner"); _; } modifier isMetaSkull() { require(msg.sender == _metaSkullAddress, "Can only be called by MetaSkull"); _; } //Owner Functions// function getURI() external view virtual onlyOwner returns(string memory) { return uri(1); } function setURI(string memory newuri) external onlyOwner { string memory oldName = uri(1); _setURI(newuri); emit UpdateNameEvent(oldName, newuri); } function pause() external onlyOwner { _pause(); } function unpause() external onlyOwner { _unpause(); } function setPublicSaleBool(bool publicSale) external onlyOwner { _publicSaleIsOpen = publicSale; emit SetPublicSaleBool(publicSale); } function getPublicSaleBool() external view virtual onlyOwner returns (bool) { return _publicSaleIsOpen; } function ownerMint(address to, uint256 amount) external onlyOwner nonReentrant{ if(_currentSupply + amount > _maxSupply) revert ("Mint Exceed Max Supply"); if(amount <= 0) revert ("Cannot mint 0 tokens"); _mint(to, 1, amount, ""); _currentSupply += amount; } function withdraw() external onlyOwner nonReentrant { uint256 balance = address(this).balance; require(address(this).balance > 0, "Balance is 0"); payable(owner()).transfer(address(this).balance); emit Withdraw(balance); } function setMaxSupply(uint256 maxSupply) external onlyOwner{ _maxSupply = maxSupply; emit SetMaxSupply(maxSupply); } //Input units is in wei //Example of setting mint price to 0.1ETH: setMintPrice(100000000000000000) function setMintPrice(uint256 mintPrice) external onlyOwner{ _mintPrice = mintPrice; emit SetMintPrice(_mintPrice); } function setMetaSkullAddress(address metaSkullAddress) external txOriginIsWhitelistPassOwner{ _metaSkullAddress = metaSkullAddress; emit SetMetaSkullAddress(msg.sender, metaSkullAddress); } //Minter Functions// //tokenID should be always be 1 since there are only 1 type of Whitelist Pass function mint(uint256 amount) external payable nonReentrant { if(!_publicSaleIsOpen) revert ("Public Sale Is not live yet"); if(_currentSupply + amount > _maxSupply) revert ("Mint Exceed Max Supply"); if(minted[msg.sender] == true) revert ("Address already minted 1 token"); if(this.balanceOf(msg.sender, 1) >= _maxTokenPerOwner) revert ("Address already owned a token"); if(amount <= 0) revert ("Cannot mint 0 tokens"); if(amount > _maxTokenPerOwner){ string memory _exceedMaxMint = string(abi.encodePacked("Maximum ", Strings.toString(_maxTokenPerOwner), " mint per wallet")); revert(_exceedMaxMint); } if(msg.value != amount*_mintPrice) revert ("Payment amount not correct"); //Change second parameter(tokenID) to 1 because only 1 type of Whitelist Pass exist _mint(msg.sender, 1, amount, ""); minted[msg.sender] = true; _currentSupply += amount; } //Public Functions// function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal whenNotPaused override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function getMaxSupply() external view virtual returns (uint256) { return _maxSupply; } function getName() external view virtual returns (string memory) { return name; } function getSymbol() external view virtual returns (string memory) { return symbol; } function getMintPrice() external view virtual returns (uint256) { return _mintPrice; } function burnToken(uint256 amount) external { if(!isApprovedForAll(msg.sender, address(this))) setApprovalForAll(address(this), true); if(amount <= 0) revert("Cannot burn 0 tokens"); super.burn(msg.sender, 1, amount); whitelist[msg.sender] = true; _currentSupply -= amount; } //Can only be called by owner function burnToken(address who, uint256 amount) external isMetaSkull() { if(this.balanceOf(who, 1) == 0) revert ("You dont own any Whitelist Pass!"); if(!isApprovedForAll(who, msg.sender)) revert("You need to approve collection first!"); if(amount <= 0) revert("Cannot burn 0 tokens"); super.burn(who, 1, amount); whitelist[who] = true; _currentSupply -= amount; } function getWhitelistList(address who) external view virtual returns (bool) { return whitelist[who]; } function getMintedList(address who) external view virtual returns (bool) { return minted[who]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"account","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":false,"internalType":"address","name":"account","type":"address"}],"name":"Paused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"SetMaxSupply","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"who","type":"address"},{"indexed":false,"internalType":"address","name":"metaSkullAddress","type":"address"}],"name":"SetMetaSkullAddress","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"mintPrice","type":"uint256"}],"name":"SetMintPrice","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"bool","name":"publicSale","type":"bool"}],"name":"SetPublicSaleBool","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"indexed":false,"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"TransferBatch","type":"event"},{"anonymous":false,"inputs":[{"indexed":true,"internalType":"address","name":"operator","type":"address"},{"indexed":true,"internalType":"address","name":"from","type":"address"},{"indexed":true,"internalType":"address","name":"to","type":"address"},{"indexed":false,"internalType":"uint256","name":"id","type":"uint256"},{"indexed":false,"internalType":"uint256","name":"value","type":"uint256"}],"name":"TransferSingle","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"value","type":"string"},{"indexed":true,"internalType":"uint256","name":"id","type":"uint256"}],"name":"URI","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"address","name":"account","type":"address"}],"name":"Unpaused","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"string","name":"oldName","type":"string"},{"indexed":false,"internalType":"string","name":"newName","type":"string"}],"name":"UpdateNameEvent","type":"event"},{"anonymous":false,"inputs":[{"indexed":false,"internalType":"uint256","name":"balance","type":"uint256"}],"name":"Withdraw","type":"event"},{"inputs":[],"name":"_currentSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_maxTokenPerOwner","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_metaSkullAddress","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_mintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"_publicSaleIsOpen","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"value","type":"uint256"}],"name":"burn","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"values","type":"uint256[]"}],"name":"burnBatch","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"burnToken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMaxSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getMintPrice","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"getMintedList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getName","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getPublicSaleBool","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getSymbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"getURI","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"who","type":"address"}],"name":"getWhitelistList","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"minted","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"name","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"ownerMint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"pause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"paused","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeBatchTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"from","type":"address"},{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"},{"internalType":"bytes","name":"data","type":"bytes"}],"name":"safeTransferFrom","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"operator","type":"address"},{"internalType":"bool","name":"approved","type":"bool"}],"name":"setApprovalForAll","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"maxSupply","type":"uint256"}],"name":"setMaxSupply","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"metaSkullAddress","type":"address"}],"name":"setMetaSkullAddress","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"mintPrice","type":"uint256"}],"name":"setMintPrice","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bool","name":"publicSale","type":"bool"}],"name":"setPublicSaleBool","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"string","name":"newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"unpause","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"whitelist","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdraw","outputs":[],"stateMutability":"nonpayable","type":"function"}]
Contract Creation Code
6080604052600060065561012c60075567011c37937e08000060085560016009556000600c60006101000a81548160ff0219169083151502179055506000600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055503480156200008a57600080fd5b5060405180602001604052806000815250620000ac816200019260201b60201c565b50620000cd620000c1620001ae60201b60201c565b620001b660201b60201c565b6000600360146101000a81548160ff02191690831515021790555060016005819055506040518060400160405280601881526020017f4d657461536b756c6c2057686974656c69737420506173730000000000000000815250600a90805190602001906200013d9291906200027c565b506040518060400160405280600481526020017f4d53575000000000000000000000000000000000000000000000000000000000815250600b90805190602001906200018b9291906200027c565b5062000391565b8060029080519060200190620001aa9291906200027c565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8280546200028a906200032c565b90600052602060002090601f016020900481019282620002ae5760008555620002fa565b82601f10620002c957805160ff1916838001178555620002fa565b82800160010185558215620002fa579182015b82811115620002f9578251825591602001919060010190620002dc565b5b5090506200030991906200030d565b5090565b5b80821115620003285760008160009055506001016200030e565b5090565b600060028204905060018216806200034557607f821691505b602082108114156200035c576200035b62000362565b5b50919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b615c8e80620003a16000396000f3fe60806040526004361061027c5760003560e01c80636f8b44b01161014f578063a22cb465116100c1578063d1df306c1161007a578063d1df306c1461097c578063e985e9c5146109a5578063f242432a146109e2578063f2fde38b14610a0b578063f4a0a52814610a34578063f5298aca14610a5d5761027c565b8063a22cb4651461085a578063a2a5ad7314610883578063a4fefad6146108ac578063a7f93ebd146108d7578063bd85b03914610902578063c464d2211461093f5761027c565b80638456cb59116101135780638456cb59146107695780638da5cb5b1461078057806392795020146107ab57806395d89b41146107d65780639b19251a14610801578063a0712d681461083e5761027c565b80636f8b44b0146106aa578063715018a6146106d35780637754305c146106ea578063777ca7cf146107155780637b47ec1a146107405761027c565b80632eb2c2d6116101f35780634f558e79116101ac5780634f558e791461059a578063522dfa75146105d7578063543d3d7e1461060257806356fa6c481461062b5780635c975abb146106565780636b20c454146106815761027c565b80632eb2c2d6146104b25780633ccfd60b146104db5780633f4ba83a146104f2578063484b973c146105095780634c0f38c2146105325780634e1273f41461055d5761027c565b80630e89341c116102455780630e89341c1461037a57806315070401146103b757806317d7de7c146103e25780631e7269c51461040d5780631e8edadb1461044a57806322f4596f146104875761027c565b8062fdd58e1461028157806301ffc9a7146102be57806302fe5305146102fb5780630387da421461032457806306fdde031461034f575b600080fd5b34801561028d57600080fd5b506102a860048036038101906102a3919061408d565b610a86565b6040516102b59190614e6f565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906141c5565b610b4f565b6040516102f29190614a3b565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d919061421f565b610c31565b005b34801561033057600080fd5b50610339610c8d565b6040516103469190614e6f565b60405180910390f35b34801561035b57600080fd5b50610364610c93565b6040516103719190614a56565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190614268565b610d21565b6040516103ae9190614a56565b60405180910390f35b3480156103c357600080fd5b506103cc610db5565b6040516103d99190614a56565b60405180910390f35b3480156103ee57600080fd5b506103f7610e47565b6040516104049190614a56565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613def565b610ed9565b6040516104419190614a3b565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613def565b610ef9565b60405161047e9190614a3b565b60405180910390f35b34801561049357600080fd5b5061049c610f4f565b6040516104a99190614e6f565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613e5c565b610f55565b005b3480156104e757600080fd5b506104f0610ff6565b005b3480156104fe57600080fd5b50610507611124565b005b34801561051557600080fd5b50610530600480360381019061052b919061408d565b611136565b005b34801561053e57600080fd5b50610547611262565b6040516105549190614e6f565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190614120565b61126c565b60405161059191906149e2565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190614268565b611385565b6040516105ce9190614a3b565b60405180910390f35b3480156105e357600080fd5b506105ec611399565b6040516105f99190614a3b565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190614198565b6113ac565b005b34801561063757600080fd5b50610640611408565b60405161064d9190614e6f565b60405180910390f35b34801561066257600080fd5b5061066b61140e565b6040516106789190614a3b565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613fc2565b611425565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190614268565b6114c2565b005b3480156106df57600080fd5b506106e861150b565b005b3480156106f657600080fd5b506106ff61151f565b60405161070c9190614a56565b60405180910390f35b34801561072157600080fd5b5061072a611538565b6040516107379190614a3b565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190614268565b611557565b005b34801561077557600080fd5b5061077e611634565b005b34801561078c57600080fd5b50610795611646565b6040516107a291906148b3565b60405180910390f35b3480156107b757600080fd5b506107c0611670565b6040516107cd91906148b3565b60405180910390f35b3480156107e257600080fd5b506107eb611696565b6040516107f89190614a56565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613def565b611724565b6040516108359190614a3b565b60405180910390f35b61085860048036038101906108539190614268565b611744565b005b34801561086657600080fd5b50610881600480360381019061087c919061404d565b611b34565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190613def565b611b4a565b005b3480156108b857600080fd5b506108c1611c3c565b6040516108ce9190614e6f565b60405180910390f35b3480156108e357600080fd5b506108ec611c42565b6040516108f99190614e6f565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190614268565b611c4c565b6040516109369190614e6f565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613def565b611c69565b6040516109739190614a3b565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e919061408d565b611cbf565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613e1c565b611f2a565b6040516109d99190614a3b565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190613f2b565b611fbe565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190613def565b61205f565b005b348015610a4057600080fd5b50610a5b6004803603810190610a569190614268565b6120e3565b005b348015610a6957600080fd5b50610a846004803603810190610a7f91906140cd565b61212e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90614b6f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c1a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2a5750610c29826121cb565b5b9050919050565b610c39612235565b6000610c456001610d21565b9050610c50826122b3565b7f7c792b0935c1aad589d60c776f75efe6bea81bce17fda35401dad37cf9bff7ed8183604051610c81929190614a78565b60405180910390a15050565b60085481565b600a8054610ca0906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccc906151eb565b8015610d195780601f10610cee57610100808354040283529160200191610d19565b820191906000526020600020905b815481529060010190602001808311610cfc57829003601f168201915b505050505081565b606060028054610d30906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906151eb565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b50505050509050919050565b6060600b8054610dc4906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610df0906151eb565b8015610e3d5780601f10610e1257610100808354040283529160200191610e3d565b820191906000526020600020905b815481529060010190602001808311610e2057829003601f168201915b5050505050905090565b6060600a8054610e56906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e82906151eb565b8015610ecf5780601f10610ea457610100808354040283529160200191610ecf565b820191906000526020600020905b815481529060010190602001808311610eb257829003601f168201915b5050505050905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60075481565b610f5d6122cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610fa35750610fa285610f9d6122cd565b611f2a565b5b610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990614acf565b60405180910390fd5b610fef85858585856122d5565b5050505050565b610ffe612235565b60026005541415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90614e0f565b60405180910390fd5b6002600581905550600047905060004711611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614c8f565b60405180910390fd5b61109c611646565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110e1573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040516111119190614e6f565b60405180910390a1506001600581905550565b61112c612235565b6111346125f7565b565b61113e612235565b60026005541415611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90614e0f565b60405180910390fd5b60026005819055506007548160065461119d919061500e565b11156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590614e4f565b60405180910390fd5b60008111611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614d4f565b60405180910390fd5b61123d826001836040518060200160405280600081525061265a565b806006600082825461124f919061500e565b9250508190555060016005819055505050565b6000600754905090565b606081518351146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990614daf565b60405180910390fd5b6000835167ffffffffffffffff8111156112cf576112ce615384565b5b6040519080825280602002602001820160405280156112fd5781602001602082028036833780820191505090505b50905060005b845181101561137a5761134a85828151811061132257611321615355565b5b602002602001015185838151811061133d5761133c615355565b5b6020026020010151610a86565b82828151811061135d5761135c615355565b5b602002602001018181525050806113739061524e565b9050611303565b508091505092915050565b60008061139183611c4c565b119050919050565b600c60009054906101000a900460ff1681565b6113b4612235565b80600c60006101000a81548160ff0219169083151502179055507fcf5477fe56b4eb12abe8c67d9181bce15def3c90f0d5f7771a728eeed08d0b40816040516113fd9190614a3b565b60405180910390a150565b60095481565b6000600360149054906101000a900460ff16905090565b61142d6122cd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061147357506114728361146d6122cd565b611f2a565b5b6114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614acf565b60405180910390fd5b6114bd83838361280b565b505050565b6114ca612235565b806007819055507f3f8118fc46e72ecde0c5e090803cad8c88e817b2f1e93e820aa9bfbf51f2468d816040516115009190614e6f565b60405180910390a150565b611513612235565b61151d6000612ada565b565b6060611529612235565b6115336001610d21565b905090565b6000611542612235565b600c60009054906101000a900460ff16905090565b6115613330611f2a565b61157157611570306001611b34565b5b600081116115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614d2f565b60405180910390fd5b6115c03360018361212e565b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806006600082825461162a91906150ef565b9250508190555050565b61163c612235565b611644612ba0565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b80546116a3906151eb565b80601f01602080910402602001604051908101604052809291908181526020018280546116cf906151eb565b801561171c5780601f106116f15761010080835404028352916020019161171c565b820191906000526020600020905b8154815290600101906020018083116116ff57829003601f168201915b505050505081565b600d6020528060005260406000206000915054906101000a900460ff1681565b6002600554141561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614e0f565b60405180910390fd5b6002600581905550600c60009054906101000a900460ff166117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890614c0f565b60405180910390fd5b600754816006546117f2919061500e565b1115611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614e4f565b60405180910390fd5b60011515600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614d0f565b60405180910390fd5b6009543073ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360016040518363ffffffff1660e01b81526004016119059291906149b9565b60206040518083038186803b15801561191d57600080fd5b505afa158015611931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119559190614295565b10611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90614baf565b60405180910390fd5b600081116119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614d4f565b60405180910390fd5b600954811115611a4d5760006119ef600954612c03565b6040516020016119ff9190614886565b6040516020818303038152906040529050806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a449190614a56565b60405180910390fd5b60085481611a5b9190615095565b3414611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390614e2f565b60405180910390fd5b611ab8336001836040518060200160405280600081525061265a565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060066000828254611b22919061500e565b92505081905550600160058190555050565b611b46611b3f6122cd565b8383612d64565b5050565b611b52611646565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614d6f565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3045bdf2e28bf38d6aa3dacfdb4a1635891d52fab6f7e471ad838f8ea8d23a8a3382604051611c319291906148ce565b60405180910390a150565b60065481565b6000600854905090565b600060046000838152602001908152602001600020549050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690614bcf565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff1662fdd58e8460016040518363ffffffff1660e01b8152600401611d8c9291906149b9565b60206040518083038186803b158015611da457600080fd5b505afa158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc9190614295565b1415611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490614caf565b60405180910390fd5b611e278233611f2a565b611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614b8f565b60405180910390fd5b60008111611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614d2f565b60405180910390fd5b611eb58260018361212e565b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060066000828254611f1f91906150ef565b925050819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fc66122cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061200c575061200b856120066122cd565b611f2a565b5b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290614acf565b60405180910390fd5b6120588585858585612ed1565b5050505050565b612067612235565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90614b2f565b60405180910390fd5b6120e081612ada565b50565b6120eb612235565b806008819055507f02ebcb79e897ca3a22313ba6de8fc964409964de565fb4bb6a0927871756b88c6008546040516121239190614e6f565b60405180910390a150565b6121366122cd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061217c575061217b836121766122cd565b611f2a565b5b6121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290614acf565b60405180910390fd5b6121c683838361316d565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61223d6122cd565b73ffffffffffffffffffffffffffffffffffffffff1661225b611646565b73ffffffffffffffffffffffffffffffffffffffff16146122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890614ccf565b60405180910390fd5b565b80600290805190602001906122c9929190613ab2565b5050565b600033905090565b8151835114612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614dcf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238090614c2f565b60405180910390fd5b60006123936122cd565b90506123a38187878787876133b4565b60005b84518110156125545760008582815181106123c4576123c3615355565b5b6020026020010151905060008583815181106123e3576123e2615355565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614c6f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612539919061500e565b925050819055505050508061254d9061524e565b90506123a6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516125cb929190614a04565b60405180910390a46125e18187878787876133d2565b6125ef8187878787876133da565b505050505050565b6125ff6135c1565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6126436122cd565b60405161265091906148b3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c190614def565b60405180910390fd5b60006126d46122cd565b905060006126e18561360a565b905060006126ee8561360a565b90506126ff836000898585896133b4565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461275e919061500e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516127dc929190614e8a565b60405180910390a46127f3836000898585896133d2565b61280283600089898989613684565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614c4f565b60405180910390fd5b80518251146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614dcf565b60405180910390fd5b60006128c96122cd565b90506128e9818560008686604051806020016040528060008152506133b4565b60005b8351811015612a3657600084828151811061290a57612909615355565b5b60200260200101519050600084838151811061292957612928615355565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614b4f565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080612a2e9061524e565b9150506128ec565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612aae929190614a04565b60405180910390a4612ad4818560008686604051806020016040528060008152506133d2565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ba861386b565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612bec6122cd565b604051612bf991906148b3565b60405180910390a1565b60606000821415612c4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d5f565b600082905060005b60008214612c7d578080612c669061524e565b915050600a82612c769190615064565b9150612c53565b60008167ffffffffffffffff811115612c9957612c98615384565b5b6040519080825280601f01601f191660200182016040528015612ccb5781602001600182028036833780820191505090505b5090505b60008514612d5857600182612ce491906150ef565b9150600a85612cf39190615297565b6030612cff919061500e565b60f81b818381518110612d1557612d14615355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d519190615064565b9450612ccf565b8093505050505b919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90614d8f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ec49190614a3b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890614c2f565b60405180910390fd5b6000612f4b6122cd565b90506000612f588561360a565b90506000612f658561360a565b9050612f758389898585896133b4565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561300c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300390614c6f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c1919061500e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161313e929190614e8a565b60405180910390a4613154848a8a86868a6133d2565b613162848a8a8a8a8a613684565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d490614c4f565b60405180910390fd5b60006131e76122cd565b905060006131f48461360a565b905060006132018461360a565b9050613221838760008585604051806020016040528060008152506133b4565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af90614b4f565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051613385929190614e8a565b60405180910390a46133ab848860008686604051806020016040528060008152506133d2565b50505050505050565b6133bc61386b565b6133ca8686868686866138b5565b505050505050565b505050505050565b6133f98473ffffffffffffffffffffffffffffffffffffffff16613a87565b156135b9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161343f9594939291906148f7565b602060405180830381600087803b15801561345957600080fd5b505af192505050801561348a57506040513d601f19601f8201168201806040525081019061348791906141f2565b60015b613530576134966153b3565b806308c379a014156134f357506134ab615b66565b806134b657506134f5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ea9190614a56565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352790614aaf565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ae90614aef565b60405180910390fd5b505b505050505050565b6135c961140e565b613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff90614b0f565b60405180910390fd5b565b60606000600167ffffffffffffffff81111561362957613628615384565b5b6040519080825280602002602001820160405280156136575781602001602082028036833780820191505090505b509050828160008151811061366f5761366e615355565b5b60200260200101818152505080915050919050565b6136a38473ffffffffffffffffffffffffffffffffffffffff16613a87565b15613863578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016136e995949392919061495f565b602060405180830381600087803b15801561370357600080fd5b505af192505050801561373457506040513d601f19601f8201168201806040525081019061373191906141f2565b60015b6137da576137406153b3565b806308c379a0141561379d5750613755615b66565b80613760575061379f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137949190614a56565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d190614aaf565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385890614aef565b60405180910390fd5b505b505050505050565b61387361140e565b156138b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138aa90614bef565b60405180910390fd5b565b6138c3868686868686613aaa565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156139755760005b83518110156139735782818151811061391757613916615355565b5b60200260200101516004600086848151811061393657613935615355565b5b60200260200101518152602001908152602001600020600082825461395b919061500e565b925050819055508061396c9061524e565b90506138fb565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613a7f5760005b8351811015613a7d5760008482815181106139cb576139ca615355565b5b6020026020010151905060008483815181106139ea576139e9615355565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015613a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4690614cef565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080613a769061524e565b90506139ad565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054613abe906151eb565b90600052602060002090601f016020900481019282613ae05760008555613b27565b82601f10613af957805160ff1916838001178555613b27565b82800160010185558215613b27579182015b82811115613b26578251825591602001919060010190613b0b565b5b509050613b349190613b38565b5090565b5b80821115613b51576000816000905550600101613b39565b5090565b6000613b68613b6384614ed8565b614eb3565b90508083825260208201905082856020860282011115613b8b57613b8a6153da565b5b60005b85811015613bbb5781613ba18882613cb9565b845260208401935060208301925050600181019050613b8e565b5050509392505050565b6000613bd8613bd384614f04565b614eb3565b90508083825260208201905082856020860282011115613bfb57613bfa6153da565b5b60005b85811015613c2b5781613c118882613dc5565b845260208401935060208301925050600181019050613bfe565b5050509392505050565b6000613c48613c4384614f30565b614eb3565b905082815260208101848484011115613c6457613c636153df565b5b613c6f8482856151a9565b509392505050565b6000613c8a613c8584614f61565b614eb3565b905082815260208101848484011115613ca657613ca56153df565b5b613cb18482856151a9565b509392505050565b600081359050613cc881615bfc565b92915050565b600082601f830112613ce357613ce26153d5565b5b8135613cf3848260208601613b55565b91505092915050565b600082601f830112613d1157613d106153d5565b5b8135613d21848260208601613bc5565b91505092915050565b600081359050613d3981615c13565b92915050565b600081359050613d4e81615c2a565b92915050565b600081519050613d6381615c2a565b92915050565b600082601f830112613d7e57613d7d6153d5565b5b8135613d8e848260208601613c35565b91505092915050565b600082601f830112613dac57613dab6153d5565b5b8135613dbc848260208601613c77565b91505092915050565b600081359050613dd481615c41565b92915050565b600081519050613de981615c41565b92915050565b600060208284031215613e0557613e046153e9565b5b6000613e1384828501613cb9565b91505092915050565b60008060408385031215613e3357613e326153e9565b5b6000613e4185828601613cb9565b9250506020613e5285828601613cb9565b9150509250929050565b600080600080600060a08688031215613e7857613e776153e9565b5b6000613e8688828901613cb9565b9550506020613e9788828901613cb9565b945050604086013567ffffffffffffffff811115613eb857613eb76153e4565b5b613ec488828901613cfc565b935050606086013567ffffffffffffffff811115613ee557613ee46153e4565b5b613ef188828901613cfc565b925050608086013567ffffffffffffffff811115613f1257613f116153e4565b5b613f1e88828901613d69565b9150509295509295909350565b600080600080600060a08688031215613f4757613f466153e9565b5b6000613f5588828901613cb9565b9550506020613f6688828901613cb9565b9450506040613f7788828901613dc5565b9350506060613f8888828901613dc5565b925050608086013567ffffffffffffffff811115613fa957613fa86153e4565b5b613fb588828901613d69565b9150509295509295909350565b600080600060608486031215613fdb57613fda6153e9565b5b6000613fe986828701613cb9565b935050602084013567ffffffffffffffff81111561400a576140096153e4565b5b61401686828701613cfc565b925050604084013567ffffffffffffffff811115614037576140366153e4565b5b61404386828701613cfc565b9150509250925092565b60008060408385031215614064576140636153e9565b5b600061407285828601613cb9565b925050602061408385828601613d2a565b9150509250929050565b600080604083850312156140a4576140a36153e9565b5b60006140b285828601613cb9565b92505060206140c385828601613dc5565b9150509250929050565b6000806000606084860312156140e6576140e56153e9565b5b60006140f486828701613cb9565b935050602061410586828701613dc5565b925050604061411686828701613dc5565b9150509250925092565b60008060408385031215614137576141366153e9565b5b600083013567ffffffffffffffff811115614155576141546153e4565b5b61416185828601613cce565b925050602083013567ffffffffffffffff811115614182576141816153e4565b5b61418e85828601613cfc565b9150509250929050565b6000602082840312156141ae576141ad6153e9565b5b60006141bc84828501613d2a565b91505092915050565b6000602082840312156141db576141da6153e9565b5b60006141e984828501613d3f565b91505092915050565b600060208284031215614208576142076153e9565b5b600061421684828501613d54565b91505092915050565b600060208284031215614235576142346153e9565b5b600082013567ffffffffffffffff811115614253576142526153e4565b5b61425f84828501613d97565b91505092915050565b60006020828403121561427e5761427d6153e9565b5b600061428c84828501613dc5565b91505092915050565b6000602082840312156142ab576142aa6153e9565b5b60006142b984828501613dda565b91505092915050565b60006142ce8383614868565b60208301905092915050565b6142e381615123565b82525050565b60006142f482614fa2565b6142fe8185614fd0565b935061430983614f92565b8060005b8381101561433a57815161432188826142c2565b975061432c83614fc3565b92505060018101905061430d565b5085935050505092915050565b61435081615135565b82525050565b600061436182614fad565b61436b8185614fe1565b935061437b8185602086016151b8565b614384816153ee565b840191505092915050565b61439881615197565b82525050565b60006143a982614fb8565b6143b38185614ff2565b93506143c38185602086016151b8565b6143cc816153ee565b840191505092915050565b60006143e282614fb8565b6143ec8185615003565b93506143fc8185602086016151b8565b80840191505092915050565b6000614415603483614ff2565b91506144208261540c565b604082019050919050565b6000614438602f83614ff2565b91506144438261545b565b604082019050919050565b600061445b602883614ff2565b9150614466826154aa565b604082019050919050565b600061447e601483614ff2565b9150614489826154f9565b602082019050919050565b60006144a1602683614ff2565b91506144ac82615522565b604082019050919050565b60006144c4602483614ff2565b91506144cf82615571565b604082019050919050565b60006144e7600883615003565b91506144f2826155c0565b600882019050919050565b600061450a602a83614ff2565b9150614515826155e9565b604082019050919050565b600061452d602583614ff2565b915061453882615638565b604082019050919050565b6000614550601d83614ff2565b915061455b82615687565b602082019050919050565b6000614573601f83614ff2565b915061457e826156b0565b602082019050919050565b6000614596601083614ff2565b91506145a1826156d9565b602082019050919050565b60006145b9601b83614ff2565b91506145c482615702565b602082019050919050565b60006145dc602583614ff2565b91506145e78261572b565b604082019050919050565b60006145ff602383614ff2565b915061460a8261577a565b604082019050919050565b6000614622602a83614ff2565b915061462d826157c9565b604082019050919050565b6000614645600c83614ff2565b915061465082615818565b602082019050919050565b6000614668602083614ff2565b915061467382615841565b602082019050919050565b600061468b602083614ff2565b91506146968261586a565b602082019050919050565b60006146ae602883614ff2565b91506146b982615893565b604082019050919050565b60006146d1601083615003565b91506146dc826158e2565b601082019050919050565b60006146f4601e83614ff2565b91506146ff8261590b565b602082019050919050565b6000614717601483614ff2565b915061472282615934565b602082019050919050565b600061473a601483614ff2565b91506147458261595d565b602082019050919050565b600061475d601b83614ff2565b915061476882615986565b602082019050919050565b6000614780602983614ff2565b915061478b826159af565b604082019050919050565b60006147a3602983614ff2565b91506147ae826159fe565b604082019050919050565b60006147c6602883614ff2565b91506147d182615a4d565b604082019050919050565b60006147e9602183614ff2565b91506147f482615a9c565b604082019050919050565b600061480c601f83614ff2565b915061481782615aeb565b602082019050919050565b600061482f601a83614ff2565b915061483a82615b14565b602082019050919050565b6000614852601683614ff2565b915061485d82615b3d565b602082019050919050565b6148718161518d565b82525050565b6148808161518d565b82525050565b6000614891826144da565b915061489d82846143d7565b91506148a8826146c4565b915081905092915050565b60006020820190506148c860008301846142da565b92915050565b60006040820190506148e360008301856142da565b6148f060208301846142da565b9392505050565b600060a08201905061490c60008301886142da565b61491960208301876142da565b818103604083015261492b81866142e9565b9050818103606083015261493f81856142e9565b905081810360808301526149538184614356565b90509695505050505050565b600060a08201905061497460008301886142da565b61498160208301876142da565b61498e6040830186614877565b61499b6060830185614877565b81810360808301526149ad8184614356565b90509695505050505050565b60006040820190506149ce60008301856142da565b6149db602083018461438f565b9392505050565b600060208201905081810360008301526149fc81846142e9565b905092915050565b60006040820190508181036000830152614a1e81856142e9565b90508181036020830152614a3281846142e9565b90509392505050565b6000602082019050614a506000830184614347565b92915050565b60006020820190508181036000830152614a70818461439e565b905092915050565b60006040820190508181036000830152614a92818561439e565b90508181036020830152614aa6818461439e565b90509392505050565b60006020820190508181036000830152614ac881614408565b9050919050565b60006020820190508181036000830152614ae88161442b565b9050919050565b60006020820190508181036000830152614b088161444e565b9050919050565b60006020820190508181036000830152614b2881614471565b9050919050565b60006020820190508181036000830152614b4881614494565b9050919050565b60006020820190508181036000830152614b68816144b7565b9050919050565b60006020820190508181036000830152614b88816144fd565b9050919050565b60006020820190508181036000830152614ba881614520565b9050919050565b60006020820190508181036000830152614bc881614543565b9050919050565b60006020820190508181036000830152614be881614566565b9050919050565b60006020820190508181036000830152614c0881614589565b9050919050565b60006020820190508181036000830152614c28816145ac565b9050919050565b60006020820190508181036000830152614c48816145cf565b9050919050565b60006020820190508181036000830152614c68816145f2565b9050919050565b60006020820190508181036000830152614c8881614615565b9050919050565b60006020820190508181036000830152614ca881614638565b9050919050565b60006020820190508181036000830152614cc88161465b565b9050919050565b60006020820190508181036000830152614ce88161467e565b9050919050565b60006020820190508181036000830152614d08816146a1565b9050919050565b60006020820190508181036000830152614d28816146e7565b9050919050565b60006020820190508181036000830152614d488161470a565b9050919050565b60006020820190508181036000830152614d688161472d565b9050919050565b60006020820190508181036000830152614d8881614750565b9050919050565b60006020820190508181036000830152614da881614773565b9050919050565b60006020820190508181036000830152614dc881614796565b9050919050565b60006020820190508181036000830152614de8816147b9565b9050919050565b60006020820190508181036000830152614e08816147dc565b9050919050565b60006020820190508181036000830152614e28816147ff565b9050919050565b60006020820190508181036000830152614e4881614822565b9050919050565b60006020820190508181036000830152614e6881614845565b9050919050565b6000602082019050614e846000830184614877565b92915050565b6000604082019050614e9f6000830185614877565b614eac6020830184614877565b9392505050565b6000614ebd614ece565b9050614ec9828261521d565b919050565b6000604051905090565b600067ffffffffffffffff821115614ef357614ef2615384565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f1f57614f1e615384565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f4b57614f4a615384565b5b614f54826153ee565b9050602081019050919050565b600067ffffffffffffffff821115614f7c57614f7b615384565b5b614f85826153ee565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006150198261518d565b91506150248361518d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615059576150586152c8565b5b828201905092915050565b600061506f8261518d565b915061507a8361518d565b92508261508a576150896152f7565b5b828204905092915050565b60006150a08261518d565b91506150ab8361518d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e4576150e36152c8565b5b828202905092915050565b60006150fa8261518d565b91506151058361518d565b925082821015615118576151176152c8565b5b828203905092915050565b600061512e8261516d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006151a28261518d565b9050919050565b82818337600083830152505050565b60005b838110156151d65780820151818401526020810190506151bb565b838111156151e5576000848401525b50505050565b6000600282049050600182168061520357607f821691505b6020821081141561521757615216615326565b5b50919050565b615226826153ee565b810181811067ffffffffffffffff8211171561524557615244615384565b5b80604052505050565b60006152598261518d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561528c5761528b6152c8565b5b600182019050919050565b60006152a28261518d565b91506152ad8361518d565b9250826152bd576152bc6152f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156153d25760046000803e6153cf6000516153ff565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178696d756d20000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f20617070726f766520636f6c6c656374696f6e206660008201527f6972737421000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320616c7265616479206f776e6564206120746f6b656e000000600082015250565b7f43616e206f6e6c792062652063616c6c6564206279204d657461536b756c6c00600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f5075626c69632053616c65204973206e6f74206c697665207965740000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f596f7520646f6e74206f776e20616e792057686974656c697374205061737321600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f206d696e74207065722077616c6c657400000000000000000000000000000000600082015250565b7f4164647265737320616c7265616479206d696e746564203120746f6b656e0000600082015250565b7f43616e6e6f74206275726e203020746f6b656e73000000000000000000000000600082015250565b7f43616e6e6f74206d696e74203020746f6b656e73000000000000000000000000600082015250565b7f43616e206f6e6c792062652063616c6c6564206279206f776e65720000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5061796d656e7420616d6f756e74206e6f7420636f7272656374000000000000600082015250565b7f4d696e7420457863656564204d617820537570706c7900000000000000000000600082015250565b600060443d1015615b7657615bf9565b615b7e614ece565b60043d036004823e80513d602482011167ffffffffffffffff82111715615ba6575050615bf9565b808201805167ffffffffffffffff811115615bc45750505050615bf9565b80602083010160043d038501811115615be1575050505050615bf9565b615bf08260200185018661521d565b82955050505050505b90565b615c0581615123565b8114615c1057600080fd5b50565b615c1c81615135565b8114615c2757600080fd5b50565b615c3381615141565b8114615c3e57600080fd5b50565b615c4a8161518d565b8114615c5557600080fd5b5056fea2646970667358221220794130dfeaaacd9349b55dc9dfe8bb654e6592e62611dd511a6e7da076feeb5d64736f6c63430008070033
Deployed Bytecode
0x60806040526004361061027c5760003560e01c80636f8b44b01161014f578063a22cb465116100c1578063d1df306c1161007a578063d1df306c1461097c578063e985e9c5146109a5578063f242432a146109e2578063f2fde38b14610a0b578063f4a0a52814610a34578063f5298aca14610a5d5761027c565b8063a22cb4651461085a578063a2a5ad7314610883578063a4fefad6146108ac578063a7f93ebd146108d7578063bd85b03914610902578063c464d2211461093f5761027c565b80638456cb59116101135780638456cb59146107695780638da5cb5b1461078057806392795020146107ab57806395d89b41146107d65780639b19251a14610801578063a0712d681461083e5761027c565b80636f8b44b0146106aa578063715018a6146106d35780637754305c146106ea578063777ca7cf146107155780637b47ec1a146107405761027c565b80632eb2c2d6116101f35780634f558e79116101ac5780634f558e791461059a578063522dfa75146105d7578063543d3d7e1461060257806356fa6c481461062b5780635c975abb146106565780636b20c454146106815761027c565b80632eb2c2d6146104b25780633ccfd60b146104db5780633f4ba83a146104f2578063484b973c146105095780634c0f38c2146105325780634e1273f41461055d5761027c565b80630e89341c116102455780630e89341c1461037a57806315070401146103b757806317d7de7c146103e25780631e7269c51461040d5780631e8edadb1461044a57806322f4596f146104875761027c565b8062fdd58e1461028157806301ffc9a7146102be57806302fe5305146102fb5780630387da421461032457806306fdde031461034f575b600080fd5b34801561028d57600080fd5b506102a860048036038101906102a3919061408d565b610a86565b6040516102b59190614e6f565b60405180910390f35b3480156102ca57600080fd5b506102e560048036038101906102e091906141c5565b610b4f565b6040516102f29190614a3b565b60405180910390f35b34801561030757600080fd5b50610322600480360381019061031d919061421f565b610c31565b005b34801561033057600080fd5b50610339610c8d565b6040516103469190614e6f565b60405180910390f35b34801561035b57600080fd5b50610364610c93565b6040516103719190614a56565b60405180910390f35b34801561038657600080fd5b506103a1600480360381019061039c9190614268565b610d21565b6040516103ae9190614a56565b60405180910390f35b3480156103c357600080fd5b506103cc610db5565b6040516103d99190614a56565b60405180910390f35b3480156103ee57600080fd5b506103f7610e47565b6040516104049190614a56565b60405180910390f35b34801561041957600080fd5b50610434600480360381019061042f9190613def565b610ed9565b6040516104419190614a3b565b60405180910390f35b34801561045657600080fd5b50610471600480360381019061046c9190613def565b610ef9565b60405161047e9190614a3b565b60405180910390f35b34801561049357600080fd5b5061049c610f4f565b6040516104a99190614e6f565b60405180910390f35b3480156104be57600080fd5b506104d960048036038101906104d49190613e5c565b610f55565b005b3480156104e757600080fd5b506104f0610ff6565b005b3480156104fe57600080fd5b50610507611124565b005b34801561051557600080fd5b50610530600480360381019061052b919061408d565b611136565b005b34801561053e57600080fd5b50610547611262565b6040516105549190614e6f565b60405180910390f35b34801561056957600080fd5b50610584600480360381019061057f9190614120565b61126c565b60405161059191906149e2565b60405180910390f35b3480156105a657600080fd5b506105c160048036038101906105bc9190614268565b611385565b6040516105ce9190614a3b565b60405180910390f35b3480156105e357600080fd5b506105ec611399565b6040516105f99190614a3b565b60405180910390f35b34801561060e57600080fd5b5061062960048036038101906106249190614198565b6113ac565b005b34801561063757600080fd5b50610640611408565b60405161064d9190614e6f565b60405180910390f35b34801561066257600080fd5b5061066b61140e565b6040516106789190614a3b565b60405180910390f35b34801561068d57600080fd5b506106a860048036038101906106a39190613fc2565b611425565b005b3480156106b657600080fd5b506106d160048036038101906106cc9190614268565b6114c2565b005b3480156106df57600080fd5b506106e861150b565b005b3480156106f657600080fd5b506106ff61151f565b60405161070c9190614a56565b60405180910390f35b34801561072157600080fd5b5061072a611538565b6040516107379190614a3b565b60405180910390f35b34801561074c57600080fd5b5061076760048036038101906107629190614268565b611557565b005b34801561077557600080fd5b5061077e611634565b005b34801561078c57600080fd5b50610795611646565b6040516107a291906148b3565b60405180910390f35b3480156107b757600080fd5b506107c0611670565b6040516107cd91906148b3565b60405180910390f35b3480156107e257600080fd5b506107eb611696565b6040516107f89190614a56565b60405180910390f35b34801561080d57600080fd5b5061082860048036038101906108239190613def565b611724565b6040516108359190614a3b565b60405180910390f35b61085860048036038101906108539190614268565b611744565b005b34801561086657600080fd5b50610881600480360381019061087c919061404d565b611b34565b005b34801561088f57600080fd5b506108aa60048036038101906108a59190613def565b611b4a565b005b3480156108b857600080fd5b506108c1611c3c565b6040516108ce9190614e6f565b60405180910390f35b3480156108e357600080fd5b506108ec611c42565b6040516108f99190614e6f565b60405180910390f35b34801561090e57600080fd5b5061092960048036038101906109249190614268565b611c4c565b6040516109369190614e6f565b60405180910390f35b34801561094b57600080fd5b5061096660048036038101906109619190613def565b611c69565b6040516109739190614a3b565b60405180910390f35b34801561098857600080fd5b506109a3600480360381019061099e919061408d565b611cbf565b005b3480156109b157600080fd5b506109cc60048036038101906109c79190613e1c565b611f2a565b6040516109d99190614a3b565b60405180910390f35b3480156109ee57600080fd5b50610a096004803603810190610a049190613f2b565b611fbe565b005b348015610a1757600080fd5b50610a326004803603810190610a2d9190613def565b61205f565b005b348015610a4057600080fd5b50610a5b6004803603810190610a569190614268565b6120e3565b005b348015610a6957600080fd5b50610a846004803603810190610a7f91906140cd565b61212e565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415610af7576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aee90614b6f565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff19161480610c1a57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b80610c2a5750610c29826121cb565b5b9050919050565b610c39612235565b6000610c456001610d21565b9050610c50826122b3565b7f7c792b0935c1aad589d60c776f75efe6bea81bce17fda35401dad37cf9bff7ed8183604051610c81929190614a78565b60405180910390a15050565b60085481565b600a8054610ca0906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610ccc906151eb565b8015610d195780601f10610cee57610100808354040283529160200191610d19565b820191906000526020600020905b815481529060010190602001808311610cfc57829003601f168201915b505050505081565b606060028054610d30906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610d5c906151eb565b8015610da95780601f10610d7e57610100808354040283529160200191610da9565b820191906000526020600020905b815481529060010190602001808311610d8c57829003601f168201915b50505050509050919050565b6060600b8054610dc4906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610df0906151eb565b8015610e3d5780601f10610e1257610100808354040283529160200191610e3d565b820191906000526020600020905b815481529060010190602001808311610e2057829003601f168201915b5050505050905090565b6060600a8054610e56906151eb565b80601f0160208091040260200160405190810160405280929190818152602001828054610e82906151eb565b8015610ecf5780601f10610ea457610100808354040283529160200191610ecf565b820191906000526020600020905b815481529060010190602001808311610eb257829003601f168201915b5050505050905090565b600e6020528060005260406000206000915054906101000a900460ff1681565b6000600e60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b60075481565b610f5d6122cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610fa35750610fa285610f9d6122cd565b611f2a565b5b610fe2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fd990614acf565b60405180910390fd5b610fef85858585856122d5565b5050505050565b610ffe612235565b60026005541415611044576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161103b90614e0f565b60405180910390fd5b6002600581905550600047905060004711611094576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108b90614c8f565b60405180910390fd5b61109c611646565b73ffffffffffffffffffffffffffffffffffffffff166108fc479081150290604051600060405180830381858888f193505050501580156110e1573d6000803e3d6000fd5b507f5b6b431d4476a211bb7d41c20d1aab9ae2321deee0d20be3d9fc9b1093fa6e3d816040516111119190614e6f565b60405180910390a1506001600581905550565b61112c612235565b6111346125f7565b565b61113e612235565b60026005541415611184576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161117b90614e0f565b60405180910390fd5b60026005819055506007548160065461119d919061500e565b11156111de576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111d590614e4f565b60405180910390fd5b60008111611221576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161121890614d4f565b60405180910390fd5b61123d826001836040518060200160405280600081525061265a565b806006600082825461124f919061500e565b9250508190555060016005819055505050565b6000600754905090565b606081518351146112b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a990614daf565b60405180910390fd5b6000835167ffffffffffffffff8111156112cf576112ce615384565b5b6040519080825280602002602001820160405280156112fd5781602001602082028036833780820191505090505b50905060005b845181101561137a5761134a85828151811061132257611321615355565b5b602002602001015185838151811061133d5761133c615355565b5b6020026020010151610a86565b82828151811061135d5761135c615355565b5b602002602001018181525050806113739061524e565b9050611303565b508091505092915050565b60008061139183611c4c565b119050919050565b600c60009054906101000a900460ff1681565b6113b4612235565b80600c60006101000a81548160ff0219169083151502179055507fcf5477fe56b4eb12abe8c67d9181bce15def3c90f0d5f7771a728eeed08d0b40816040516113fd9190614a3b565b60405180910390a150565b60095481565b6000600360149054906101000a900460ff16905090565b61142d6122cd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061147357506114728361146d6122cd565b611f2a565b5b6114b2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114a990614acf565b60405180910390fd5b6114bd83838361280b565b505050565b6114ca612235565b806007819055507f3f8118fc46e72ecde0c5e090803cad8c88e817b2f1e93e820aa9bfbf51f2468d816040516115009190614e6f565b60405180910390a150565b611513612235565b61151d6000612ada565b565b6060611529612235565b6115336001610d21565b905090565b6000611542612235565b600c60009054906101000a900460ff16905090565b6115613330611f2a565b61157157611570306001611b34565b5b600081116115b4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016115ab90614d2f565b60405180910390fd5b6115c03360018361212e565b6001600d60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff021916908315150217905550806006600082825461162a91906150ef565b9250508190555050565b61163c612235565b611644612ba0565b565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1681565b600b80546116a3906151eb565b80601f01602080910402602001604051908101604052809291908181526020018280546116cf906151eb565b801561171c5780601f106116f15761010080835404028352916020019161171c565b820191906000526020600020905b8154815290600101906020018083116116ff57829003601f168201915b505050505081565b600d6020528060005260406000206000915054906101000a900460ff1681565b6002600554141561178a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161178190614e0f565b60405180910390fd5b6002600581905550600c60009054906101000a900460ff166117e1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016117d890614c0f565b60405180910390fd5b600754816006546117f2919061500e565b1115611833576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161182a90614e4f565b60405180910390fd5b60011515600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16151514156118c7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016118be90614d0f565b60405180910390fd5b6009543073ffffffffffffffffffffffffffffffffffffffff1662fdd58e3360016040518363ffffffff1660e01b81526004016119059291906149b9565b60206040518083038186803b15801561191d57600080fd5b505afa158015611931573d6000803e3d6000fd5b505050506040513d601f19601f820116820180604052508101906119559190614295565b10611995576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161198c90614baf565b60405180910390fd5b600081116119d8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119cf90614d4f565b60405180910390fd5b600954811115611a4d5760006119ef600954612c03565b6040516020016119ff9190614886565b6040516020818303038152906040529050806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a449190614a56565b60405180910390fd5b60085481611a5b9190615095565b3414611a9c576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a9390614e2f565b60405180910390fd5b611ab8336001836040518060200160405280600081525061265a565b6001600e60003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060066000828254611b22919061500e565b92505081905550600160058190555050565b611b46611b3f6122cd565b8383612d64565b5050565b611b52611646565b73ffffffffffffffffffffffffffffffffffffffff163273ffffffffffffffffffffffffffffffffffffffff1614611bbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bb690614d6f565b60405180910390fd5b80600f60006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055507f3045bdf2e28bf38d6aa3dacfdb4a1635891d52fab6f7e471ad838f8ea8d23a8a3382604051611c319291906148ce565b60405180910390a150565b60065481565b6000600854905090565b600060046000838152602001908152602001600020549050919050565b6000600d60008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff169050919050565b600f60009054906101000a900473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff163373ffffffffffffffffffffffffffffffffffffffff1614611d4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d4690614bcf565b60405180910390fd5b60003073ffffffffffffffffffffffffffffffffffffffff1662fdd58e8460016040518363ffffffff1660e01b8152600401611d8c9291906149b9565b60206040518083038186803b158015611da457600080fd5b505afa158015611db8573d6000803e3d6000fd5b505050506040513d601f19601f82011682018060405250810190611ddc9190614295565b1415611e1d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e1490614caf565b60405180910390fd5b611e278233611f2a565b611e66576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e5d90614b8f565b60405180910390fd5b60008111611ea9576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611ea090614d2f565b60405180910390fd5b611eb58260018361212e565b6001600d60008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508060066000828254611f1f91906150ef565b925050819055505050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b611fc66122cd565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061200c575061200b856120066122cd565b611f2a565b5b61204b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161204290614acf565b60405180910390fd5b6120588585858585612ed1565b5050505050565b612067612235565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1614156120d7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016120ce90614b2f565b60405180910390fd5b6120e081612ada565b50565b6120eb612235565b806008819055507f02ebcb79e897ca3a22313ba6de8fc964409964de565fb4bb6a0927871756b88c6008546040516121239190614e6f565b60405180910390a150565b6121366122cd565b73ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16148061217c575061217b836121766122cd565b611f2a565b5b6121bb576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016121b290614acf565b60405180910390fd5b6121c683838361316d565b505050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b61223d6122cd565b73ffffffffffffffffffffffffffffffffffffffff1661225b611646565b73ffffffffffffffffffffffffffffffffffffffff16146122b1576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016122a890614ccf565b60405180910390fd5b565b80600290805190602001906122c9929190613ab2565b5050565b600033905090565b8151835114612319576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161231090614dcf565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612389576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161238090614c2f565b60405180910390fd5b60006123936122cd565b90506123a38187878787876133b4565b60005b84518110156125545760008582815181106123c4576123c3615355565b5b6020026020010151905060008583815181106123e3576123e2615355565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015612484576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161247b90614c6f565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254612539919061500e565b925050819055505050508061254d9061524e565b90506123a6565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516125cb929190614a04565b60405180910390a46125e18187878787876133d2565b6125ef8187878787876133da565b505050505050565b6125ff6135c1565b6000600360146101000a81548160ff0219169083151502179055507f5db9ee0a495bf2e6ff9c91a7834c1ba4fdd244a5e8aa4e537bd38aeae4b073aa6126436122cd565b60405161265091906148b3565b60405180910390a1565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1614156126ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016126c190614def565b60405180910390fd5b60006126d46122cd565b905060006126e18561360a565b905060006126ee8561360a565b90506126ff836000898585896133b4565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461275e919061500e565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f6289896040516127dc929190614e8a565b60405180910390a46127f3836000898585896133d2565b61280283600089898989613684565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16141561287b576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161287290614c4f565b60405180910390fd5b80518251146128bf576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016128b690614dcf565b60405180910390fd5b60006128c96122cd565b90506128e9818560008686604051806020016040528060008152506133b4565b60005b8351811015612a3657600084828151811061290a57612909615355565b5b60200260200101519050600084838151811061292957612928615355565b5b60200260200101519050600080600084815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156129ca576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016129c190614b4f565b60405180910390fd5b81810360008085815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055505050508080612a2e9061524e565b9150506128ec565b50600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8686604051612aae929190614a04565b60405180910390a4612ad4818560008686604051806020016040528060008152506133d2565b50505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b612ba861386b565b6001600360146101000a81548160ff0219169083151502179055507f62e78cea01bee320cd4e420270b5ea74000d11b0c9f74754ebdbfc544b05a258612bec6122cd565b604051612bf991906148b3565b60405180910390a1565b60606000821415612c4b576040518060400160405280600181526020017f30000000000000000000000000000000000000000000000000000000000000008152509050612d5f565b600082905060005b60008214612c7d578080612c669061524e565b915050600a82612c769190615064565b9150612c53565b60008167ffffffffffffffff811115612c9957612c98615384565b5b6040519080825280601f01601f191660200182016040528015612ccb5781602001600182028036833780820191505090505b5090505b60008514612d5857600182612ce491906150ef565b9150600a85612cf39190615297565b6030612cff919061500e565b60f81b818381518110612d1557612d14615355565b5b60200101907effffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916908160001a905350600a85612d519190615064565b9450612ccf565b8093505050505b919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff161415612dd3576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612dca90614d8f565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c3183604051612ec49190614a3b565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415612f41576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401612f3890614c2f565b60405180910390fd5b6000612f4b6122cd565b90506000612f588561360a565b90506000612f658561360a565b9050612f758389898585896133b4565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000205490508581101561300c576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161300390614c6f565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546130c1919061500e565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a60405161313e929190614e8a565b60405180910390a4613154848a8a86868a6133d2565b613162848a8a8a8a8a613684565b505050505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1614156131dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016131d490614c4f565b60405180910390fd5b60006131e76122cd565b905060006131f48461360a565b905060006132018461360a565b9050613221838760008585604051806020016040528060008152506133b4565b600080600087815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050848110156132b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016132af90614b4f565b60405180910390fd5b84810360008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550600073ffffffffffffffffffffffffffffffffffffffff168773ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051613385929190614e8a565b60405180910390a46133ab848860008686604051806020016040528060008152506133d2565b50505050505050565b6133bc61386b565b6133ca8686868686866138b5565b505050505050565b505050505050565b6133f98473ffffffffffffffffffffffffffffffffffffffff16613a87565b156135b9578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b815260040161343f9594939291906148f7565b602060405180830381600087803b15801561345957600080fd5b505af192505050801561348a57506040513d601f19601f8201168201806040525081019061348791906141f2565b60015b613530576134966153b3565b806308c379a014156134f357506134ab615b66565b806134b657506134f5565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016134ea9190614a56565b60405180910390fd5b505b6040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161352790614aaf565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916146135b7576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ae90614aef565b60405180910390fd5b505b505050505050565b6135c961140e565b613608576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016135ff90614b0f565b60405180910390fd5b565b60606000600167ffffffffffffffff81111561362957613628615384565b5b6040519080825280602002602001820160405280156136575781602001602082028036833780820191505090505b509050828160008151811061366f5761366e615355565b5b60200260200101818152505080915050919050565b6136a38473ffffffffffffffffffffffffffffffffffffffff16613a87565b15613863578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016136e995949392919061495f565b602060405180830381600087803b15801561370357600080fd5b505af192505050801561373457506040513d601f19601f8201168201806040525081019061373191906141f2565b60015b6137da576137406153b3565b806308c379a0141561379d5750613755615b66565b80613760575061379f565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137949190614a56565b60405180910390fd5b505b6040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016137d190614aaf565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614613861576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161385890614aef565b60405180910390fd5b505b505050505050565b61387361140e565b156138b3576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016138aa90614bef565b60405180910390fd5b565b6138c3868686868686613aaa565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614156139755760005b83518110156139735782818151811061391757613916615355565b5b60200260200101516004600086848151811061393657613935615355565b5b60200260200101518152602001908152602001600020600082825461395b919061500e565b925050819055508061396c9061524e565b90506138fb565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff161415613a7f5760005b8351811015613a7d5760008482815181106139cb576139ca615355565b5b6020026020010151905060008483815181106139ea576139e9615355565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015613a4f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401613a4690614cef565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080613a769061524e565b90506139ad565b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b505050505050565b828054613abe906151eb565b90600052602060002090601f016020900481019282613ae05760008555613b27565b82601f10613af957805160ff1916838001178555613b27565b82800160010185558215613b27579182015b82811115613b26578251825591602001919060010190613b0b565b5b509050613b349190613b38565b5090565b5b80821115613b51576000816000905550600101613b39565b5090565b6000613b68613b6384614ed8565b614eb3565b90508083825260208201905082856020860282011115613b8b57613b8a6153da565b5b60005b85811015613bbb5781613ba18882613cb9565b845260208401935060208301925050600181019050613b8e565b5050509392505050565b6000613bd8613bd384614f04565b614eb3565b90508083825260208201905082856020860282011115613bfb57613bfa6153da565b5b60005b85811015613c2b5781613c118882613dc5565b845260208401935060208301925050600181019050613bfe565b5050509392505050565b6000613c48613c4384614f30565b614eb3565b905082815260208101848484011115613c6457613c636153df565b5b613c6f8482856151a9565b509392505050565b6000613c8a613c8584614f61565b614eb3565b905082815260208101848484011115613ca657613ca56153df565b5b613cb18482856151a9565b509392505050565b600081359050613cc881615bfc565b92915050565b600082601f830112613ce357613ce26153d5565b5b8135613cf3848260208601613b55565b91505092915050565b600082601f830112613d1157613d106153d5565b5b8135613d21848260208601613bc5565b91505092915050565b600081359050613d3981615c13565b92915050565b600081359050613d4e81615c2a565b92915050565b600081519050613d6381615c2a565b92915050565b600082601f830112613d7e57613d7d6153d5565b5b8135613d8e848260208601613c35565b91505092915050565b600082601f830112613dac57613dab6153d5565b5b8135613dbc848260208601613c77565b91505092915050565b600081359050613dd481615c41565b92915050565b600081519050613de981615c41565b92915050565b600060208284031215613e0557613e046153e9565b5b6000613e1384828501613cb9565b91505092915050565b60008060408385031215613e3357613e326153e9565b5b6000613e4185828601613cb9565b9250506020613e5285828601613cb9565b9150509250929050565b600080600080600060a08688031215613e7857613e776153e9565b5b6000613e8688828901613cb9565b9550506020613e9788828901613cb9565b945050604086013567ffffffffffffffff811115613eb857613eb76153e4565b5b613ec488828901613cfc565b935050606086013567ffffffffffffffff811115613ee557613ee46153e4565b5b613ef188828901613cfc565b925050608086013567ffffffffffffffff811115613f1257613f116153e4565b5b613f1e88828901613d69565b9150509295509295909350565b600080600080600060a08688031215613f4757613f466153e9565b5b6000613f5588828901613cb9565b9550506020613f6688828901613cb9565b9450506040613f7788828901613dc5565b9350506060613f8888828901613dc5565b925050608086013567ffffffffffffffff811115613fa957613fa86153e4565b5b613fb588828901613d69565b9150509295509295909350565b600080600060608486031215613fdb57613fda6153e9565b5b6000613fe986828701613cb9565b935050602084013567ffffffffffffffff81111561400a576140096153e4565b5b61401686828701613cfc565b925050604084013567ffffffffffffffff811115614037576140366153e4565b5b61404386828701613cfc565b9150509250925092565b60008060408385031215614064576140636153e9565b5b600061407285828601613cb9565b925050602061408385828601613d2a565b9150509250929050565b600080604083850312156140a4576140a36153e9565b5b60006140b285828601613cb9565b92505060206140c385828601613dc5565b9150509250929050565b6000806000606084860312156140e6576140e56153e9565b5b60006140f486828701613cb9565b935050602061410586828701613dc5565b925050604061411686828701613dc5565b9150509250925092565b60008060408385031215614137576141366153e9565b5b600083013567ffffffffffffffff811115614155576141546153e4565b5b61416185828601613cce565b925050602083013567ffffffffffffffff811115614182576141816153e4565b5b61418e85828601613cfc565b9150509250929050565b6000602082840312156141ae576141ad6153e9565b5b60006141bc84828501613d2a565b91505092915050565b6000602082840312156141db576141da6153e9565b5b60006141e984828501613d3f565b91505092915050565b600060208284031215614208576142076153e9565b5b600061421684828501613d54565b91505092915050565b600060208284031215614235576142346153e9565b5b600082013567ffffffffffffffff811115614253576142526153e4565b5b61425f84828501613d97565b91505092915050565b60006020828403121561427e5761427d6153e9565b5b600061428c84828501613dc5565b91505092915050565b6000602082840312156142ab576142aa6153e9565b5b60006142b984828501613dda565b91505092915050565b60006142ce8383614868565b60208301905092915050565b6142e381615123565b82525050565b60006142f482614fa2565b6142fe8185614fd0565b935061430983614f92565b8060005b8381101561433a57815161432188826142c2565b975061432c83614fc3565b92505060018101905061430d565b5085935050505092915050565b61435081615135565b82525050565b600061436182614fad565b61436b8185614fe1565b935061437b8185602086016151b8565b614384816153ee565b840191505092915050565b61439881615197565b82525050565b60006143a982614fb8565b6143b38185614ff2565b93506143c38185602086016151b8565b6143cc816153ee565b840191505092915050565b60006143e282614fb8565b6143ec8185615003565b93506143fc8185602086016151b8565b80840191505092915050565b6000614415603483614ff2565b91506144208261540c565b604082019050919050565b6000614438602f83614ff2565b91506144438261545b565b604082019050919050565b600061445b602883614ff2565b9150614466826154aa565b604082019050919050565b600061447e601483614ff2565b9150614489826154f9565b602082019050919050565b60006144a1602683614ff2565b91506144ac82615522565b604082019050919050565b60006144c4602483614ff2565b91506144cf82615571565b604082019050919050565b60006144e7600883615003565b91506144f2826155c0565b600882019050919050565b600061450a602a83614ff2565b9150614515826155e9565b604082019050919050565b600061452d602583614ff2565b915061453882615638565b604082019050919050565b6000614550601d83614ff2565b915061455b82615687565b602082019050919050565b6000614573601f83614ff2565b915061457e826156b0565b602082019050919050565b6000614596601083614ff2565b91506145a1826156d9565b602082019050919050565b60006145b9601b83614ff2565b91506145c482615702565b602082019050919050565b60006145dc602583614ff2565b91506145e78261572b565b604082019050919050565b60006145ff602383614ff2565b915061460a8261577a565b604082019050919050565b6000614622602a83614ff2565b915061462d826157c9565b604082019050919050565b6000614645600c83614ff2565b915061465082615818565b602082019050919050565b6000614668602083614ff2565b915061467382615841565b602082019050919050565b600061468b602083614ff2565b91506146968261586a565b602082019050919050565b60006146ae602883614ff2565b91506146b982615893565b604082019050919050565b60006146d1601083615003565b91506146dc826158e2565b601082019050919050565b60006146f4601e83614ff2565b91506146ff8261590b565b602082019050919050565b6000614717601483614ff2565b915061472282615934565b602082019050919050565b600061473a601483614ff2565b91506147458261595d565b602082019050919050565b600061475d601b83614ff2565b915061476882615986565b602082019050919050565b6000614780602983614ff2565b915061478b826159af565b604082019050919050565b60006147a3602983614ff2565b91506147ae826159fe565b604082019050919050565b60006147c6602883614ff2565b91506147d182615a4d565b604082019050919050565b60006147e9602183614ff2565b91506147f482615a9c565b604082019050919050565b600061480c601f83614ff2565b915061481782615aeb565b602082019050919050565b600061482f601a83614ff2565b915061483a82615b14565b602082019050919050565b6000614852601683614ff2565b915061485d82615b3d565b602082019050919050565b6148718161518d565b82525050565b6148808161518d565b82525050565b6000614891826144da565b915061489d82846143d7565b91506148a8826146c4565b915081905092915050565b60006020820190506148c860008301846142da565b92915050565b60006040820190506148e360008301856142da565b6148f060208301846142da565b9392505050565b600060a08201905061490c60008301886142da565b61491960208301876142da565b818103604083015261492b81866142e9565b9050818103606083015261493f81856142e9565b905081810360808301526149538184614356565b90509695505050505050565b600060a08201905061497460008301886142da565b61498160208301876142da565b61498e6040830186614877565b61499b6060830185614877565b81810360808301526149ad8184614356565b90509695505050505050565b60006040820190506149ce60008301856142da565b6149db602083018461438f565b9392505050565b600060208201905081810360008301526149fc81846142e9565b905092915050565b60006040820190508181036000830152614a1e81856142e9565b90508181036020830152614a3281846142e9565b90509392505050565b6000602082019050614a506000830184614347565b92915050565b60006020820190508181036000830152614a70818461439e565b905092915050565b60006040820190508181036000830152614a92818561439e565b90508181036020830152614aa6818461439e565b90509392505050565b60006020820190508181036000830152614ac881614408565b9050919050565b60006020820190508181036000830152614ae88161442b565b9050919050565b60006020820190508181036000830152614b088161444e565b9050919050565b60006020820190508181036000830152614b2881614471565b9050919050565b60006020820190508181036000830152614b4881614494565b9050919050565b60006020820190508181036000830152614b68816144b7565b9050919050565b60006020820190508181036000830152614b88816144fd565b9050919050565b60006020820190508181036000830152614ba881614520565b9050919050565b60006020820190508181036000830152614bc881614543565b9050919050565b60006020820190508181036000830152614be881614566565b9050919050565b60006020820190508181036000830152614c0881614589565b9050919050565b60006020820190508181036000830152614c28816145ac565b9050919050565b60006020820190508181036000830152614c48816145cf565b9050919050565b60006020820190508181036000830152614c68816145f2565b9050919050565b60006020820190508181036000830152614c8881614615565b9050919050565b60006020820190508181036000830152614ca881614638565b9050919050565b60006020820190508181036000830152614cc88161465b565b9050919050565b60006020820190508181036000830152614ce88161467e565b9050919050565b60006020820190508181036000830152614d08816146a1565b9050919050565b60006020820190508181036000830152614d28816146e7565b9050919050565b60006020820190508181036000830152614d488161470a565b9050919050565b60006020820190508181036000830152614d688161472d565b9050919050565b60006020820190508181036000830152614d8881614750565b9050919050565b60006020820190508181036000830152614da881614773565b9050919050565b60006020820190508181036000830152614dc881614796565b9050919050565b60006020820190508181036000830152614de8816147b9565b9050919050565b60006020820190508181036000830152614e08816147dc565b9050919050565b60006020820190508181036000830152614e28816147ff565b9050919050565b60006020820190508181036000830152614e4881614822565b9050919050565b60006020820190508181036000830152614e6881614845565b9050919050565b6000602082019050614e846000830184614877565b92915050565b6000604082019050614e9f6000830185614877565b614eac6020830184614877565b9392505050565b6000614ebd614ece565b9050614ec9828261521d565b919050565b6000604051905090565b600067ffffffffffffffff821115614ef357614ef2615384565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f1f57614f1e615384565b5b602082029050602081019050919050565b600067ffffffffffffffff821115614f4b57614f4a615384565b5b614f54826153ee565b9050602081019050919050565b600067ffffffffffffffff821115614f7c57614f7b615384565b5b614f85826153ee565b9050602081019050919050565b6000819050602082019050919050565b600081519050919050565b600081519050919050565b600081519050919050565b6000602082019050919050565b600082825260208201905092915050565b600082825260208201905092915050565b600082825260208201905092915050565b600081905092915050565b60006150198261518d565b91506150248361518d565b9250827fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff03821115615059576150586152c8565b5b828201905092915050565b600061506f8261518d565b915061507a8361518d565b92508261508a576150896152f7565b5b828204905092915050565b60006150a08261518d565b91506150ab8361518d565b9250817fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff04831182151516156150e4576150e36152c8565b5b828202905092915050565b60006150fa8261518d565b91506151058361518d565b925082821015615118576151176152c8565b5b828203905092915050565b600061512e8261516d565b9050919050565b60008115159050919050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000819050919050565b60006151a28261518d565b9050919050565b82818337600083830152505050565b60005b838110156151d65780820151818401526020810190506151bb565b838111156151e5576000848401525b50505050565b6000600282049050600182168061520357607f821691505b6020821081141561521757615216615326565b5b50919050565b615226826153ee565b810181811067ffffffffffffffff8211171561524557615244615384565b5b80604052505050565b60006152598261518d565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82141561528c5761528b6152c8565b5b600182019050919050565b60006152a28261518d565b91506152ad8361518d565b9250826152bd576152bc6152f7565b5b828206905092915050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b600060033d11156153d25760046000803e6153cf6000516153ff565b90505b90565b600080fd5b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b60008160e01c9050919050565b7f455243313135353a207472616e7366657220746f206e6f6e204552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206e6f7220617070726f7665640000000000000000000000000000000000602082015250565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b7f5061757361626c653a206e6f7420706175736564000000000000000000000000600082015250565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e20616d6f756e7420657863656564732062616c60008201527f616e636500000000000000000000000000000000000000000000000000000000602082015250565b7f4d6178696d756d20000000000000000000000000000000000000000000000000600082015250565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b7f596f75206e65656420746f20617070726f766520636f6c6c656374696f6e206660008201527f6972737421000000000000000000000000000000000000000000000000000000602082015250565b7f4164647265737320616c7265616479206f776e6564206120746f6b656e000000600082015250565b7f43616e206f6e6c792062652063616c6c6564206279204d657461536b756c6c00600082015250565b7f5061757361626c653a2070617573656400000000000000000000000000000000600082015250565b7f5075626c69632053616c65204973206e6f74206c697665207965740000000000600082015250565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206275726e2066726f6d20746865207a65726f206164647260008201527f6573730000000000000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b7f42616c616e636520697320300000000000000000000000000000000000000000600082015250565b7f596f7520646f6e74206f776e20616e792057686974656c697374205061737321600082015250565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b7f206d696e74207065722077616c6c657400000000000000000000000000000000600082015250565b7f4164647265737320616c7265616479206d696e746564203120746f6b656e0000600082015250565b7f43616e6e6f74206275726e203020746f6b656e73000000000000000000000000600082015250565b7f43616e6e6f74206d696e74203020746f6b656e73000000000000000000000000600082015250565b7f43616e206f6e6c792062652063616c6c6564206279206f776e65720000000000600082015250565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b7f5265656e7472616e637947756172643a207265656e7472616e742063616c6c00600082015250565b7f5061796d656e7420616d6f756e74206e6f7420636f7272656374000000000000600082015250565b7f4d696e7420457863656564204d617820537570706c7900000000000000000000600082015250565b600060443d1015615b7657615bf9565b615b7e614ece565b60043d036004823e80513d602482011167ffffffffffffffff82111715615ba6575050615bf9565b808201805167ffffffffffffffff811115615bc45750505050615bf9565b80602083010160043d038501811115615be1575050505050615bf9565b615bf08260200185018661521d565b82955050505050505b90565b615c0581615123565b8114615c1057600080fd5b50565b615c1c81615135565b8114615c2757600080fd5b50565b615c3381615141565b8114615c3e57600080fd5b50565b615c4a8161518d565b8114615c5557600080fd5b5056fea2646970667358221220794130dfeaaacd9349b55dc9dfe8bb654e6592e62611dd511a6e7da076feeb5d64736f6c63430008070033
Deployed Bytecode Sourcemap
52874:6115:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31568:230;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;30591:310;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54268:180;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53070:39;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53159:18;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31312:105;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57763:99;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57660:95;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53303:38;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58874:110;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53032:31;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33512:439;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55201:263;;;;;;;;;;;;;:::i;:::-;;54527:67;;;;;;;;;;;;;:::i;:::-;;54894:299;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;57552:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;31964:524;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;49193:122;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53211:37;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54602:157;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;53116:36;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;7855:86;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;47876:359;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55472:139;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10720:103;;;;;;;;;;;;;:::i;:::-;;54155:105;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;54767:119;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57978:318;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;54456:63;;;;;;;;;;;;;:::i;:::-;;10072:87;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53348:77;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53184:20;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;53255:41;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;56204:992;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32561:155;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55877:212;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;52992:33;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;57870:100;;;;;;;;;;;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;48982:113;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58750:116;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;58339:403;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;32788:168;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;33028:407;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;10978:201;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;55729:140;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;47541:327;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;31568:230;31654:7;31701:1;31682:21;;:7;:21;;;;31674:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;31768:9;:13;31778:2;31768:13;;;;;;;;;;;:22;31782:7;31768:22;;;;;;;;;;;;;;;;31761:29;;31568:230;;;;:::o;30591:310::-;30693:4;30745:26;30730:41;;;:11;:41;;;;:110;;;;30803:37;30788:52;;;:11;:52;;;;30730:110;:163;;;;30857:36;30881:11;30857:23;:36::i;:::-;30730:163;30710:183;;30591:310;;;:::o;54268:180::-;9958:13;:11;:13::i;:::-;54336:21:::1;54360:6;54364:1;54360:3;:6::i;:::-;54336:30;;54377:15;54385:6;54377:7;:15::i;:::-;54408:32;54424:7;54433:6;54408:32;;;;;;;:::i;:::-;;;;;;;;54325:123;54268:180:::0;:::o;53070:39::-;;;;:::o;53159:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;31312:105::-;31372:13;31405:4;31398:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;31312:105;;;:::o;57763:99::-;57815:13;57848:6;57841:13;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57763:99;:::o;57660:95::-;57710:13;57743:4;57736:11;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;57660:95;:::o;53303:38::-;;;;;;;;;;;;;;;;;;;;;;:::o;58874:110::-;58941:4;58965:6;:11;58972:3;58965:11;;;;;;;;;;;;;;;;;;;;;;;;;58958:18;;58874:110;;;:::o;53032:31::-;;;;:::o;33512:439::-;33753:12;:10;:12::i;:::-;33745:20;;:4;:20;;;:60;;;;33769:36;33786:4;33792:12;:10;:12::i;:::-;33769:16;:36::i;:::-;33745:60;33723:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;33891:52;33914:4;33920:2;33924:3;33929:7;33938:4;33891:22;:52::i;:::-;33512:439;;;;;:::o;55201:263::-;9958:13;:11;:13::i;:::-;1845:1:::1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;55264:15:::2;55282:21;55264:39;;55346:1;55322:21;:25;55314:50;;;;;;;;;;;;:::i;:::-;;;;;;;;;55383:7;:5;:7::i;:::-;55375:25;;:48;55401:21;55375:48;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;::::0;::::2;;;;;;55439:17;55448:7;55439:17;;;;;;:::i;:::-;;;;;;;;55253:211;1801:1:::1;2755:7;:22;;;;55201:263::o:0;54527:67::-;9958:13;:11;:13::i;:::-;54576:10:::1;:8;:10::i;:::-;54527:67::o:0;54894:299::-;9958:13;:11;:13::i;:::-;1845:1:::1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;55012:10:::2;;55003:6;54986:14;;:23;;;;:::i;:::-;:36;54983:74;;;55024:33;;;;;;;;;;:::i;:::-;;;;;;;;54983:74;55081:1;55071:6;:11;55068:47;;55084:31;;;;;;;;;;:::i;:::-;;;;;;;;55068:47;55126:24;55132:2;55136:1;55139:6;55126:24;;;;;;;;;;;::::0;:5:::2;:24::i;:::-;55179:6;55161:14;;:24;;;;;;;:::i;:::-;;;;;;;;1801:1:::1;2755:7;:22;;;;54894:299:::0;;:::o;57552:100::-;57607:7;57634:10;;57627:17;;57552:100;:::o;31964:524::-;32120:16;32181:3;:10;32162:8;:15;:29;32154:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;32250:30;32297:8;:15;32283:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;32250:63;;32331:9;32326:122;32350:8;:15;32346:1;:19;32326:122;;;32406:30;32416:8;32425:1;32416:11;;;;;;;;:::i;:::-;;;;;;;;32429:3;32433:1;32429:6;;;;;;;;:::i;:::-;;;;;;;;32406:9;:30::i;:::-;32387:13;32401:1;32387:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;32367:3;;;;:::i;:::-;;;32326:122;;;;32467:13;32460:20;;;31964:524;;;;:::o;49193:122::-;49250:4;49306:1;49274:29;49300:2;49274:25;:29::i;:::-;:33;49267:40;;49193:122;;;:::o;53211:37::-;;;;;;;;;;;;;:::o;54602:157::-;9958:13;:11;:13::i;:::-;54696:10:::1;54676:17;;:30;;;;;;;;;;;;;;;;;;54722:29;54740:10;54722:29;;;;;;:::i;:::-;;;;;;;;54602:157:::0;:::o;53116:36::-;;;;:::o;7855:86::-;7902:4;7926:7;;;;;;;;;;;7919:14;;7855:86;:::o;47876:359::-;48052:12;:10;:12::i;:::-;48041:23;;:7;:23;;;:66;;;;48068:39;48085:7;48094:12;:10;:12::i;:::-;48068:16;:39::i;:::-;48041:66;48019:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;48195:32;48206:7;48215:3;48220:6;48195:10;:32::i;:::-;47876:359;;;:::o;55472:139::-;9958:13;:11;:13::i;:::-;55555:9:::1;55542:10;:22;;;;55580:23;55593:9;55580:23;;;;;;:::i;:::-;;;;;;;;55472:139:::0;:::o;10720:103::-;9958:13;:11;:13::i;:::-;10785:30:::1;10812:1;10785:18;:30::i;:::-;10720:103::o:0;54155:105::-;54213:13;9958;:11;:13::i;:::-;54246:6:::1;54250:1;54246:3;:6::i;:::-;54239:13;;54155:105:::0;:::o;54767:119::-;54837:4;9958:13;:11;:13::i;:::-;54861:17:::1;;;;;;;;;;;54854:24;;54767:119:::0;:::o;57978:318::-;58033:43;58050:10;58070:4;58033:16;:43::i;:::-;58029:96;;58087:38;58113:4;58120;58087:17;:38::i;:::-;58029:96;58147:1;58137:6;:11;58134:46;;58150:30;;;;;;;;;;:::i;:::-;;;;;;;;58134:46;58189:33;58200:10;58212:1;58215:6;58189:10;:33::i;:::-;58253:4;58229:9;:21;58239:10;58229:21;;;;;;;;;;;;;;;;:28;;;;;;;;;;;;;;;;;;58282:6;58264:14;;:24;;;;;;;:::i;:::-;;;;;;;;57978:318;:::o;54456:63::-;9958:13;:11;:13::i;:::-;54503:8:::1;:6;:8::i;:::-;54456:63::o:0;10072:87::-;10118:7;10145:6;;;;;;;;;;;10138:13;;10072:87;:::o;53348:77::-;;;;;;;;;;;;;:::o;53184:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;53255:41::-;;;;;;;;;;;;;;;;;;;;;;:::o;56204:992::-;1845:1;2443:7;;:19;;2435:63;;;;;;;;;;;;:::i;:::-;;;;;;;;;1845:1;2576:7;:18;;;;56279:17:::1;;;;;;;;;;;56275:61;;56298:38;;;;;;;;;;:::i;:::-;;;;;;;;56275:61;56376:10;;56367:6;56350:14;;:23;;;;:::i;:::-;:36;56347:74;;;56388:33;;;;;;;;;;:::i;:::-;;;;;;;;56347:74;56457:4;56435:26;;:6;:18;56442:10;56435:18;;;;;;;;;;;;;;;;;;;;;;;;;:26;;;56432:72;;;56463:41;;;;;;;;;;:::i;:::-;;;;;;;;56432:72;56551:17;;56518:4;:14;;;56533:10;56545:1;56518:29;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:50;56515:95;;56570:40;;;;;;;;;;:::i;:::-;;;;;;;;56515:95;56634:1;56624:6;:11;56621:47;;56637:31;;;;;;;;;;:::i;:::-;;;;;;;;56621:47;56691:17;;56682:6;:26;56679:218;;;56724:28;56791:35;56808:17;;56791:16;:35::i;:::-;56762:85;;;;;;;;:::i;:::-;;;;;;;;;;;;;56724:124;;56870:14;56863:22;;;;;;;;;;;:::i;:::-;;;;;;;;56679:218;56930:10;;56923:6;:17;;;;:::i;:::-;56910:9;:30;56907:72;;56942:37;;;;;;;;;;:::i;:::-;;;;;;;;56907:72;57085:32;57091:10;57103:1;57106:6;57085:32;;;;;;;;;;;::::0;:5:::1;:32::i;:::-;57149:4;57128:6;:18;57135:10;57128:18;;;;;;;;;;;;;;;;:25;;;;;;;;;;;;;;;;;;57182:6;57164:14;;:24;;;;;;;:::i;:::-;;;;;;;;1801:1:::0;2755:7;:22;;;;56204:992;:::o;32561:155::-;32656:52;32675:12;:10;:12::i;:::-;32689:8;32699;32656:18;:52::i;:::-;32561:155;;:::o;55877:212::-;53924:7;:5;:7::i;:::-;53911:20;;:9;:20;;;53903:60;;;;;;;;;;;;:::i;:::-;;;;;;;;;56000:16:::1;55980:17;;:36;;;;;;;;;;;;;;;;;;56032:49;56052:10;56064:16;56032:49;;;;;;;:::i;:::-;;;;;;;;55877:212:::0;:::o;52992:33::-;;;;:::o;57870:100::-;57925:7;57952:10;;57945:17;;57870:100;:::o;48982:113::-;49044:7;49071:12;:16;49084:2;49071:16;;;;;;;;;;;;49064:23;;48982:113;;;:::o;58750:116::-;58820:4;58844:9;:14;58854:3;58844:14;;;;;;;;;;;;;;;;;;;;;;;;;58837:21;;58750:116;;;:::o;58339:403::-;54049:17;;;;;;;;;;;54035:31;;:10;:31;;;54027:75;;;;;;;;;;;;:::i;:::-;;;;;;;;;58446:1:::1;58420:4;:14;;;58435:3;58440:1;58420:22;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;::::0;::::1;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;:27;58417:75;;;58449:43;;;;;;;;;;:::i;:::-;;;;;;;;58417:75;58503:33;58520:3;58525:10;58503:16;:33::i;:::-;58499:86;;58538:47;;;;;;;;;;:::i;:::-;;;;;;;;58499:86;58607:1;58597:6;:11;58594:46;;58610:30;;;;;;;;;;:::i;:::-;;;;;;;;58594:46;58649:26;58660:3;58665:1;58668:6;58649:10;:26::i;:::-;58699:4;58682:9;:14;58692:3;58682:14;;;;;;;;;;;;;;;;:21;;;;;;;;;;;;;;;;;;58728:6;58710:14;;:24;;;;;;;:::i;:::-;;;;;;;;58339:403:::0;;:::o;32788:168::-;32887:4;32911:18;:27;32930:7;32911:27;;;;;;;;;;;;;;;:37;32939:8;32911:37;;;;;;;;;;;;;;;;;;;;;;;;;32904:44;;32788:168;;;;:::o;33028:407::-;33244:12;:10;:12::i;:::-;33236:20;;:4;:20;;;:60;;;;33260:36;33277:4;33283:12;:10;:12::i;:::-;33260:16;:36::i;:::-;33236:60;33214:157;;;;;;;;;;;;:::i;:::-;;;;;;;;;33382:45;33400:4;33406:2;33410;33414:6;33422:4;33382:17;:45::i;:::-;33028:407;;;;;:::o;10978:201::-;9958:13;:11;:13::i;:::-;11087:1:::1;11067:22;;:8;:22;;;;11059:73;;;;;;;;;;;;:::i;:::-;;;;;;;;;11143:28;11162:8;11143:18;:28::i;:::-;10978:201:::0;:::o;55729:140::-;9958:13;:11;:13::i;:::-;55812:9:::1;55799:10;:22;;;;55837:24;55850:10;;55837:24;;;;;;:::i;:::-;;;;;;;;55729:140:::0;:::o;47541:327::-;47692:12;:10;:12::i;:::-;47681:23;;:7;:23;;;:66;;;;47708:39;47725:7;47734:12;:10;:12::i;:::-;47708:16;:39::i;:::-;47681:66;47659:163;;;;;;;;;;;;:::i;:::-;;;;;;;;;47835:25;47841:7;47850:2;47854:5;47835;:25::i;:::-;47541:327;;;:::o;21872:157::-;21957:4;21996:25;21981:40;;;:11;:40;;;;21974:47;;21872:157;;;:::o;10237:132::-;10312:12;:10;:12::i;:::-;10301:23;;:7;:5;:7::i;:::-;:23;;;10293:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;10237:132::o;37737:88::-;37811:6;37804:4;:13;;;;;;;;;;;;:::i;:::-;;37737:88;:::o;5968:98::-;6021:7;6048:10;6041:17;;5968:98;:::o;35747:1146::-;35974:7;:14;35960:3;:10;:28;35952:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;36066:1;36052:16;;:2;:16;;;;36044:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;36123:16;36142:12;:10;:12::i;:::-;36123:31;;36167:60;36188:8;36198:4;36204:2;36208:3;36213:7;36222:4;36167:20;:60::i;:::-;36245:9;36240:421;36264:3;:10;36260:1;:14;36240:421;;;36296:10;36309:3;36313:1;36309:6;;;;;;;;:::i;:::-;;;;;;;;36296:19;;36330:14;36347:7;36355:1;36347:10;;;;;;;;:::i;:::-;;;;;;;;36330:27;;36374:19;36396:9;:13;36406:2;36396:13;;;;;;;;;;;:19;36410:4;36396:19;;;;;;;;;;;;;;;;36374:41;;36453:6;36438:11;:21;;36430:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;36586:6;36572:11;:20;36550:9;:13;36560:2;36550:13;;;;;;;;;;;:19;36564:4;36550:19;;;;;;;;;;;;;;;:42;;;;36643:6;36622:9;:13;36632:2;36622:13;;;;;;;;;;;:17;36636:2;36622:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;36281:380;;;36276:3;;;;:::i;:::-;;;36240:421;;;;36708:2;36678:47;;36702:4;36678:47;;36692:8;36678:47;;;36712:3;36717:7;36678:47;;;;;;;:::i;:::-;;;;;;;;36738:59;36758:8;36768:4;36774:2;36778:3;36783:7;36792:4;36738:19;:59::i;:::-;36810:75;36846:8;36856:4;36862:2;36866:3;36871:7;36880:4;36810:35;:75::i;:::-;35941:952;35747:1146;;;;;:::o;8710:120::-;7719:16;:14;:16::i;:::-;8779:5:::1;8769:7;;:15;;;;;;;;;;;;;;;;;;8800:22;8809:12;:10;:12::i;:::-;8800:22;;;;;;:::i;:::-;;;;;;;;8710:120::o:0;38211:729::-;38378:1;38364:16;;:2;:16;;;;38356:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;38431:16;38450:12;:10;:12::i;:::-;38431:31;;38473:20;38496:21;38514:2;38496:17;:21::i;:::-;38473:44;;38528:24;38555:25;38573:6;38555:17;:25::i;:::-;38528:52;;38593:66;38614:8;38632:1;38636:2;38640:3;38645:7;38654:4;38593:20;:66::i;:::-;38693:6;38672:9;:13;38682:2;38672:13;;;;;;;;;;;:17;38686:2;38672:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;38752:2;38715:52;;38748:1;38715:52;;38730:8;38715:52;;;38756:2;38760:6;38715:52;;;;;;;:::i;:::-;;;;;;;;38780:65;38800:8;38818:1;38822:2;38826:3;38831:7;38840:4;38780:19;:65::i;:::-;38858:74;38889:8;38907:1;38911:2;38915;38919:6;38927:4;38858:30;:74::i;:::-;38345:595;;;38211:729;;;;:::o;41512:969::-;41680:1;41664:18;;:4;:18;;;;41656:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;41755:7;:14;41741:3;:10;:28;41733:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;41827:16;41846:12;:10;:12::i;:::-;41827:31;;41871:66;41892:8;41902:4;41916:1;41920:3;41925:7;41871:66;;;;;;;;;;;;:20;:66::i;:::-;41955:9;41950:373;41974:3;:10;41970:1;:14;41950:373;;;42006:10;42019:3;42023:1;42019:6;;;;;;;;:::i;:::-;;;;;;;;42006:19;;42040:14;42057:7;42065:1;42057:10;;;;;;;;:::i;:::-;;;;;;;;42040:27;;42084:19;42106:9;:13;42116:2;42106:13;;;;;;;;;;;:19;42120:4;42106:19;;;;;;;;;;;;;;;;42084:41;;42163:6;42148:11;:21;;42140:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;42290:6;42276:11;:20;42254:9;:13;42264:2;42254:13;;;;;;;;;;;:19;42268:4;42254:19;;;;;;;;;;;;;;;:42;;;;41991:332;;;41986:3;;;;;:::i;:::-;;;;41950:373;;;;42378:1;42340:55;;42364:4;42340:55;;42354:8;42340:55;;;42382:3;42387:7;42340:55;;;;;;;:::i;:::-;;;;;;;;42408:65;42428:8;42438:4;42452:1;42456:3;42461:7;42408:65;;;;;;;;;;;;:19;:65::i;:::-;41645:836;41512:969;;;:::o;11339:191::-;11413:16;11432:6;;;;;;;;;;;11413:25;;11458:8;11449:6;;:17;;;;;;;;;;;;;;;;;;11513:8;11482:40;;11503:8;11482:40;;;;;;;;;;;;11402:128;11339:191;:::o;8451:118::-;7460:19;:17;:19::i;:::-;8521:4:::1;8511:7;;:14;;;;;;;;;;;;;;;;;;8541:20;8548:12;:10;:12::i;:::-;8541:20;;;;;;:::i;:::-;;;;;;;;8451:118::o:0;3222:723::-;3278:13;3508:1;3499:5;:10;3495:53;;;3526:10;;;;;;;;;;;;;;;;;;;;;3495:53;3558:12;3573:5;3558:20;;3589:14;3614:78;3629:1;3621:4;:9;3614:78;;3647:8;;;;;:::i;:::-;;;;3678:2;3670:10;;;;;:::i;:::-;;;3614:78;;;3702:19;3734:6;3724:17;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;3702:39;;3752:154;3768:1;3759:5;:10;3752:154;;3796:1;3786:11;;;;;:::i;:::-;;;3863:2;3855:5;:10;;;;:::i;:::-;3842:2;:24;;;;:::i;:::-;3829:39;;3812:6;3819;3812:14;;;;;;;;:::i;:::-;;;;;:56;;;;;;;;;;;3892:2;3883:11;;;;;:::i;:::-;;;3752:154;;;3930:6;3916:21;;;;;3222:723;;;;:::o;42624:331::-;42779:8;42770:17;;:5;:17;;;;42762:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;42882:8;42844:18;:25;42863:5;42844:25;;;;;;;;;;;;;;;:35;42870:8;42844:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;42928:8;42906:41;;42921:5;42906:41;;;42938:8;42906:41;;;;;;:::i;:::-;;;;;;;;42624:331;;;:::o;34415:974::-;34617:1;34603:16;;:2;:16;;;;34595:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;34674:16;34693:12;:10;:12::i;:::-;34674:31;;34716:20;34739:21;34757:2;34739:17;:21::i;:::-;34716:44;;34771:24;34798:25;34816:6;34798:17;:25::i;:::-;34771:52;;34836:60;34857:8;34867:4;34873:2;34877:3;34882:7;34891:4;34836:20;:60::i;:::-;34909:19;34931:9;:13;34941:2;34931:13;;;;;;;;;;;:19;34945:4;34931:19;;;;;;;;;;;;;;;;34909:41;;34984:6;34969:11;:21;;34961:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;35109:6;35095:11;:20;35073:9;:13;35083:2;35073:13;;;;;;;;;;;:19;35087:4;35073:19;;;;;;;;;;;;;;;:42;;;;35158:6;35137:9;:13;35147:2;35137:13;;;;;;;;;;;:17;35151:2;35137:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;35213:2;35182:46;;35207:4;35182:46;;35197:8;35182:46;;;35217:2;35221:6;35182:46;;;;;;;:::i;:::-;;;;;;;;35241:59;35261:8;35271:4;35277:2;35281:3;35286:7;35295:4;35241:19;:59::i;:::-;35313:68;35344:8;35354:4;35360:2;35364;35368:6;35376:4;35313:30;:68::i;:::-;34584:805;;;;34415:974;;;;;:::o;40454:808::-;40597:1;40581:18;;:4;:18;;;;40573:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;40652:16;40671:12;:10;:12::i;:::-;40652:31;;40694:20;40717:21;40735:2;40717:17;:21::i;:::-;40694:44;;40749:24;40776:25;40794:6;40776:17;:25::i;:::-;40749:52;;40814:66;40835:8;40845:4;40859:1;40863:3;40868:7;40814:66;;;;;;;;;;;;:20;:66::i;:::-;40893:19;40915:9;:13;40925:2;40915:13;;;;;;;;;;;:19;40929:4;40915:19;;;;;;;;;;;;;;;;40893:41;;40968:6;40953:11;:21;;40945:70;;;;;;;;;;;;:::i;:::-;;;;;;;;;41087:6;41073:11;:20;41051:9;:13;41061:2;41051:13;;;;;;;;;;;:19;41065:4;41051:19;;;;;;;;;;;;;;;:42;;;;41161:1;41122:54;;41147:4;41122:54;;41137:8;41122:54;;;41165:2;41169:6;41122:54;;;;;;;:::i;:::-;;;;;;;;41189:65;41209:8;41219:4;41233:1;41237:3;41242:7;41189:65;;;;;;;;;;;;:19;:65::i;:::-;40562:700;;;;40454:808;;;:::o;57230:314::-;7460:19;:17;:19::i;:::-;57470:66:::1;57497:8;57507:4;57513:2;57517:3;57522:7;57531:4;57470:26;:66::i;:::-;57230:314:::0;;;;;;:::o;45089:220::-;;;;;;;:::o;46069:813::-;46309:15;:2;:13;;;:15::i;:::-;46305:570;;;46362:2;46345:43;;;46389:8;46399:4;46405:3;46410:7;46419:4;46345:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;46341:523;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;46737:6;46730:14;;;;;;;;;;;:::i;:::-;;;;;;;;46341:523;;;46786:62;;;;;;;;;;:::i;:::-;;;;;;;;46341:523;46518:48;;;46506:60;;;:8;:60;;;;46502:159;;46591:50;;;;;;;;;;:::i;:::-;;;;;;;;46502:159;46425:251;46305:570;46069:813;;;;;;:::o;8199:108::-;8266:8;:6;:8::i;:::-;8258:41;;;;;;;;;;;;:::i;:::-;;;;;;;;;8199:108::o;46890:198::-;46956:16;46985:22;47024:1;47010:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;46985:41;;47048:7;47037:5;47043:1;47037:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;47075:5;47068:12;;;46890:198;;;:::o;45317:744::-;45532:15;:2;:13;;;:15::i;:::-;45528:526;;;45585:2;45568:38;;;45607:8;45617:4;45623:2;45627:6;45635:4;45568:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;45564:479;;;;:::i;:::-;;;;;;;;;;:::i;:::-;;;;;;;;45916:6;45909:14;;;;;;;;;;;:::i;:::-;;;;;;;;45564:479;;;45965:62;;;;;;;;;;:::i;:::-;;;;;;;;45564:479;45702:43;;;45690:55;;;:8;:55;;;;45686:154;;45770:50;;;;;;;;;;:::i;:::-;;;;;;;;45686:154;45641:214;45528:526;45317:744;;;;;;:::o;8014:108::-;8085:8;:6;:8::i;:::-;8084:9;8076:38;;;;;;;;;;;;:::i;:::-;;;;;;;;;8014:108::o;49390:931::-;49629:66;49656:8;49666:4;49672:2;49676:3;49681:7;49690:4;49629:26;:66::i;:::-;49728:1;49712:18;;:4;:18;;;49708:160;;;49752:9;49747:110;49771:3;:10;49767:1;:14;49747:110;;;49831:7;49839:1;49831:10;;;;;;;;:::i;:::-;;;;;;;;49807:12;:20;49820:3;49824:1;49820:6;;;;;;;;:::i;:::-;;;;;;;;49807:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;49783:3;;;;:::i;:::-;;;49747:110;;;;49708:160;49898:1;49884:16;;:2;:16;;;49880:434;;;49922:9;49917:386;49941:3;:10;49937:1;:14;49917:386;;;49977:10;49990:3;49994:1;49990:6;;;;;;;;:::i;:::-;;;;;;;;49977:19;;50015:14;50032:7;50040:1;50032:10;;;;;;;;:::i;:::-;;;;;;;;50015:27;;50061:14;50078:12;:16;50091:2;50078:16;;;;;;;;;;;;50061:33;;50131:6;50121;:16;;50113:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;50262:6;50253;:15;50234:12;:16;50247:2;50234:16;;;;;;;;;;;:34;;;;49958:345;;;49953:3;;;;:::i;:::-;;;49917:386;;;;49880:434;49390:931;;;;;;:::o;12770:326::-;12830:4;13087:1;13065:7;:19;;;:23;13058:30;;12770:326;;;:::o;43913:221::-;;;;;;;:::o;-1:-1:-1:-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::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;769:::-;865:5;890:81;906:64;963:6;906:64;:::i;:::-;890:81;:::i;:::-;881:90;;991:5;1020:6;1013:5;1006:21;1054:4;1047:5;1043:16;1036:23;;1080:6;1130:3;1122:4;1114:6;1110:17;1105:3;1101:27;1098:36;1095:143;;;1149:79;;:::i;:::-;1095:143;1262:1;1247:238;1272:6;1269:1;1266:13;1247:238;;;1340:3;1369:37;1402:3;1390:10;1369:37;:::i;:::-;1364:3;1357:50;1436:4;1431:3;1427:14;1420:21;;1470:4;1465:3;1461:14;1454:21;;1307:178;1294:1;1291;1287:9;1282:14;;1247:238;;;1251:14;871:620;;769:722;;;;;:::o;1497:410::-;1574:5;1599:65;1615:48;1656:6;1615:48;:::i;:::-;1599:65;:::i;:::-;1590:74;;1687:6;1680:5;1673:21;1725:4;1718:5;1714:16;1763:3;1754:6;1749:3;1745:16;1742:25;1739:112;;;1770:79;;:::i;:::-;1739:112;1860:41;1894:6;1889:3;1884;1860:41;:::i;:::-;1580:327;1497:410;;;;;:::o;1913:412::-;1991:5;2016:66;2032:49;2074:6;2032:49;:::i;:::-;2016:66;:::i;:::-;2007:75;;2105:6;2098:5;2091:21;2143:4;2136:5;2132:16;2181:3;2172:6;2167:3;2163:16;2160:25;2157:112;;;2188:79;;:::i;:::-;2157:112;2278:41;2312:6;2307:3;2302;2278:41;:::i;:::-;1997:328;1913:412;;;;;:::o;2331:139::-;2377:5;2415:6;2402:20;2393:29;;2431:33;2458:5;2431:33;:::i;:::-;2331:139;;;;:::o;2493:370::-;2564:5;2613:3;2606:4;2598:6;2594:17;2590:27;2580:122;;2621:79;;:::i;:::-;2580:122;2738:6;2725:20;2763:94;2853:3;2845:6;2838:4;2830:6;2826:17;2763:94;:::i;:::-;2754:103;;2570:293;2493:370;;;;:::o;2886:::-;2957:5;3006:3;2999:4;2991:6;2987:17;2983:27;2973:122;;3014:79;;:::i;:::-;2973:122;3131:6;3118:20;3156:94;3246:3;3238:6;3231:4;3223:6;3219:17;3156:94;:::i;:::-;3147:103;;2963:293;2886:370;;;;:::o;3262:133::-;3305:5;3343:6;3330:20;3321:29;;3359:30;3383:5;3359:30;:::i;:::-;3262:133;;;;:::o;3401:137::-;3446:5;3484:6;3471:20;3462:29;;3500:32;3526:5;3500:32;:::i;:::-;3401:137;;;;:::o;3544:141::-;3600:5;3631:6;3625:13;3616:22;;3647:32;3673:5;3647:32;:::i;:::-;3544:141;;;;:::o;3704:338::-;3759:5;3808:3;3801:4;3793:6;3789:17;3785:27;3775:122;;3816:79;;:::i;:::-;3775:122;3933:6;3920:20;3958:78;4032:3;4024:6;4017:4;4009:6;4005:17;3958:78;:::i;:::-;3949:87;;3765:277;3704:338;;;;:::o;4062:340::-;4118:5;4167:3;4160:4;4152:6;4148:17;4144:27;4134:122;;4175:79;;:::i;:::-;4134:122;4292:6;4279:20;4317:79;4392:3;4384:6;4377:4;4369:6;4365:17;4317:79;:::i;:::-;4308:88;;4124:278;4062:340;;;;:::o;4408:139::-;4454:5;4492:6;4479:20;4470:29;;4508:33;4535:5;4508:33;:::i;:::-;4408:139;;;;:::o;4553:143::-;4610:5;4641:6;4635:13;4626:22;;4657:33;4684:5;4657:33;:::i;:::-;4553:143;;;;:::o;4702:329::-;4761:6;4810:2;4798:9;4789:7;4785:23;4781:32;4778:119;;;4816:79;;:::i;:::-;4778:119;4936:1;4961:53;5006:7;4997:6;4986:9;4982:22;4961:53;:::i;:::-;4951:63;;4907:117;4702:329;;;;:::o;5037:474::-;5105:6;5113;5162:2;5150:9;5141:7;5137:23;5133:32;5130:119;;;5168:79;;:::i;:::-;5130:119;5288:1;5313:53;5358:7;5349:6;5338:9;5334:22;5313:53;:::i;:::-;5303:63;;5259:117;5415:2;5441:53;5486:7;5477:6;5466:9;5462:22;5441:53;:::i;:::-;5431:63;;5386:118;5037:474;;;;;:::o;5517:1509::-;5671:6;5679;5687;5695;5703;5752:3;5740:9;5731:7;5727:23;5723:33;5720:120;;;5759:79;;:::i;:::-;5720:120;5879:1;5904:53;5949:7;5940:6;5929:9;5925:22;5904:53;:::i;:::-;5894:63;;5850:117;6006:2;6032:53;6077:7;6068:6;6057:9;6053:22;6032:53;:::i;:::-;6022:63;;5977:118;6162:2;6151:9;6147:18;6134:32;6193:18;6185:6;6182:30;6179:117;;;6215:79;;:::i;:::-;6179:117;6320:78;6390:7;6381:6;6370:9;6366:22;6320:78;:::i;:::-;6310:88;;6105:303;6475:2;6464:9;6460:18;6447:32;6506:18;6498:6;6495:30;6492:117;;;6528:79;;:::i;:::-;6492:117;6633:78;6703:7;6694:6;6683:9;6679:22;6633:78;:::i;:::-;6623:88;;6418:303;6788:3;6777:9;6773:19;6760:33;6820:18;6812:6;6809:30;6806:117;;;6842:79;;:::i;:::-;6806:117;6947:62;7001:7;6992:6;6981:9;6977:22;6947:62;:::i;:::-;6937:72;;6731:288;5517:1509;;;;;;;;:::o;7032:1089::-;7136:6;7144;7152;7160;7168;7217:3;7205:9;7196:7;7192:23;7188:33;7185:120;;;7224:79;;:::i;:::-;7185:120;7344:1;7369:53;7414:7;7405:6;7394:9;7390:22;7369:53;:::i;:::-;7359:63;;7315:117;7471:2;7497:53;7542:7;7533:6;7522:9;7518:22;7497:53;:::i;:::-;7487:63;;7442:118;7599:2;7625:53;7670:7;7661:6;7650:9;7646:22;7625:53;:::i;:::-;7615:63;;7570:118;7727:2;7753:53;7798:7;7789:6;7778:9;7774:22;7753:53;:::i;:::-;7743:63;;7698:118;7883:3;7872:9;7868:19;7855:33;7915:18;7907:6;7904:30;7901:117;;;7937:79;;:::i;:::-;7901:117;8042:62;8096:7;8087:6;8076:9;8072:22;8042:62;:::i;:::-;8032:72;;7826:288;7032:1089;;;;;;;;:::o;8127:1039::-;8254:6;8262;8270;8319:2;8307:9;8298:7;8294:23;8290:32;8287:119;;;8325:79;;:::i;:::-;8287:119;8445:1;8470:53;8515:7;8506:6;8495:9;8491:22;8470:53;:::i;:::-;8460:63;;8416:117;8600:2;8589:9;8585:18;8572:32;8631:18;8623:6;8620:30;8617:117;;;8653:79;;:::i;:::-;8617:117;8758:78;8828:7;8819:6;8808:9;8804:22;8758:78;:::i;:::-;8748:88;;8543:303;8913:2;8902:9;8898:18;8885:32;8944:18;8936:6;8933:30;8930:117;;;8966:79;;:::i;:::-;8930:117;9071:78;9141:7;9132:6;9121:9;9117:22;9071:78;:::i;:::-;9061:88;;8856:303;8127:1039;;;;;:::o;9172:468::-;9237:6;9245;9294:2;9282:9;9273:7;9269:23;9265:32;9262:119;;;9300:79;;:::i;:::-;9262:119;9420:1;9445:53;9490:7;9481:6;9470:9;9466:22;9445:53;:::i;:::-;9435:63;;9391:117;9547:2;9573:50;9615:7;9606:6;9595:9;9591:22;9573:50;:::i;:::-;9563:60;;9518:115;9172:468;;;;;:::o;9646:474::-;9714:6;9722;9771:2;9759:9;9750:7;9746:23;9742:32;9739:119;;;9777:79;;:::i;:::-;9739:119;9897:1;9922:53;9967:7;9958:6;9947:9;9943:22;9922:53;:::i;:::-;9912:63;;9868:117;10024:2;10050:53;10095:7;10086:6;10075:9;10071:22;10050:53;:::i;:::-;10040:63;;9995:118;9646:474;;;;;:::o;10126:619::-;10203:6;10211;10219;10268:2;10256:9;10247:7;10243:23;10239:32;10236:119;;;10274:79;;:::i;:::-;10236:119;10394:1;10419:53;10464:7;10455:6;10444:9;10440:22;10419:53;:::i;:::-;10409:63;;10365:117;10521:2;10547:53;10592:7;10583:6;10572:9;10568:22;10547:53;:::i;:::-;10537:63;;10492:118;10649:2;10675:53;10720:7;10711:6;10700:9;10696:22;10675:53;:::i;:::-;10665:63;;10620:118;10126:619;;;;;:::o;10751:894::-;10869:6;10877;10926:2;10914:9;10905:7;10901:23;10897:32;10894:119;;;10932:79;;:::i;:::-;10894:119;11080:1;11069:9;11065:17;11052:31;11110:18;11102:6;11099:30;11096:117;;;11132:79;;:::i;:::-;11096:117;11237:78;11307:7;11298:6;11287:9;11283:22;11237:78;:::i;:::-;11227:88;;11023:302;11392:2;11381:9;11377:18;11364:32;11423:18;11415:6;11412:30;11409:117;;;11445:79;;:::i;:::-;11409:117;11550:78;11620:7;11611:6;11600:9;11596:22;11550:78;:::i;:::-;11540:88;;11335:303;10751:894;;;;;:::o;11651:323::-;11707:6;11756:2;11744:9;11735:7;11731:23;11727:32;11724:119;;;11762:79;;:::i;:::-;11724:119;11882:1;11907:50;11949:7;11940:6;11929:9;11925:22;11907:50;:::i;:::-;11897:60;;11853:114;11651:323;;;;:::o;11980:327::-;12038:6;12087:2;12075:9;12066:7;12062:23;12058:32;12055:119;;;12093:79;;:::i;:::-;12055:119;12213:1;12238:52;12282:7;12273:6;12262:9;12258:22;12238:52;:::i;:::-;12228:62;;12184:116;11980:327;;;;:::o;12313:349::-;12382:6;12431:2;12419:9;12410:7;12406:23;12402:32;12399:119;;;12437:79;;:::i;:::-;12399:119;12557:1;12582:63;12637:7;12628:6;12617:9;12613:22;12582:63;:::i;:::-;12572:73;;12528:127;12313:349;;;;:::o;12668:509::-;12737:6;12786:2;12774:9;12765:7;12761:23;12757:32;12754:119;;;12792:79;;:::i;:::-;12754:119;12940:1;12929:9;12925:17;12912:31;12970:18;12962:6;12959:30;12956:117;;;12992:79;;:::i;:::-;12956:117;13097:63;13152:7;13143:6;13132:9;13128:22;13097:63;:::i;:::-;13087:73;;12883:287;12668:509;;;;:::o;13183:329::-;13242:6;13291:2;13279:9;13270:7;13266:23;13262:32;13259:119;;;13297:79;;:::i;:::-;13259:119;13417:1;13442:53;13487:7;13478:6;13467:9;13463:22;13442:53;:::i;:::-;13432:63;;13388:117;13183:329;;;;:::o;13518:351::-;13588:6;13637:2;13625:9;13616:7;13612:23;13608:32;13605:119;;;13643:79;;:::i;:::-;13605:119;13763:1;13788:64;13844:7;13835:6;13824:9;13820:22;13788:64;:::i;:::-;13778:74;;13734:128;13518:351;;;;:::o;13875:179::-;13944:10;13965:46;14007:3;13999:6;13965:46;:::i;:::-;14043:4;14038:3;14034:14;14020:28;;13875:179;;;;:::o;14060:118::-;14147:24;14165:5;14147:24;:::i;:::-;14142:3;14135:37;14060:118;;:::o;14214:732::-;14333:3;14362:54;14410:5;14362:54;:::i;:::-;14432:86;14511:6;14506:3;14432:86;:::i;:::-;14425:93;;14542:56;14592:5;14542:56;:::i;:::-;14621:7;14652:1;14637:284;14662:6;14659:1;14656:13;14637:284;;;14738:6;14732:13;14765:63;14824:3;14809:13;14765:63;:::i;:::-;14758:70;;14851:60;14904:6;14851:60;:::i;:::-;14841:70;;14697:224;14684:1;14681;14677:9;14672:14;;14637:284;;;14641:14;14937:3;14930:10;;14338:608;;;14214:732;;;;:::o;14952:109::-;15033:21;15048:5;15033:21;:::i;:::-;15028:3;15021:34;14952:109;;:::o;15067:360::-;15153:3;15181:38;15213:5;15181:38;:::i;:::-;15235:70;15298:6;15293:3;15235:70;:::i;:::-;15228:77;;15314:52;15359:6;15354:3;15347:4;15340:5;15336:16;15314:52;:::i;:::-;15391:29;15413:6;15391:29;:::i;:::-;15386:3;15382:39;15375:46;;15157:270;15067:360;;;;:::o;15433:147::-;15528:45;15567:5;15528:45;:::i;:::-;15523:3;15516:58;15433:147;;:::o;15586:364::-;15674:3;15702:39;15735:5;15702:39;:::i;:::-;15757:71;15821:6;15816:3;15757:71;:::i;:::-;15750:78;;15837:52;15882:6;15877:3;15870:4;15863:5;15859:16;15837:52;:::i;:::-;15914:29;15936:6;15914:29;:::i;:::-;15909:3;15905:39;15898:46;;15678:272;15586:364;;;;:::o;15956:377::-;16062:3;16090:39;16123:5;16090:39;:::i;:::-;16145:89;16227:6;16222:3;16145:89;:::i;:::-;16138:96;;16243:52;16288:6;16283:3;16276:4;16269:5;16265:16;16243:52;:::i;:::-;16320:6;16315:3;16311:16;16304:23;;16066:267;15956:377;;;;:::o;16339:366::-;16481:3;16502:67;16566:2;16561:3;16502:67;:::i;:::-;16495:74;;16578:93;16667:3;16578:93;:::i;:::-;16696:2;16691:3;16687:12;16680:19;;16339:366;;;:::o;16711:::-;16853:3;16874:67;16938:2;16933:3;16874:67;:::i;:::-;16867:74;;16950:93;17039:3;16950:93;:::i;:::-;17068:2;17063:3;17059:12;17052:19;;16711:366;;;:::o;17083:::-;17225:3;17246:67;17310:2;17305:3;17246:67;:::i;:::-;17239:74;;17322:93;17411:3;17322:93;:::i;:::-;17440:2;17435:3;17431:12;17424:19;;17083:366;;;:::o;17455:::-;17597:3;17618:67;17682:2;17677:3;17618:67;:::i;:::-;17611:74;;17694:93;17783:3;17694:93;:::i;:::-;17812:2;17807:3;17803:12;17796:19;;17455:366;;;:::o;17827:::-;17969:3;17990:67;18054:2;18049:3;17990:67;:::i;:::-;17983:74;;18066:93;18155:3;18066:93;:::i;:::-;18184:2;18179:3;18175:12;18168:19;;17827:366;;;:::o;18199:::-;18341:3;18362:67;18426:2;18421:3;18362:67;:::i;:::-;18355:74;;18438:93;18527:3;18438:93;:::i;:::-;18556:2;18551:3;18547:12;18540:19;;18199:366;;;:::o;18571:400::-;18731:3;18752:84;18834:1;18829:3;18752:84;:::i;:::-;18745:91;;18845:93;18934:3;18845:93;:::i;:::-;18963:1;18958:3;18954:11;18947:18;;18571:400;;;:::o;18977:366::-;19119:3;19140:67;19204:2;19199:3;19140:67;:::i;:::-;19133:74;;19216:93;19305:3;19216:93;:::i;:::-;19334:2;19329:3;19325:12;19318:19;;18977:366;;;:::o;19349:::-;19491:3;19512:67;19576:2;19571:3;19512:67;:::i;:::-;19505:74;;19588:93;19677:3;19588:93;:::i;:::-;19706:2;19701:3;19697:12;19690:19;;19349:366;;;:::o;19721:::-;19863:3;19884:67;19948:2;19943:3;19884:67;:::i;:::-;19877:74;;19960:93;20049:3;19960:93;:::i;:::-;20078:2;20073:3;20069:12;20062:19;;19721:366;;;:::o;20093:::-;20235:3;20256:67;20320:2;20315:3;20256:67;:::i;:::-;20249:74;;20332:93;20421:3;20332:93;:::i;:::-;20450:2;20445:3;20441:12;20434:19;;20093:366;;;:::o;20465:::-;20607:3;20628:67;20692:2;20687:3;20628:67;:::i;:::-;20621:74;;20704:93;20793:3;20704:93;:::i;:::-;20822:2;20817:3;20813:12;20806:19;;20465:366;;;:::o;20837:::-;20979:3;21000:67;21064:2;21059:3;21000:67;:::i;:::-;20993:74;;21076:93;21165:3;21076:93;:::i;:::-;21194:2;21189:3;21185:12;21178:19;;20837:366;;;:::o;21209:::-;21351:3;21372:67;21436:2;21431:3;21372:67;:::i;:::-;21365:74;;21448:93;21537:3;21448:93;:::i;:::-;21566:2;21561:3;21557:12;21550:19;;21209:366;;;:::o;21581:::-;21723:3;21744:67;21808:2;21803:3;21744:67;:::i;:::-;21737:74;;21820:93;21909:3;21820:93;:::i;:::-;21938:2;21933:3;21929:12;21922:19;;21581:366;;;:::o;21953:::-;22095:3;22116:67;22180:2;22175:3;22116:67;:::i;:::-;22109:74;;22192:93;22281:3;22192:93;:::i;:::-;22310:2;22305:3;22301:12;22294:19;;21953:366;;;:::o;22325:::-;22467:3;22488:67;22552:2;22547:3;22488:67;:::i;:::-;22481:74;;22564:93;22653:3;22564:93;:::i;:::-;22682:2;22677:3;22673:12;22666:19;;22325:366;;;:::o;22697:::-;22839:3;22860:67;22924:2;22919:3;22860:67;:::i;:::-;22853:74;;22936:93;23025:3;22936:93;:::i;:::-;23054:2;23049:3;23045:12;23038:19;;22697:366;;;:::o;23069:::-;23211:3;23232:67;23296:2;23291:3;23232:67;:::i;:::-;23225:74;;23308:93;23397:3;23308:93;:::i;:::-;23426:2;23421:3;23417:12;23410:19;;23069:366;;;:::o;23441:::-;23583:3;23604:67;23668:2;23663:3;23604:67;:::i;:::-;23597:74;;23680:93;23769:3;23680:93;:::i;:::-;23798:2;23793:3;23789:12;23782:19;;23441:366;;;:::o;23813:402::-;23973:3;23994:85;24076:2;24071:3;23994:85;:::i;:::-;23987:92;;24088:93;24177:3;24088:93;:::i;:::-;24206:2;24201:3;24197:12;24190:19;;23813:402;;;:::o;24221:366::-;24363:3;24384:67;24448:2;24443:3;24384:67;:::i;:::-;24377:74;;24460:93;24549:3;24460:93;:::i;:::-;24578:2;24573:3;24569:12;24562:19;;24221:366;;;:::o;24593:::-;24735:3;24756:67;24820:2;24815:3;24756:67;:::i;:::-;24749:74;;24832:93;24921:3;24832:93;:::i;:::-;24950:2;24945:3;24941:12;24934:19;;24593:366;;;:::o;24965:::-;25107:3;25128:67;25192:2;25187:3;25128:67;:::i;:::-;25121:74;;25204:93;25293:3;25204:93;:::i;:::-;25322:2;25317:3;25313:12;25306:19;;24965:366;;;:::o;25337:::-;25479:3;25500:67;25564:2;25559:3;25500:67;:::i;:::-;25493:74;;25576:93;25665:3;25576:93;:::i;:::-;25694:2;25689:3;25685:12;25678:19;;25337:366;;;:::o;25709:::-;25851:3;25872:67;25936:2;25931:3;25872:67;:::i;:::-;25865:74;;25948:93;26037:3;25948:93;:::i;:::-;26066:2;26061:3;26057:12;26050:19;;25709:366;;;:::o;26081:::-;26223:3;26244:67;26308:2;26303:3;26244:67;:::i;:::-;26237:74;;26320:93;26409:3;26320:93;:::i;:::-;26438:2;26433:3;26429:12;26422:19;;26081:366;;;:::o;26453:::-;26595:3;26616:67;26680:2;26675:3;26616:67;:::i;:::-;26609:74;;26692:93;26781:3;26692:93;:::i;:::-;26810:2;26805:3;26801:12;26794:19;;26453:366;;;:::o;26825:::-;26967:3;26988:67;27052:2;27047:3;26988:67;:::i;:::-;26981:74;;27064:93;27153:3;27064:93;:::i;:::-;27182:2;27177:3;27173:12;27166:19;;26825:366;;;:::o;27197:::-;27339:3;27360:67;27424:2;27419:3;27360:67;:::i;:::-;27353:74;;27436:93;27525:3;27436:93;:::i;:::-;27554:2;27549:3;27545:12;27538:19;;27197:366;;;:::o;27569:::-;27711:3;27732:67;27796:2;27791:3;27732:67;:::i;:::-;27725:74;;27808:93;27897:3;27808:93;:::i;:::-;27926:2;27921:3;27917:12;27910:19;;27569:366;;;:::o;27941:::-;28083:3;28104:67;28168:2;28163:3;28104:67;:::i;:::-;28097:74;;28180:93;28269:3;28180:93;:::i;:::-;28298:2;28293:3;28289:12;28282:19;;27941:366;;;:::o;28313:108::-;28390:24;28408:5;28390:24;:::i;:::-;28385:3;28378:37;28313:108;;:::o;28427:118::-;28514:24;28532:5;28514:24;:::i;:::-;28509:3;28502:37;28427:118;;:::o;28551:807::-;28885:3;28907:148;29051:3;28907:148;:::i;:::-;28900:155;;29072:95;29163:3;29154:6;29072:95;:::i;:::-;29065:102;;29184:148;29328:3;29184:148;:::i;:::-;29177:155;;29349:3;29342:10;;28551:807;;;;:::o;29364:222::-;29457:4;29495:2;29484:9;29480:18;29472:26;;29508:71;29576:1;29565:9;29561:17;29552:6;29508:71;:::i;:::-;29364:222;;;;:::o;29592:332::-;29713:4;29751:2;29740:9;29736:18;29728:26;;29764:71;29832:1;29821:9;29817:17;29808:6;29764:71;:::i;:::-;29845:72;29913:2;29902:9;29898:18;29889:6;29845:72;:::i;:::-;29592:332;;;;;:::o;29930:1053::-;30253:4;30291:3;30280:9;30276:19;30268:27;;30305:71;30373:1;30362:9;30358:17;30349:6;30305:71;:::i;:::-;30386:72;30454:2;30443:9;30439:18;30430:6;30386:72;:::i;:::-;30505:9;30499:4;30495:20;30490:2;30479:9;30475:18;30468:48;30533:108;30636:4;30627:6;30533:108;:::i;:::-;30525:116;;30688:9;30682:4;30678:20;30673:2;30662:9;30658:18;30651:48;30716:108;30819:4;30810:6;30716:108;:::i;:::-;30708:116;;30872:9;30866:4;30862:20;30856:3;30845:9;30841:19;30834:49;30900:76;30971:4;30962:6;30900:76;:::i;:::-;30892:84;;29930:1053;;;;;;;;:::o;30989:751::-;31212:4;31250:3;31239:9;31235:19;31227:27;;31264:71;31332:1;31321:9;31317:17;31308:6;31264:71;:::i;:::-;31345:72;31413:2;31402:9;31398:18;31389:6;31345:72;:::i;:::-;31427;31495:2;31484:9;31480:18;31471:6;31427:72;:::i;:::-;31509;31577:2;31566:9;31562:18;31553:6;31509:72;:::i;:::-;31629:9;31623:4;31619:20;31613:3;31602:9;31598:19;31591:49;31657:76;31728:4;31719:6;31657:76;:::i;:::-;31649:84;;30989:751;;;;;;;;:::o;31746:348::-;31875:4;31913:2;31902:9;31898:18;31890:26;;31926:71;31994:1;31983:9;31979:17;31970:6;31926:71;:::i;:::-;32007:80;32083:2;32072:9;32068:18;32059:6;32007:80;:::i;:::-;31746:348;;;;;:::o;32100:373::-;32243:4;32281:2;32270:9;32266:18;32258:26;;32330:9;32324:4;32320:20;32316:1;32305:9;32301:17;32294:47;32358:108;32461:4;32452:6;32358:108;:::i;:::-;32350:116;;32100:373;;;;:::o;32479:634::-;32700:4;32738:2;32727:9;32723:18;32715:26;;32787:9;32781:4;32777:20;32773:1;32762:9;32758:17;32751:47;32815:108;32918:4;32909:6;32815:108;:::i;:::-;32807:116;;32970:9;32964:4;32960:20;32955:2;32944:9;32940:18;32933:48;32998:108;33101:4;33092:6;32998:108;:::i;:::-;32990:116;;32479:634;;;;;:::o;33119:210::-;33206:4;33244:2;33233:9;33229:18;33221:26;;33257:65;33319:1;33308:9;33304:17;33295:6;33257:65;:::i;:::-;33119:210;;;;:::o;33335:313::-;33448:4;33486:2;33475:9;33471:18;33463:26;;33535:9;33529:4;33525:20;33521:1;33510:9;33506:17;33499:47;33563:78;33636:4;33627:6;33563:78;:::i;:::-;33555:86;;33335:313;;;;:::o;33654:514::-;33815:4;33853:2;33842:9;33838:18;33830:26;;33902:9;33896:4;33892:20;33888:1;33877:9;33873:17;33866:47;33930:78;34003:4;33994:6;33930:78;:::i;:::-;33922:86;;34055:9;34049:4;34045:20;34040:2;34029:9;34025:18;34018:48;34083:78;34156:4;34147:6;34083:78;:::i;:::-;34075:86;;33654:514;;;;;:::o;34174:419::-;34340:4;34378:2;34367:9;34363:18;34355:26;;34427:9;34421:4;34417:20;34413:1;34402:9;34398:17;34391:47;34455:131;34581:4;34455:131;:::i;:::-;34447:139;;34174:419;;;:::o;34599:::-;34765:4;34803:2;34792:9;34788:18;34780:26;;34852:9;34846:4;34842:20;34838:1;34827:9;34823:17;34816:47;34880:131;35006:4;34880:131;:::i;:::-;34872:139;;34599:419;;;:::o;35024:::-;35190:4;35228:2;35217:9;35213:18;35205:26;;35277:9;35271:4;35267:20;35263:1;35252:9;35248:17;35241:47;35305:131;35431:4;35305:131;:::i;:::-;35297:139;;35024:419;;;:::o;35449:::-;35615:4;35653:2;35642:9;35638:18;35630:26;;35702:9;35696:4;35692:20;35688:1;35677:9;35673:17;35666:47;35730:131;35856:4;35730:131;:::i;:::-;35722:139;;35449:419;;;:::o;35874:::-;36040:4;36078:2;36067:9;36063:18;36055:26;;36127:9;36121:4;36117:20;36113:1;36102:9;36098:17;36091:47;36155:131;36281:4;36155:131;:::i;:::-;36147:139;;35874:419;;;:::o;36299:::-;36465:4;36503:2;36492:9;36488:18;36480:26;;36552:9;36546:4;36542:20;36538:1;36527:9;36523:17;36516:47;36580:131;36706:4;36580:131;:::i;:::-;36572:139;;36299:419;;;:::o;36724:::-;36890:4;36928:2;36917:9;36913:18;36905:26;;36977:9;36971:4;36967:20;36963:1;36952:9;36948:17;36941:47;37005:131;37131:4;37005:131;:::i;:::-;36997:139;;36724:419;;;:::o;37149:::-;37315:4;37353:2;37342:9;37338:18;37330:26;;37402:9;37396:4;37392:20;37388:1;37377:9;37373:17;37366:47;37430:131;37556:4;37430:131;:::i;:::-;37422:139;;37149:419;;;:::o;37574:::-;37740:4;37778:2;37767:9;37763:18;37755:26;;37827:9;37821:4;37817:20;37813:1;37802:9;37798:17;37791:47;37855:131;37981:4;37855:131;:::i;:::-;37847:139;;37574:419;;;:::o;37999:::-;38165:4;38203:2;38192:9;38188:18;38180:26;;38252:9;38246:4;38242:20;38238:1;38227:9;38223:17;38216:47;38280:131;38406:4;38280:131;:::i;:::-;38272:139;;37999:419;;;:::o;38424:::-;38590:4;38628:2;38617:9;38613:18;38605:26;;38677:9;38671:4;38667:20;38663:1;38652:9;38648:17;38641:47;38705:131;38831:4;38705:131;:::i;:::-;38697:139;;38424:419;;;:::o;38849:::-;39015:4;39053:2;39042:9;39038:18;39030:26;;39102:9;39096:4;39092:20;39088:1;39077:9;39073:17;39066:47;39130:131;39256:4;39130:131;:::i;:::-;39122:139;;38849:419;;;:::o;39274:::-;39440:4;39478:2;39467:9;39463:18;39455:26;;39527:9;39521:4;39517:20;39513:1;39502:9;39498:17;39491:47;39555:131;39681:4;39555:131;:::i;:::-;39547:139;;39274:419;;;:::o;39699:::-;39865:4;39903:2;39892:9;39888:18;39880:26;;39952:9;39946:4;39942:20;39938:1;39927:9;39923:17;39916:47;39980:131;40106:4;39980:131;:::i;:::-;39972:139;;39699:419;;;:::o;40124:::-;40290:4;40328:2;40317:9;40313:18;40305:26;;40377:9;40371:4;40367:20;40363:1;40352:9;40348:17;40341:47;40405:131;40531:4;40405:131;:::i;:::-;40397:139;;40124:419;;;:::o;40549:::-;40715:4;40753:2;40742:9;40738:18;40730:26;;40802:9;40796:4;40792:20;40788:1;40777:9;40773:17;40766:47;40830:131;40956:4;40830:131;:::i;:::-;40822:139;;40549:419;;;:::o;40974:::-;41140:4;41178:2;41167:9;41163:18;41155:26;;41227:9;41221:4;41217:20;41213:1;41202:9;41198:17;41191:47;41255:131;41381:4;41255:131;:::i;:::-;41247:139;;40974:419;;;:::o;41399:::-;41565:4;41603:2;41592:9;41588:18;41580:26;;41652:9;41646:4;41642:20;41638:1;41627:9;41623:17;41616:47;41680:131;41806:4;41680:131;:::i;:::-;41672:139;;41399:419;;;:::o;41824:::-;41990:4;42028:2;42017:9;42013:18;42005:26;;42077:9;42071:4;42067:20;42063:1;42052:9;42048:17;42041:47;42105:131;42231:4;42105:131;:::i;:::-;42097:139;;41824:419;;;:::o;42249:::-;42415:4;42453:2;42442:9;42438:18;42430:26;;42502:9;42496:4;42492:20;42488:1;42477:9;42473:17;42466:47;42530:131;42656:4;42530:131;:::i;:::-;42522:139;;42249:419;;;:::o;42674:::-;42840:4;42878:2;42867:9;42863:18;42855:26;;42927:9;42921:4;42917:20;42913:1;42902:9;42898:17;42891:47;42955:131;43081:4;42955:131;:::i;:::-;42947:139;;42674:419;;;:::o;43099:::-;43265:4;43303:2;43292:9;43288:18;43280:26;;43352:9;43346:4;43342:20;43338:1;43327:9;43323:17;43316:47;43380:131;43506:4;43380:131;:::i;:::-;43372:139;;43099:419;;;:::o;43524:::-;43690:4;43728:2;43717:9;43713:18;43705:26;;43777:9;43771:4;43767:20;43763:1;43752:9;43748:17;43741:47;43805:131;43931:4;43805:131;:::i;:::-;43797:139;;43524:419;;;:::o;43949:::-;44115:4;44153:2;44142:9;44138:18;44130:26;;44202:9;44196:4;44192:20;44188:1;44177:9;44173:17;44166:47;44230:131;44356:4;44230:131;:::i;:::-;44222:139;;43949:419;;;:::o;44374:::-;44540:4;44578:2;44567:9;44563:18;44555:26;;44627:9;44621:4;44617:20;44613:1;44602:9;44598:17;44591:47;44655:131;44781:4;44655:131;:::i;:::-;44647:139;;44374:419;;;:::o;44799:::-;44965:4;45003:2;44992:9;44988:18;44980:26;;45052:9;45046:4;45042:20;45038:1;45027:9;45023:17;45016:47;45080:131;45206:4;45080:131;:::i;:::-;45072:139;;44799:419;;;:::o;45224:::-;45390:4;45428:2;45417:9;45413:18;45405:26;;45477:9;45471:4;45467:20;45463:1;45452:9;45448:17;45441:47;45505:131;45631:4;45505:131;:::i;:::-;45497:139;;45224:419;;;:::o;45649:::-;45815:4;45853:2;45842:9;45838:18;45830:26;;45902:9;45896:4;45892:20;45888:1;45877:9;45873:17;45866:47;45930:131;46056:4;45930:131;:::i;:::-;45922:139;;45649:419;;;:::o;46074:::-;46240:4;46278:2;46267:9;46263:18;46255:26;;46327:9;46321:4;46317:20;46313:1;46302:9;46298:17;46291:47;46355:131;46481:4;46355:131;:::i;:::-;46347:139;;46074:419;;;:::o;46499:::-;46665:4;46703:2;46692:9;46688:18;46680:26;;46752:9;46746:4;46742:20;46738:1;46727:9;46723:17;46716:47;46780:131;46906:4;46780:131;:::i;:::-;46772:139;;46499:419;;;:::o;46924:222::-;47017:4;47055:2;47044:9;47040:18;47032:26;;47068:71;47136:1;47125:9;47121:17;47112:6;47068:71;:::i;:::-;46924:222;;;;:::o;47152:332::-;47273:4;47311:2;47300:9;47296:18;47288:26;;47324:71;47392:1;47381:9;47377:17;47368:6;47324:71;:::i;:::-;47405:72;47473:2;47462:9;47458:18;47449:6;47405:72;:::i;:::-;47152:332;;;;;:::o;47490:129::-;47524:6;47551:20;;:::i;:::-;47541:30;;47580:33;47608:4;47600:6;47580:33;:::i;:::-;47490:129;;;:::o;47625:75::-;47658:6;47691:2;47685:9;47675:19;;47625:75;:::o;47706:311::-;47783:4;47873:18;47865:6;47862:30;47859:56;;;47895:18;;:::i;:::-;47859:56;47945:4;47937:6;47933:17;47925:25;;48005:4;47999;47995:15;47987:23;;47706:311;;;:::o;48023:::-;48100:4;48190:18;48182:6;48179:30;48176:56;;;48212:18;;:::i;:::-;48176:56;48262:4;48254:6;48250:17;48242:25;;48322:4;48316;48312:15;48304:23;;48023:311;;;:::o;48340:307::-;48401:4;48491:18;48483:6;48480:30;48477:56;;;48513:18;;:::i;:::-;48477:56;48551:29;48573:6;48551:29;:::i;:::-;48543:37;;48635:4;48629;48625:15;48617:23;;48340:307;;;:::o;48653:308::-;48715:4;48805:18;48797:6;48794:30;48791:56;;;48827:18;;:::i;:::-;48791:56;48865:29;48887:6;48865:29;:::i;:::-;48857:37;;48949:4;48943;48939:15;48931:23;;48653:308;;;:::o;48967:132::-;49034:4;49057:3;49049:11;;49087:4;49082:3;49078:14;49070:22;;48967:132;;;:::o;49105:114::-;49172:6;49206:5;49200:12;49190:22;;49105:114;;;:::o;49225:98::-;49276:6;49310:5;49304:12;49294:22;;49225:98;;;:::o;49329:99::-;49381:6;49415:5;49409:12;49399:22;;49329:99;;;:::o;49434:113::-;49504:4;49536;49531:3;49527:14;49519:22;;49434:113;;;:::o;49553:184::-;49652:11;49686:6;49681:3;49674:19;49726:4;49721:3;49717:14;49702:29;;49553:184;;;;:::o;49743:168::-;49826:11;49860:6;49855:3;49848:19;49900:4;49895:3;49891:14;49876:29;;49743:168;;;;:::o;49917:169::-;50001:11;50035:6;50030:3;50023:19;50075:4;50070:3;50066:14;50051:29;;49917:169;;;;:::o;50092:148::-;50194:11;50231:3;50216:18;;50092:148;;;;:::o;50246:305::-;50286:3;50305:20;50323:1;50305:20;:::i;:::-;50300:25;;50339:20;50357:1;50339:20;:::i;:::-;50334:25;;50493:1;50425:66;50421:74;50418:1;50415:81;50412:107;;;50499:18;;:::i;:::-;50412:107;50543:1;50540;50536:9;50529:16;;50246:305;;;;:::o;50557:185::-;50597:1;50614:20;50632:1;50614:20;:::i;:::-;50609:25;;50648:20;50666:1;50648:20;:::i;:::-;50643:25;;50687:1;50677:35;;50692:18;;:::i;:::-;50677:35;50734:1;50731;50727:9;50722:14;;50557:185;;;;:::o;50748:348::-;50788:7;50811:20;50829:1;50811:20;:::i;:::-;50806:25;;50845:20;50863:1;50845:20;:::i;:::-;50840:25;;51033:1;50965:66;50961:74;50958:1;50955:81;50950:1;50943:9;50936:17;50932:105;50929:131;;;51040:18;;:::i;:::-;50929:131;51088:1;51085;51081:9;51070:20;;50748:348;;;;:::o;51102:191::-;51142:4;51162:20;51180:1;51162:20;:::i;:::-;51157:25;;51196:20;51214:1;51196:20;:::i;:::-;51191:25;;51235:1;51232;51229:8;51226:34;;;51240:18;;:::i;:::-;51226:34;51285:1;51282;51278:9;51270:17;;51102:191;;;;:::o;51299:96::-;51336:7;51365:24;51383:5;51365:24;:::i;:::-;51354:35;;51299:96;;;:::o;51401:90::-;51435:7;51478:5;51471:13;51464:21;51453:32;;51401:90;;;:::o;51497:149::-;51533:7;51573:66;51566:5;51562:78;51551:89;;51497:149;;;:::o;51652:126::-;51689:7;51729:42;51722:5;51718:54;51707:65;;51652:126;;;:::o;51784:77::-;51821:7;51850:5;51839:16;;51784:77;;;:::o;51867:121::-;51925:9;51958:24;51976:5;51958:24;:::i;:::-;51945:37;;51867:121;;;:::o;51994:154::-;52078:6;52073:3;52068;52055:30;52140:1;52131:6;52126:3;52122:16;52115:27;51994:154;;;:::o;52154:307::-;52222:1;52232:113;52246:6;52243:1;52240:13;52232:113;;;52331:1;52326:3;52322:11;52316:18;52312:1;52307:3;52303:11;52296:39;52268:2;52265:1;52261:10;52256:15;;52232:113;;;52363:6;52360:1;52357:13;52354:101;;;52443:1;52434:6;52429:3;52425:16;52418:27;52354:101;52203:258;52154:307;;;:::o;52467:320::-;52511:6;52548:1;52542:4;52538:12;52528:22;;52595:1;52589:4;52585:12;52616:18;52606:81;;52672:4;52664:6;52660:17;52650:27;;52606:81;52734:2;52726:6;52723:14;52703:18;52700:38;52697:84;;;52753:18;;:::i;:::-;52697:84;52518:269;52467:320;;;:::o;52793:281::-;52876:27;52898:4;52876:27;:::i;:::-;52868:6;52864:40;53006:6;52994:10;52991:22;52970:18;52958:10;52955:34;52952:62;52949:88;;;53017:18;;:::i;:::-;52949:88;53057:10;53053:2;53046:22;52836:238;52793:281;;:::o;53080:233::-;53119:3;53142:24;53160:5;53142:24;:::i;:::-;53133:33;;53188:66;53181:5;53178:77;53175:103;;;53258:18;;:::i;:::-;53175:103;53305:1;53298:5;53294:13;53287:20;;53080:233;;;:::o;53319:176::-;53351:1;53368:20;53386:1;53368:20;:::i;:::-;53363:25;;53402:20;53420:1;53402:20;:::i;:::-;53397:25;;53441:1;53431:35;;53446:18;;:::i;:::-;53431:35;53487:1;53484;53480:9;53475:14;;53319:176;;;;:::o;53501:180::-;53549:77;53546:1;53539:88;53646:4;53643:1;53636:15;53670:4;53667:1;53660:15;53687:180;53735:77;53732:1;53725:88;53832:4;53829:1;53822:15;53856:4;53853:1;53846:15;53873:180;53921:77;53918:1;53911:88;54018:4;54015:1;54008:15;54042:4;54039:1;54032:15;54059:180;54107:77;54104:1;54097:88;54204:4;54201:1;54194:15;54228:4;54225:1;54218:15;54245:180;54293:77;54290:1;54283:88;54390:4;54387:1;54380:15;54414:4;54411:1;54404:15;54431:183;54466:3;54504:1;54486:16;54483:23;54480:128;;;54542:1;54539;54536;54521:23;54564:34;54595:1;54589:8;54564:34;:::i;:::-;54557:41;;54480:128;54431:183;:::o;54620:117::-;54729:1;54726;54719:12;54743:117;54852:1;54849;54842:12;54866:117;54975:1;54972;54965:12;54989:117;55098:1;55095;55088:12;55112:117;55221:1;55218;55211:12;55235:102;55276:6;55327:2;55323:7;55318:2;55311:5;55307:14;55303:28;55293:38;;55235:102;;;:::o;55343:106::-;55387:8;55436:5;55431:3;55427:15;55406:36;;55343:106;;;:::o;55455:239::-;55595:34;55591:1;55583:6;55579:14;55572:58;55664:22;55659:2;55651:6;55647:15;55640:47;55455:239;:::o;55700:234::-;55840:34;55836:1;55828:6;55824:14;55817:58;55909:17;55904:2;55896:6;55892:15;55885:42;55700:234;:::o;55940:227::-;56080:34;56076:1;56068:6;56064:14;56057:58;56149:10;56144:2;56136:6;56132:15;56125:35;55940:227;:::o;56173:170::-;56313:22;56309:1;56301:6;56297:14;56290:46;56173:170;:::o;56349:225::-;56489:34;56485:1;56477:6;56473:14;56466:58;56558:8;56553:2;56545:6;56541:15;56534:33;56349:225;:::o;56580:223::-;56720:34;56716:1;56708:6;56704:14;56697:58;56789:6;56784:2;56776:6;56772:15;56765:31;56580:223;:::o;56809:158::-;56949:10;56945:1;56937:6;56933:14;56926:34;56809:158;:::o;56973:229::-;57113:34;57109:1;57101:6;57097:14;57090:58;57182:12;57177:2;57169:6;57165:15;57158:37;56973:229;:::o;57208:224::-;57348:34;57344:1;57336:6;57332:14;57325:58;57417:7;57412:2;57404:6;57400:15;57393:32;57208:224;:::o;57438:179::-;57578:31;57574:1;57566:6;57562:14;57555:55;57438:179;:::o;57623:181::-;57763:33;57759:1;57751:6;57747:14;57740:57;57623:181;:::o;57810:166::-;57950:18;57946:1;57938:6;57934:14;57927:42;57810:166;:::o;57982:177::-;58122:29;58118:1;58110:6;58106:14;58099:53;57982:177;:::o;58165:224::-;58305:34;58301:1;58293:6;58289:14;58282:58;58374:7;58369:2;58361:6;58357:15;58350:32;58165:224;:::o;58395:222::-;58535:34;58531:1;58523:6;58519:14;58512:58;58604:5;58599:2;58591:6;58587:15;58580:30;58395:222;:::o;58623:229::-;58763:34;58759:1;58751:6;58747:14;58740:58;58832:12;58827:2;58819:6;58815:15;58808:37;58623:229;:::o;58858:162::-;58998:14;58994:1;58986:6;58982:14;58975:38;58858:162;:::o;59026:182::-;59166:34;59162:1;59154:6;59150:14;59143:58;59026:182;:::o;59214:::-;59354:34;59350:1;59342:6;59338:14;59331:58;59214:182;:::o;59402:227::-;59542:34;59538:1;59530:6;59526:14;59519:58;59611:10;59606:2;59598:6;59594:15;59587:35;59402:227;:::o;59635:166::-;59775:18;59771:1;59763:6;59759:14;59752:42;59635:166;:::o;59807:180::-;59947:32;59943:1;59935:6;59931:14;59924:56;59807:180;:::o;59993:170::-;60133:22;60129:1;60121:6;60117:14;60110:46;59993:170;:::o;60169:::-;60309:22;60305:1;60297:6;60293:14;60286:46;60169:170;:::o;60345:177::-;60485:29;60481:1;60473:6;60469:14;60462:53;60345:177;:::o;60528:228::-;60668:34;60664:1;60656:6;60652:14;60645:58;60737:11;60732:2;60724:6;60720:15;60713:36;60528:228;:::o;60762:::-;60902:34;60898:1;60890:6;60886:14;60879:58;60971:11;60966:2;60958:6;60954:15;60947:36;60762:228;:::o;60996:227::-;61136:34;61132:1;61124:6;61120:14;61113:58;61205:10;61200:2;61192:6;61188:15;61181:35;60996:227;:::o;61229:220::-;61369:34;61365:1;61357:6;61353:14;61346:58;61438:3;61433:2;61425:6;61421:15;61414:28;61229:220;:::o;61455:181::-;61595:33;61591:1;61583:6;61579:14;61572:57;61455:181;:::o;61642:176::-;61782:28;61778:1;61770:6;61766:14;61759:52;61642:176;:::o;61824:172::-;61964:24;61960:1;61952:6;61948:14;61941:48;61824:172;:::o;62002:711::-;62041:3;62079:4;62061:16;62058:26;62055:39;;;62087:5;;62055:39;62116:20;;:::i;:::-;62191:1;62173:16;62169:24;62166:1;62160:4;62145:49;62224:4;62218:11;62323:16;62316:4;62308:6;62304:17;62301:39;62268:18;62260:6;62257:30;62241:113;62238:146;;;62369:5;;;;62238:146;62415:6;62409:4;62405:17;62451:3;62445:10;62478:18;62470:6;62467:30;62464:43;;;62500:5;;;;;;62464:43;62548:6;62541:4;62536:3;62532:14;62528:27;62607:1;62589:16;62585:24;62579:4;62575:35;62570:3;62567:44;62564:57;;;62614:5;;;;;;;62564:57;62631;62679:6;62673:4;62669:17;62661:6;62657:30;62651:4;62631:57;:::i;:::-;62704:3;62697:10;;62045:668;;;;;62002:711;;:::o;62719:122::-;62792:24;62810:5;62792:24;:::i;:::-;62785:5;62782:35;62772:63;;62831:1;62828;62821:12;62772:63;62719:122;:::o;62847:116::-;62917:21;62932:5;62917:21;:::i;:::-;62910:5;62907:32;62897:60;;62953:1;62950;62943:12;62897:60;62847:116;:::o;62969:120::-;63041:23;63058:5;63041:23;:::i;:::-;63034:5;63031:34;63021:62;;63079:1;63076;63069:12;63021:62;62969:120;:::o;63095:122::-;63168:24;63186:5;63168:24;:::i;:::-;63161:5;63158:35;63148:63;;63207:1;63204;63197:12;63148:63;63095:122;:::o
Swarm Source
ipfs://794130dfeaaacd9349b55dc9dfe8bb654e6592e62611dd511a6e7da076feeb5d
Loading...
Loading
Loading...
Loading
Multichain Portfolio | 30 Chains
Chain | Token | Portfolio % | Price | Amount | Value |
---|---|---|---|---|---|
ETH | Ether (ETH) | 100.00% | $3,485.87 | 1.52 | $5,298.52 |
Loading...
Loading
[ 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.