Feature Tip: Add private address tag to any address under My Name Tag !
ERC-1155
Overview
Max Total Supply
888 88C
Holders
123
Market
Volume (24H)
N/A
Min Price (24H)
N/A
Max Price (24H)
N/A
Other Info
Token Contract
Loading...
Loading
Loading...
Loading
Loading...
Loading
# | Exchange | Pair | Price | 24H Volume | % Volume |
---|
Contract Name:
Aliens88CERC1155
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at Etherscan.io on 2023-07-13 */ // SPDX-License-Identifier: MIT // Sources flattened with hardhat v2.13.0 https://hardhat.org // File @openzeppelin/contracts/utils/[email protected] // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File @openzeppelin/contracts/access/[email protected] // 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/introspection/[email protected] // 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/token/ERC1155/[email protected] // 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/[email protected] // 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/[email protected] // 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/utils/[email protected] // OpenZeppelin Contracts (last updated v4.8.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 functionCallWithValue(target, data, 0, "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"); (bool success, bytes memory returndata) = target.call{value: value}(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.staticcall(data); return verifyCallResultFromTarget(target, 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) { (bool success, bytes memory returndata) = target.delegatecall(data); return verifyCallResultFromTarget(target, success, returndata, errorMessage); } /** * @dev Tool to verify that a low level call to smart-contract was successful, and revert (either by bubbling * the revert reason or using the provided one) in case of unsuccessful call or if target was not a contract. * * _Available since v4.8._ */ function verifyCallResultFromTarget( address target, bool success, bytes memory returndata, string memory errorMessage ) internal view returns (bytes memory) { if (success) { if (returndata.length == 0) { // only check isContract if the call was successful and the return data is empty // otherwise we already know that it was a contract require(isContract(target), "Address: call to non-contract"); } return returndata; } else { _revert(returndata, errorMessage); } } /** * @dev Tool to verify that a low level call was successful, and revert if it wasn't, either by bubbling the * revert reason or 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 { _revert(returndata, errorMessage); } } function _revert(bytes memory returndata, string memory errorMessage) private pure { // 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/[email protected] // 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/[email protected] // OpenZeppelin Contracts (last updated v4.8.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 or 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 or 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/[email protected] // 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 contracts/Aliens88CERC1155.sol pragma solidity ^0.8.13; contract Aliens88CERC1155 is Ownable, ERC1155 { string public name; string public symbol; mapping (address => bool) _minters; mapping (uint256 => string) uris; modifier onlyMinter() { require(_minters[msg.sender], "Sender is not authorized Minter."); _; } constructor ( string memory name_, string memory symbol_ ) ERC1155('') { name = name_; symbol = symbol_; } function mint(address to, uint256 tokenId_, uint256 amount) onlyMinter public { _mint(to, tokenId_, amount, ''); } function mintBatch(address to, uint256[] memory tokenIds_, uint256[] memory amounts) onlyMinter public { _mintBatch(to, tokenIds_, amounts, ''); } function setURI(uint256 tokenId_, string memory uri_) public onlyOwner { uris[tokenId_] = uri_; } function setMinter(address contract_) public onlyOwner { _minters[contract_] = true; } function releaseMinter(address contract_) public onlyOwner { _minters[contract_] = false; } function uri(uint256 tokenId_) public view override (ERC1155) returns (string memory) { return uris[tokenId_]; } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"name_","type":"string"},{"internalType":"string","name":"symbol_","type":"string"}],"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":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"},{"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":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"mint","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"to","type":"address"},{"internalType":"uint256[]","name":"tokenIds_","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"}],"name":"mintBatch","outputs":[],"stateMutability":"nonpayable","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":"contract_","type":"address"}],"name":"releaseMinter","outputs":[],"stateMutability":"nonpayable","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":"address","name":"contract_","type":"address"}],"name":"setMinter","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"},{"internalType":"string","name":"uri_","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":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId_","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003d6d38038062003d6d833981810160405281019062000037919062000319565b60405180602001604052806000815250620000676200005b620000a560201b60201c565b620000ad60201b60201c565b62000078816200017160201b60201c565b5081600490816200008a9190620005e9565b5080600590816200009c9190620005e9565b505050620006d0565b600033905090565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8060039081620001829190620005e9565b5050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b620001ef82620001a4565b810181811067ffffffffffffffff82111715620002115762000210620001b5565b5b80604052505050565b60006200022662000186565b9050620002348282620001e4565b919050565b600067ffffffffffffffff821115620002575762000256620001b5565b5b6200026282620001a4565b9050602081019050919050565b60005b838110156200028f57808201518184015260208101905062000272565b60008484015250505050565b6000620002b2620002ac8462000239565b6200021a565b905082815260208101848484011115620002d157620002d06200019f565b5b620002de8482856200026f565b509392505050565b600082601f830112620002fe57620002fd6200019a565b5b8151620003108482602086016200029b565b91505092915050565b6000806040838503121562000333576200033262000190565b5b600083015167ffffffffffffffff81111562000354576200035362000195565b5b6200036285828601620002e6565b925050602083015167ffffffffffffffff81111562000386576200038562000195565b5b6200039485828601620002e6565b9150509250929050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680620003f157607f821691505b602082108103620004075762000406620003a9565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004717fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8262000432565b6200047d868362000432565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b6000620004ca620004c4620004be8462000495565b6200049f565b62000495565b9050919050565b6000819050919050565b620004e683620004a9565b620004fe620004f582620004d1565b8484546200043f565b825550505050565b600090565b6200051562000506565b62000522818484620004db565b505050565b5b818110156200054a576200053e6000826200050b565b60018101905062000528565b5050565b601f821115620005995762000563816200040d565b6200056e8462000422565b810160208510156200057e578190505b620005966200058d8562000422565b83018262000527565b50505b505050565b600082821c905092915050565b6000620005be600019846008026200059e565b1980831691505092915050565b6000620005d98383620005ab565b9150826002028217905092915050565b620005f4826200039e565b67ffffffffffffffff81111562000610576200060f620001b5565b5b6200061c8254620003d8565b620006298282856200054e565b600060209050601f8311600181146200066157600084156200064c578287015190505b620006588582620005cb565b865550620006c8565b601f19841662000671866200040d565b60005b828110156200069b5784890151825560018201915060208501945060208101905062000674565b86831015620006bb5784890151620006b7601f891682620005ab565b8355505b6001600288020188555050505b505050505050565b61368d80620006e06000396000f3fe608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063d81d0a1511610071578063d81d0a15146102ca578063e985e9c5146102e6578063f242432a14610316578063f2fde38b14610332578063fca3b5aa1461034e57610115565b80638da5cb5b1461025657806395d89b4114610274578063a22cb46514610292578063cf8a84cc146102ae57610115565b8063156e29f6116100e9578063156e29f6146101c85780632eb2c2d6146101e45780634e1273f414610200578063715018a614610230578063862440e21461023a57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806306fdde031461017a5780630e89341c14610198575b600080fd5b610134600480360381019061012f9190611ea9565b61036a565b6040516101419190611ef8565b60405180910390f35b610164600480360381019061015f9190611f6b565b610433565b6040516101719190611fb3565b60405180910390f35b610182610515565b60405161018f919061205e565b60405180910390f35b6101b260048036038101906101ad9190612080565b6105a3565b6040516101bf919061205e565b60405180910390f35b6101e260048036038101906101dd91906120ad565b610648565b005b6101fe60048036038101906101f991906122fd565b6106f4565b005b61021a6004803603810190610215919061248f565b610795565b60405161022791906125c5565b60405180910390f35b6102386108ae565b005b610254600480360381019061024f9190612688565b6108c2565b005b61025e6108ef565b60405161026b91906126f3565b60405180910390f35b61027c610918565b604051610289919061205e565b60405180910390f35b6102ac60048036038101906102a7919061273a565b6109a6565b005b6102c860048036038101906102c3919061277a565b6109bc565b005b6102e460048036038101906102df91906127a7565b610a1f565b005b61030060048036038101906102fb9190612832565b610acb565b60405161030d9190611fb3565b60405180910390f35b610330600480360381019061032b9190612872565b610b5f565b005b61034c6004803603810190610347919061277a565b610c00565b005b6103686004803603810190610363919061277a565b610c83565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d19061297b565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104fe57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050e575061050d82610ce6565b5b9050919050565b60048054610522906129ca565b80601f016020809104026020016040519081016040528092919081815260200182805461054e906129ca565b801561059b5780601f106105705761010080835404028352916020019161059b565b820191906000526020600020905b81548152906001019060200180831161057e57829003601f168201915b505050505081565b60606007600083815260200190815260200160002080546105c3906129ca565b80601f01602080910402602001604051908101604052809291908181526020018280546105ef906129ca565b801561063c5780601f106106115761010080835404028352916020019161063c565b820191906000526020600020905b81548152906001019060200180831161061f57829003601f168201915b50505050509050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb90612a47565b60405180910390fd5b6106ef83838360405180602001604052806000815250610d50565b505050565b6106fc610f01565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061074257506107418561073c610f01565b610acb565b5b610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890612ad9565b60405180910390fd5b61078e8585858585610f09565b5050505050565b606081518351146107db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d290612b6b565b60405180910390fd5b6000835167ffffffffffffffff8111156107f8576107f7612105565b5b6040519080825280602002602001820160405280156108265781602001602082028036833780820191505090505b50905060005b84518110156108a35761087385828151811061084b5761084a612b8b565b5b602002602001015185838151811061086657610865612b8b565b5b602002602001015161036a565b82828151811061088657610885612b8b565b5b6020026020010181815250508061089c90612be9565b905061082c565b508091505092915050565b6108b661122d565b6108c060006112ab565b565b6108ca61122d565b806007600084815260200190815260200160002090816108ea9190612ddd565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610925906129ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610951906129ca565b801561099e5780601f106109735761010080835404028352916020019161099e565b820191906000526020600020905b81548152906001019060200180831161098157829003601f168201915b505050505081565b6109b86109b1610f01565b838361136f565b5050565b6109c461122d565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612a47565b60405180910390fd5b610ac6838383604051806020016040528060008152506114db565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b67610f01565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bad5750610bac85610ba7610f01565b610acb565b5b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612ad9565b60405180910390fd5b610bf98585858585611708565b5050505050565b610c0861122d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90612f21565b60405180910390fd5b610c80816112ab565b50565b610c8b61122d565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690612fb3565b60405180910390fd5b6000610dc9610f01565b90506000610dd6856119a6565b90506000610de3856119a6565b9050610df483600089858589611a20565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e549190612fd3565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610ed2929190613007565b60405180910390a4610ee983600089858589611a28565b610ef883600089898989611a30565b50505050505050565b600033905090565b8151835114610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f44906130a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390613134565b60405180910390fd5b6000610fc6610f01565b9050610fd6818787878787611a20565b60005b845181101561118a576000858281518110610ff757610ff6612b8b565b5b60200260200101519050600085838151811061101657611015612b8b565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af906131c6565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461116f9190612fd3565b925050819055505050508061118390612be9565b9050610fd9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112019291906131e6565b60405180910390a4611217818787878787611a28565b611225818787878787611c07565b505050505050565b611235610f01565b73ffffffffffffffffffffffffffffffffffffffff166112536108ef565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090613269565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d4906132fb565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114ce9190611fb3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190612fb3565b60405180910390fd5b815183511461158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906130a2565b60405180910390fd5b6000611598610f01565b90506115a981600087878787611a20565b60005b8451811015611663578381815181106115c8576115c7612b8b565b5b6020026020010151600160008784815181106115e7576115e6612b8b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116499190612fd3565b92505081905550808061165b90612be9565b9150506115ac565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116db9291906131e6565b60405180910390a46116f281600087878787611a28565b61170181600087878787611c07565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613134565b60405180910390fd5b6000611781610f01565b9050600061178e856119a6565b9050600061179b856119a6565b90506117ab838989858589611a20565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a906131c6565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118fa9190612fd3565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611977929190613007565b60405180910390a461198d848a8a86868a611a28565b61199b848a8a8a8a8a611a30565b505050505050505050565b60606000600167ffffffffffffffff8111156119c5576119c4612105565b5b6040519080825280602002602001820160405280156119f35781602001602082028036833780820191505090505b5090508281600081518110611a0b57611a0a612b8b565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611a4f8473ffffffffffffffffffffffffffffffffffffffff16611dde565b15611bff578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a95959493929190613370565b6020604051808303816000875af1925050508015611ad157506040513d601f19601f82011682018060405250810190611ace91906133df565b60015b611b7657611add613419565b806308c379a003611b395750611af161343b565b80611afc5750611b3b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b30919061205e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061353d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906135cf565b60405180910390fd5b505b505050505050565b611c268473ffffffffffffffffffffffffffffffffffffffff16611dde565b15611dd6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c6c9594939291906135ef565b6020604051808303816000875af1925050508015611ca857506040513d601f19601f82011682018060405250810190611ca591906133df565b60015b611d4d57611cb4613419565b806308c379a003611d105750611cc861343b565b80611cd35750611d12565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d07919061205e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d449061353d565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb906135cf565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e4082611e15565b9050919050565b611e5081611e35565b8114611e5b57600080fd5b50565b600081359050611e6d81611e47565b92915050565b6000819050919050565b611e8681611e73565b8114611e9157600080fd5b50565b600081359050611ea381611e7d565b92915050565b60008060408385031215611ec057611ebf611e0b565b5b6000611ece85828601611e5e565b9250506020611edf85828601611e94565b9150509250929050565b611ef281611e73565b82525050565b6000602082019050611f0d6000830184611ee9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611f4881611f13565b8114611f5357600080fd5b50565b600081359050611f6581611f3f565b92915050565b600060208284031215611f8157611f80611e0b565b5b6000611f8f84828501611f56565b91505092915050565b60008115159050919050565b611fad81611f98565b82525050565b6000602082019050611fc86000830184611fa4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612008578082015181840152602081019050611fed565b60008484015250505050565b6000601f19601f8301169050919050565b600061203082611fce565b61203a8185611fd9565b935061204a818560208601611fea565b61205381612014565b840191505092915050565b600060208201905081810360008301526120788184612025565b905092915050565b60006020828403121561209657612095611e0b565b5b60006120a484828501611e94565b91505092915050565b6000806000606084860312156120c6576120c5611e0b565b5b60006120d486828701611e5e565b93505060206120e586828701611e94565b92505060406120f686828701611e94565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61213d82612014565b810181811067ffffffffffffffff8211171561215c5761215b612105565b5b80604052505050565b600061216f611e01565b905061217b8282612134565b919050565b600067ffffffffffffffff82111561219b5761219a612105565b5b602082029050602081019050919050565b600080fd5b60006121c46121bf84612180565b612165565b905080838252602082019050602084028301858111156121e7576121e66121ac565b5b835b8181101561221057806121fc8882611e94565b8452602084019350506020810190506121e9565b5050509392505050565b600082601f83011261222f5761222e612100565b5b813561223f8482602086016121b1565b91505092915050565b600080fd5b600067ffffffffffffffff82111561226857612267612105565b5b61227182612014565b9050602081019050919050565b82818337600083830152505050565b60006122a061229b8461224d565b612165565b9050828152602081018484840111156122bc576122bb612248565b5b6122c784828561227e565b509392505050565b600082601f8301126122e4576122e3612100565b5b81356122f484826020860161228d565b91505092915050565b600080600080600060a0868803121561231957612318611e0b565b5b600061232788828901611e5e565b955050602061233888828901611e5e565b945050604086013567ffffffffffffffff81111561235957612358611e10565b5b6123658882890161221a565b935050606086013567ffffffffffffffff81111561238657612385611e10565b5b6123928882890161221a565b925050608086013567ffffffffffffffff8111156123b3576123b2611e10565b5b6123bf888289016122cf565b9150509295509295909350565b600067ffffffffffffffff8211156123e7576123e6612105565b5b602082029050602081019050919050565b600061240b612406846123cc565b612165565b9050808382526020820190506020840283018581111561242e5761242d6121ac565b5b835b8181101561245757806124438882611e5e565b845260208401935050602081019050612430565b5050509392505050565b600082601f83011261247657612475612100565b5b81356124868482602086016123f8565b91505092915050565b600080604083850312156124a6576124a5611e0b565b5b600083013567ffffffffffffffff8111156124c4576124c3611e10565b5b6124d085828601612461565b925050602083013567ffffffffffffffff8111156124f1576124f0611e10565b5b6124fd8582860161221a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61253c81611e73565b82525050565b600061254e8383612533565b60208301905092915050565b6000602082019050919050565b600061257282612507565b61257c8185612512565b935061258783612523565b8060005b838110156125b857815161259f8882612542565b97506125aa8361255a565b92505060018101905061258b565b5085935050505092915050565b600060208201905081810360008301526125df8184612567565b905092915050565b600067ffffffffffffffff82111561260257612601612105565b5b61260b82612014565b9050602081019050919050565b600061262b612626846125e7565b612165565b90508281526020810184848401111561264757612646612248565b5b61265284828561227e565b509392505050565b600082601f83011261266f5761266e612100565b5b813561267f848260208601612618565b91505092915050565b6000806040838503121561269f5761269e611e0b565b5b60006126ad85828601611e94565b925050602083013567ffffffffffffffff8111156126ce576126cd611e10565b5b6126da8582860161265a565b9150509250929050565b6126ed81611e35565b82525050565b600060208201905061270860008301846126e4565b92915050565b61271781611f98565b811461272257600080fd5b50565b6000813590506127348161270e565b92915050565b6000806040838503121561275157612750611e0b565b5b600061275f85828601611e5e565b925050602061277085828601612725565b9150509250929050565b6000602082840312156127905761278f611e0b565b5b600061279e84828501611e5e565b91505092915050565b6000806000606084860312156127c0576127bf611e0b565b5b60006127ce86828701611e5e565b935050602084013567ffffffffffffffff8111156127ef576127ee611e10565b5b6127fb8682870161221a565b925050604084013567ffffffffffffffff81111561281c5761281b611e10565b5b6128288682870161221a565b9150509250925092565b6000806040838503121561284957612848611e0b565b5b600061285785828601611e5e565b925050602061286885828601611e5e565b9150509250929050565b600080600080600060a0868803121561288e5761288d611e0b565b5b600061289c88828901611e5e565b95505060206128ad88828901611e5e565b94505060406128be88828901611e94565b93505060606128cf88828901611e94565b925050608086013567ffffffffffffffff8111156128f0576128ef611e10565b5b6128fc888289016122cf565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612965602a83611fd9565b915061297082612909565b604082019050919050565b6000602082019050818103600083015261299481612958565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129e257607f821691505b6020821081036129f5576129f461299b565b5b50919050565b7f53656e646572206973206e6f7420617574686f72697a6564204d696e7465722e600082015250565b6000612a31602083611fd9565b9150612a3c826129fb565b602082019050919050565b60006020820190508181036000830152612a6081612a24565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612ac3602e83611fd9565b9150612ace82612a67565b604082019050919050565b60006020820190508181036000830152612af281612ab6565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612b55602983611fd9565b9150612b6082612af9565b604082019050919050565b60006020820190508181036000830152612b8481612b48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bf482611e73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c2657612c25612bba565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c56565b612c9d8683612c56565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612cda612cd5612cd084611e73565b612cb5565b611e73565b9050919050565b6000819050919050565b612cf483612cbf565b612d08612d0082612ce1565b848454612c63565b825550505050565b600090565b612d1d612d10565b612d28818484612ceb565b505050565b5b81811015612d4c57612d41600082612d15565b600181019050612d2e565b5050565b601f821115612d9157612d6281612c31565b612d6b84612c46565b81016020851015612d7a578190505b612d8e612d8685612c46565b830182612d2d565b50505b505050565b600082821c905092915050565b6000612db460001984600802612d96565b1980831691505092915050565b6000612dcd8383612da3565b9150826002028217905092915050565b612de682611fce565b67ffffffffffffffff811115612dff57612dfe612105565b5b612e0982546129ca565b612e14828285612d50565b600060209050601f831160018114612e475760008415612e35578287015190505b612e3f8582612dc1565b865550612ea7565b601f198416612e5586612c31565b60005b82811015612e7d57848901518255600182019150602085019450602081019050612e58565b86831015612e9a5784890151612e96601f891682612da3565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f0b602683611fd9565b9150612f1682612eaf565b604082019050919050565b60006020820190508181036000830152612f3a81612efe565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f9d602183611fd9565b9150612fa882612f41565b604082019050919050565b60006020820190508181036000830152612fcc81612f90565b9050919050565b6000612fde82611e73565b9150612fe983611e73565b925082820190508082111561300157613000612bba565b5b92915050565b600060408201905061301c6000830185611ee9565b6130296020830184611ee9565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061308c602883611fd9565b915061309782613030565b604082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061311e602583611fd9565b9150613129826130c2565b604082019050919050565b6000602082019050818103600083015261314d81613111565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006131b0602a83611fd9565b91506131bb82613154565b604082019050919050565b600060208201905081810360008301526131df816131a3565b9050919050565b600060408201905081810360008301526132008185612567565b905081810360208301526132148184612567565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613253602083611fd9565b915061325e8261321d565b602082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006132e5602983611fd9565b91506132f082613289565b604082019050919050565b60006020820190508181036000830152613314816132d8565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133428261331b565b61334c8185613326565b935061335c818560208601611fea565b61336581612014565b840191505092915050565b600060a08201905061338560008301886126e4565b61339260208301876126e4565b61339f6040830186611ee9565b6133ac6060830185611ee9565b81810360808301526133be8184613337565b90509695505050505050565b6000815190506133d981611f3f565b92915050565b6000602082840312156133f5576133f4611e0b565b5b6000613403848285016133ca565b91505092915050565b60008160e01c9050919050565b600060033d11156134385760046000803e61343560005161340c565b90505b90565b600060443d106134c85761344d611e01565b60043d036004823e80513d602482011167ffffffffffffffff821117156134755750506134c8565b808201805167ffffffffffffffff81111561349357505050506134c8565b80602083010160043d0385018111156134b05750505050506134c8565b6134bf82602001850186612134565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613527603483611fd9565b9150613532826134cb565b604082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006135b9602883611fd9565b91506135c48261355d565b604082019050919050565b600060208201905081810360008301526135e8816135ac565b9050919050565b600060a08201905061360460008301886126e4565b61361160208301876126e4565b81810360408301526136238186612567565b905081810360608301526136378185612567565b9050818103608083015261364b8184613337565b9050969550505050505056fea264697066735822122031af75018e81dd417ed5af40f3c52743d1c735d49d1cd2d599d79154760371f964736f6c63430008120033000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003383843000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033838430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101155760003560e01c80638da5cb5b116100a2578063d81d0a1511610071578063d81d0a15146102ca578063e985e9c5146102e6578063f242432a14610316578063f2fde38b14610332578063fca3b5aa1461034e57610115565b80638da5cb5b1461025657806395d89b4114610274578063a22cb46514610292578063cf8a84cc146102ae57610115565b8063156e29f6116100e9578063156e29f6146101c85780632eb2c2d6146101e45780634e1273f414610200578063715018a614610230578063862440e21461023a57610115565b8062fdd58e1461011a57806301ffc9a71461014a57806306fdde031461017a5780630e89341c14610198575b600080fd5b610134600480360381019061012f9190611ea9565b61036a565b6040516101419190611ef8565b60405180910390f35b610164600480360381019061015f9190611f6b565b610433565b6040516101719190611fb3565b60405180910390f35b610182610515565b60405161018f919061205e565b60405180910390f35b6101b260048036038101906101ad9190612080565b6105a3565b6040516101bf919061205e565b60405180910390f35b6101e260048036038101906101dd91906120ad565b610648565b005b6101fe60048036038101906101f991906122fd565b6106f4565b005b61021a6004803603810190610215919061248f565b610795565b60405161022791906125c5565b60405180910390f35b6102386108ae565b005b610254600480360381019061024f9190612688565b6108c2565b005b61025e6108ef565b60405161026b91906126f3565b60405180910390f35b61027c610918565b604051610289919061205e565b60405180910390f35b6102ac60048036038101906102a7919061273a565b6109a6565b005b6102c860048036038101906102c3919061277a565b6109bc565b005b6102e460048036038101906102df91906127a7565b610a1f565b005b61030060048036038101906102fb9190612832565b610acb565b60405161030d9190611fb3565b60405180910390f35b610330600480360381019061032b9190612872565b610b5f565b005b61034c6004803603810190610347919061277a565b610c00565b005b6103686004803603810190610363919061277a565b610c83565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036103da576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016103d19061297b565b60405180910390fd5b6001600083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614806104fe57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061050e575061050d82610ce6565b5b9050919050565b60048054610522906129ca565b80601f016020809104026020016040519081016040528092919081815260200182805461054e906129ca565b801561059b5780601f106105705761010080835404028352916020019161059b565b820191906000526020600020905b81548152906001019060200180831161057e57829003601f168201915b505050505081565b60606007600083815260200190815260200160002080546105c3906129ca565b80601f01602080910402602001604051908101604052809291908181526020018280546105ef906129ca565b801561063c5780601f106106115761010080835404028352916020019161063c565b820191906000526020600020905b81548152906001019060200180831161061f57829003601f168201915b50505050509050919050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff166106d4576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106cb90612a47565b60405180910390fd5b6106ef83838360405180602001604052806000815250610d50565b505050565b6106fc610f01565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff16148061074257506107418561073c610f01565b610acb565b5b610781576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161077890612ad9565b60405180910390fd5b61078e8585858585610f09565b5050505050565b606081518351146107db576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016107d290612b6b565b60405180910390fd5b6000835167ffffffffffffffff8111156107f8576107f7612105565b5b6040519080825280602002602001820160405280156108265781602001602082028036833780820191505090505b50905060005b84518110156108a35761087385828151811061084b5761084a612b8b565b5b602002602001015185838151811061086657610865612b8b565b5b602002602001015161036a565b82828151811061088657610885612b8b565b5b6020026020010181815250508061089c90612be9565b905061082c565b508091505092915050565b6108b661122d565b6108c060006112ab565b565b6108ca61122d565b806007600084815260200190815260200160002090816108ea9190612ddd565b505050565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b60058054610925906129ca565b80601f0160208091040260200160405190810160405280929190818152602001828054610951906129ca565b801561099e5780601f106109735761010080835404028352916020019161099e565b820191906000526020600020905b81548152906001019060200180831161098157829003601f168201915b505050505081565b6109b86109b1610f01565b838361136f565b5050565b6109c461122d565b6000600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b600660003373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16610aab576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610aa290612a47565b60405180910390fd5b610ac6838383604051806020016040528060008152506114db565b505050565b6000600260008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610b67610f01565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610bad5750610bac85610ba7610f01565b610acb565b5b610bec576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610be390612ad9565b60405180910390fd5b610bf98585858585611708565b5050505050565b610c0861122d565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610c77576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c6e90612f21565b60405180910390fd5b610c80816112ab565b50565b610c8b61122d565b6001600660008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff02191690831515021790555050565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610dbf576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610db690612fb3565b60405180910390fd5b6000610dc9610f01565b90506000610dd6856119a6565b90506000610de3856119a6565b9050610df483600089858589611a20565b846001600088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610e549190612fd3565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610ed2929190613007565b60405180910390a4610ee983600089858589611a28565b610ef883600089898989611a30565b50505050505050565b600033905090565b8151835114610f4d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610f44906130a2565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610fbc576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610fb390613134565b60405180910390fd5b6000610fc6610f01565b9050610fd6818787878787611a20565b60005b845181101561118a576000858281518110610ff757610ff6612b8b565b5b60200260200101519050600085838151811061101657611015612b8b565b5b6020026020010151905060006001600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050818110156110b8576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110af906131c6565b60405180910390fd5b8181036001600085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550816001600085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020600082825461116f9190612fd3565b925050819055505050508061118390612be9565b9050610fd9565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516112019291906131e6565b60405180910390a4611217818787878787611a28565b611225818787878787611c07565b505050505050565b611235610f01565b73ffffffffffffffffffffffffffffffffffffffff166112536108ef565b73ffffffffffffffffffffffffffffffffffffffff16146112a9576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016112a090613269565b60405180910390fd5b565b60008060009054906101000a900473ffffffffffffffffffffffffffffffffffffffff169050816000806101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036113dd576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016113d4906132fb565b60405180910390fd5b80600260008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516114ce9190611fb3565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff160361154a576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161154190612fb3565b60405180910390fd5b815183511461158e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611585906130a2565b60405180910390fd5b6000611598610f01565b90506115a981600087878787611a20565b60005b8451811015611663578381815181106115c8576115c7612b8b565b5b6020026020010151600160008784815181106115e7576115e6612b8b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546116499190612fd3565b92505081905550808061165b90612be9565b9150506115ac565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb87876040516116db9291906131e6565b60405180910390a46116f281600087878787611a28565b61170181600087878787611c07565b5050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611777576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161176e90613134565b60405180910390fd5b6000611781610f01565b9050600061178e856119a6565b9050600061179b856119a6565b90506117ab838989858589611a20565b60006001600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905085811015611843576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161183a906131c6565b60405180910390fd5b8581036001600089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002081905550856001600089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546118fa9190612fd3565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a604051611977929190613007565b60405180910390a461198d848a8a86868a611a28565b61199b848a8a8a8a8a611a30565b505050505050505050565b60606000600167ffffffffffffffff8111156119c5576119c4612105565b5b6040519080825280602002602001820160405280156119f35781602001602082028036833780820191505090505b5090508281600081518110611a0b57611a0a612b8b565b5b60200260200101818152505080915050919050565b505050505050565b505050505050565b611a4f8473ffffffffffffffffffffffffffffffffffffffff16611dde565b15611bff578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b8152600401611a95959493929190613370565b6020604051808303816000875af1925050508015611ad157506040513d601f19601f82011682018060405250810190611ace91906133df565b60015b611b7657611add613419565b806308c379a003611b395750611af161343b565b80611afc5750611b3b565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b30919061205e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611b6d9061353d565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611bfd576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bf4906135cf565b60405180910390fd5b505b505050505050565b611c268473ffffffffffffffffffffffffffffffffffffffff16611dde565b15611dd6578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611c6c9594939291906135ef565b6020604051808303816000875af1925050508015611ca857506040513d601f19601f82011682018060405250810190611ca591906133df565b60015b611d4d57611cb4613419565b806308c379a003611d105750611cc861343b565b80611cd35750611d12565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d07919061205e565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611d449061353d565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611dd4576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611dcb906135cf565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611e4082611e15565b9050919050565b611e5081611e35565b8114611e5b57600080fd5b50565b600081359050611e6d81611e47565b92915050565b6000819050919050565b611e8681611e73565b8114611e9157600080fd5b50565b600081359050611ea381611e7d565b92915050565b60008060408385031215611ec057611ebf611e0b565b5b6000611ece85828601611e5e565b9250506020611edf85828601611e94565b9150509250929050565b611ef281611e73565b82525050565b6000602082019050611f0d6000830184611ee9565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611f4881611f13565b8114611f5357600080fd5b50565b600081359050611f6581611f3f565b92915050565b600060208284031215611f8157611f80611e0b565b5b6000611f8f84828501611f56565b91505092915050565b60008115159050919050565b611fad81611f98565b82525050565b6000602082019050611fc86000830184611fa4565b92915050565b600081519050919050565b600082825260208201905092915050565b60005b83811015612008578082015181840152602081019050611fed565b60008484015250505050565b6000601f19601f8301169050919050565b600061203082611fce565b61203a8185611fd9565b935061204a818560208601611fea565b61205381612014565b840191505092915050565b600060208201905081810360008301526120788184612025565b905092915050565b60006020828403121561209657612095611e0b565b5b60006120a484828501611e94565b91505092915050565b6000806000606084860312156120c6576120c5611e0b565b5b60006120d486828701611e5e565b93505060206120e586828701611e94565b92505060406120f686828701611e94565b9150509250925092565b600080fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b61213d82612014565b810181811067ffffffffffffffff8211171561215c5761215b612105565b5b80604052505050565b600061216f611e01565b905061217b8282612134565b919050565b600067ffffffffffffffff82111561219b5761219a612105565b5b602082029050602081019050919050565b600080fd5b60006121c46121bf84612180565b612165565b905080838252602082019050602084028301858111156121e7576121e66121ac565b5b835b8181101561221057806121fc8882611e94565b8452602084019350506020810190506121e9565b5050509392505050565b600082601f83011261222f5761222e612100565b5b813561223f8482602086016121b1565b91505092915050565b600080fd5b600067ffffffffffffffff82111561226857612267612105565b5b61227182612014565b9050602081019050919050565b82818337600083830152505050565b60006122a061229b8461224d565b612165565b9050828152602081018484840111156122bc576122bb612248565b5b6122c784828561227e565b509392505050565b600082601f8301126122e4576122e3612100565b5b81356122f484826020860161228d565b91505092915050565b600080600080600060a0868803121561231957612318611e0b565b5b600061232788828901611e5e565b955050602061233888828901611e5e565b945050604086013567ffffffffffffffff81111561235957612358611e10565b5b6123658882890161221a565b935050606086013567ffffffffffffffff81111561238657612385611e10565b5b6123928882890161221a565b925050608086013567ffffffffffffffff8111156123b3576123b2611e10565b5b6123bf888289016122cf565b9150509295509295909350565b600067ffffffffffffffff8211156123e7576123e6612105565b5b602082029050602081019050919050565b600061240b612406846123cc565b612165565b9050808382526020820190506020840283018581111561242e5761242d6121ac565b5b835b8181101561245757806124438882611e5e565b845260208401935050602081019050612430565b5050509392505050565b600082601f83011261247657612475612100565b5b81356124868482602086016123f8565b91505092915050565b600080604083850312156124a6576124a5611e0b565b5b600083013567ffffffffffffffff8111156124c4576124c3611e10565b5b6124d085828601612461565b925050602083013567ffffffffffffffff8111156124f1576124f0611e10565b5b6124fd8582860161221a565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61253c81611e73565b82525050565b600061254e8383612533565b60208301905092915050565b6000602082019050919050565b600061257282612507565b61257c8185612512565b935061258783612523565b8060005b838110156125b857815161259f8882612542565b97506125aa8361255a565b92505060018101905061258b565b5085935050505092915050565b600060208201905081810360008301526125df8184612567565b905092915050565b600067ffffffffffffffff82111561260257612601612105565b5b61260b82612014565b9050602081019050919050565b600061262b612626846125e7565b612165565b90508281526020810184848401111561264757612646612248565b5b61265284828561227e565b509392505050565b600082601f83011261266f5761266e612100565b5b813561267f848260208601612618565b91505092915050565b6000806040838503121561269f5761269e611e0b565b5b60006126ad85828601611e94565b925050602083013567ffffffffffffffff8111156126ce576126cd611e10565b5b6126da8582860161265a565b9150509250929050565b6126ed81611e35565b82525050565b600060208201905061270860008301846126e4565b92915050565b61271781611f98565b811461272257600080fd5b50565b6000813590506127348161270e565b92915050565b6000806040838503121561275157612750611e0b565b5b600061275f85828601611e5e565b925050602061277085828601612725565b9150509250929050565b6000602082840312156127905761278f611e0b565b5b600061279e84828501611e5e565b91505092915050565b6000806000606084860312156127c0576127bf611e0b565b5b60006127ce86828701611e5e565b935050602084013567ffffffffffffffff8111156127ef576127ee611e10565b5b6127fb8682870161221a565b925050604084013567ffffffffffffffff81111561281c5761281b611e10565b5b6128288682870161221a565b9150509250925092565b6000806040838503121561284957612848611e0b565b5b600061285785828601611e5e565b925050602061286885828601611e5e565b9150509250929050565b600080600080600060a0868803121561288e5761288d611e0b565b5b600061289c88828901611e5e565b95505060206128ad88828901611e5e565b94505060406128be88828901611e94565b93505060606128cf88828901611e94565b925050608086013567ffffffffffffffff8111156128f0576128ef611e10565b5b6128fc888289016122cf565b9150509295509295909350565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612965602a83611fd9565b915061297082612909565b604082019050919050565b6000602082019050818103600083015261299481612958565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806129e257607f821691505b6020821081036129f5576129f461299b565b5b50919050565b7f53656e646572206973206e6f7420617574686f72697a6564204d696e7465722e600082015250565b6000612a31602083611fd9565b9150612a3c826129fb565b602082019050919050565b60006020820190508181036000830152612a6081612a24565b9050919050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612ac3602e83611fd9565b9150612ace82612a67565b604082019050919050565b60006020820190508181036000830152612af281612ab6565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612b55602983611fd9565b9150612b6082612af9565b604082019050919050565b60006020820190508181036000830152612b8481612b48565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612bf482611e73565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612c2657612c25612bba565b5b600182019050919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612c937fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612c56565b612c9d8683612c56565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612cda612cd5612cd084611e73565b612cb5565b611e73565b9050919050565b6000819050919050565b612cf483612cbf565b612d08612d0082612ce1565b848454612c63565b825550505050565b600090565b612d1d612d10565b612d28818484612ceb565b505050565b5b81811015612d4c57612d41600082612d15565b600181019050612d2e565b5050565b601f821115612d9157612d6281612c31565b612d6b84612c46565b81016020851015612d7a578190505b612d8e612d8685612c46565b830182612d2d565b50505b505050565b600082821c905092915050565b6000612db460001984600802612d96565b1980831691505092915050565b6000612dcd8383612da3565b9150826002028217905092915050565b612de682611fce565b67ffffffffffffffff811115612dff57612dfe612105565b5b612e0982546129ca565b612e14828285612d50565b600060209050601f831160018114612e475760008415612e35578287015190505b612e3f8582612dc1565b865550612ea7565b601f198416612e5586612c31565b60005b82811015612e7d57848901518255600182019150602085019450602081019050612e58565b86831015612e9a5784890151612e96601f891682612da3565b8355505b6001600288020188555050505b505050505050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b6000612f0b602683611fd9565b9150612f1682612eaf565b604082019050919050565b60006020820190508181036000830152612f3a81612efe565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b6000612f9d602183611fd9565b9150612fa882612f41565b604082019050919050565b60006020820190508181036000830152612fcc81612f90565b9050919050565b6000612fde82611e73565b9150612fe983611e73565b925082820190508082111561300157613000612bba565b5b92915050565b600060408201905061301c6000830185611ee9565b6130296020830184611ee9565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061308c602883611fd9565b915061309782613030565b604082019050919050565b600060208201905081810360008301526130bb8161307f565b9050919050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b600061311e602583611fd9565b9150613129826130c2565b604082019050919050565b6000602082019050818103600083015261314d81613111565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b60006131b0602a83611fd9565b91506131bb82613154565b604082019050919050565b600060208201905081810360008301526131df816131a3565b9050919050565b600060408201905081810360008301526132008185612567565b905081810360208301526132148184612567565b90509392505050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b6000613253602083611fd9565b915061325e8261321d565b602082019050919050565b6000602082019050818103600083015261328281613246565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006132e5602983611fd9565b91506132f082613289565b604082019050919050565b60006020820190508181036000830152613314816132d8565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006133428261331b565b61334c8185613326565b935061335c818560208601611fea565b61336581612014565b840191505092915050565b600060a08201905061338560008301886126e4565b61339260208301876126e4565b61339f6040830186611ee9565b6133ac6060830185611ee9565b81810360808301526133be8184613337565b90509695505050505050565b6000815190506133d981611f3f565b92915050565b6000602082840312156133f5576133f4611e0b565b5b6000613403848285016133ca565b91505092915050565b60008160e01c9050919050565b600060033d11156134385760046000803e61343560005161340c565b90505b90565b600060443d106134c85761344d611e01565b60043d036004823e80513d602482011167ffffffffffffffff821117156134755750506134c8565b808201805167ffffffffffffffff81111561349357505050506134c8565b80602083010160043d0385018111156134b05750505050506134c8565b6134bf82602001850186612134565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b6000613527603483611fd9565b9150613532826134cb565b604082019050919050565b600060208201905081810360008301526135568161351a565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006135b9602883611fd9565b91506135c48261355d565b604082019050919050565b600060208201905081810360008301526135e8816135ac565b9050919050565b600060a08201905061360460008301886126e4565b61361160208301876126e4565b81810360408301526136238186612567565b905081810360608301526136378185612567565b9050818103608083015261364b8184613337565b9050969550505050505056fea264697066735822122031af75018e81dd417ed5af40f3c52743d1c735d49d1cd2d599d79154760371f964736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
000000000000000000000000000000000000000000000000000000000000004000000000000000000000000000000000000000000000000000000000000000800000000000000000000000000000000000000000000000000000000000000003383843000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000033838430000000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : name_ (string): 88C
Arg [1] : symbol_ (string): 88C
-----Encoded View---------------
6 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000040
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000080
Arg [2] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [3] : 3838430000000000000000000000000000000000000000000000000000000000
Arg [4] : 0000000000000000000000000000000000000000000000000000000000000003
Arg [5] : 3838430000000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42348:1257:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24657:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23680:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42401:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43474:126;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42829:128;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26600:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25053:524;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2888:103;;;:::i;:::-;;43133:112;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2240:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42426:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25650:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43361:105;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42965:160;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25877:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26117:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3146:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;43253:100;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24657:230;24743:7;24790:1;24771:21;;:7;:21;;;24763:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24857:9;:13;24867:2;24857:13;;;;;;;;;;;:22;24871:7;24857:22;;;;;;;;;;;;;;;;24850:29;;24657:230;;;;:::o;23680:310::-;23782:4;23834:26;23819:41;;;:11;:41;;;;:110;;;;23892:37;23877:52;;;:11;:52;;;;23819:110;:163;;;;23946:36;23970:11;23946:23;:36::i;:::-;23819:163;23799:183;;23680:310;;;:::o;42401:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43474:126::-;43545:13;43578:4;:14;43583:8;43578:14;;;;;;;;;;;43571:21;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;43474:126;;;:::o;42829:128::-;42584:8;:20;42593:10;42584:20;;;;;;;;;;;;;;;;;;;;;;;;;42576:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;42918:31:::1;42924:2;42928:8;42938:6;42918:31;;;;;;;;;;;::::0;:5:::1;:31::i;:::-;42829:128:::0;;;:::o;26600:438::-;26841:12;:10;:12::i;:::-;26833:20;;:4;:20;;;:60;;;;26857:36;26874:4;26880:12;:10;:12::i;:::-;26857:16;:36::i;:::-;26833:60;26811:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26978:52;27001:4;27007:2;27011:3;27016:7;27025:4;26978:22;:52::i;:::-;26600:438;;;;;:::o;25053:524::-;25209:16;25270:3;:10;25251:8;:15;:29;25243:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25339:30;25386:8;:15;25372:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25339:63;;25420:9;25415:122;25439:8;:15;25435:1;:19;25415:122;;;25495:30;25505:8;25514:1;25505:11;;;;;;;;:::i;:::-;;;;;;;;25518:3;25522:1;25518:6;;;;;;;;:::i;:::-;;;;;;;;25495:9;:30::i;:::-;25476:13;25490:1;25476:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25456:3;;;;:::i;:::-;;;25415:122;;;;25556:13;25549:20;;;25053:524;;;;:::o;2888:103::-;2126:13;:11;:13::i;:::-;2953:30:::1;2980:1;2953:18;:30::i;:::-;2888:103::o:0;43133:112::-;2126:13;:11;:13::i;:::-;43232:4:::1;43215;:14;43220:8;43215:14;;;;;;;;;;;:21;;;;;;:::i;:::-;;43133:112:::0;;:::o;2240:87::-;2286:7;2313:6;;;;;;;;;;;2306:13;;2240:87;:::o;42426:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25650:155::-;25745:52;25764:12;:10;:12::i;:::-;25778:8;25788;25745:18;:52::i;:::-;25650:155;;:::o;43361:105::-;2126:13;:11;:13::i;:::-;43453:5:::1;43431:8;:19;43440:9;43431:19;;;;;;;;;;;;;;;;:27;;;;;;;;;;;;;;;;;;43361:105:::0;:::o;42965:160::-;42584:8;:20;42593:10;42584:20;;;;;;;;;;;;;;;;;;;;;;;;;42576:65;;;;;;;;;;;;:::i;:::-;;;;;;;;;43079:38:::1;43090:2;43094:9;43105:7;43079:38;;;;;;;;;;;::::0;:10:::1;:38::i;:::-;42965:160:::0;;;:::o;25877:168::-;25976:4;26000:18;:27;26019:7;26000:27;;;;;;;;;;;;;;;:37;26028:8;26000:37;;;;;;;;;;;;;;;;;;;;;;;;;25993:44;;25877:168;;;;:::o;26117:406::-;26333:12;:10;:12::i;:::-;26325:20;;:4;:20;;;:60;;;;26349:36;26366:4;26372:12;:10;:12::i;:::-;26349:16;:36::i;:::-;26325:60;26303:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26470:45;26488:4;26494:2;26498;26502:6;26510:4;26470:17;:45::i;:::-;26117:406;;;;;:::o;3146:201::-;2126:13;:11;:13::i;:::-;3255:1:::1;3235:22;;:8;:22;;::::0;3227:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3311:28;3330:8;3311:18;:28::i;:::-;3146:201:::0;:::o;43253:100::-;2126:13;:11;:13::i;:::-;43341:4:::1;43319:8;:19;43328:9;43319:19;;;;;;;;;;;;;;;;:26;;;;;;;;;;;;;;;;;;43253:100:::0;:::o;22418:157::-;22503:4;22542:25;22527:40;;;:11;:40;;;;22520:47;;22418:157;;;:::o;31298:729::-;31465:1;31451:16;;:2;:16;;;31443:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31518:16;31537:12;:10;:12::i;:::-;31518:31;;31560:20;31583:21;31601:2;31583:17;:21::i;:::-;31560:44;;31615:24;31642:25;31660:6;31642:17;:25::i;:::-;31615:52;;31680:66;31701:8;31719:1;31723:2;31727:3;31732:7;31741:4;31680:20;:66::i;:::-;31780:6;31759:9;:13;31769:2;31759:13;;;;;;;;;;;:17;31773:2;31759:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31839:2;31802:52;;31835:1;31802:52;;31817:8;31802:52;;;31843:2;31847:6;31802:52;;;;;;;:::i;:::-;;;;;;;;31867:65;31887:8;31905:1;31909:2;31913:3;31918:7;31927:4;31867:19;:65::i;:::-;31945:74;31976:8;31994:1;31998:2;32002;32006:6;32014:4;31945:30;:74::i;:::-;31432:595;;;31298:729;;;;:::o;785:98::-;838:7;865:10;858:17;;785:98;:::o;28834:1146::-;29061:7;:14;29047:3;:10;:28;29039:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29153:1;29139:16;;:2;:16;;;29131:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29210:16;29229:12;:10;:12::i;:::-;29210:31;;29254:60;29275:8;29285:4;29291:2;29295:3;29300:7;29309:4;29254:20;:60::i;:::-;29332:9;29327:421;29351:3;:10;29347:1;:14;29327:421;;;29383:10;29396:3;29400:1;29396:6;;;;;;;;:::i;:::-;;;;;;;;29383:19;;29417:14;29434:7;29442:1;29434:10;;;;;;;;:::i;:::-;;;;;;;;29417:27;;29461:19;29483:9;:13;29493:2;29483:13;;;;;;;;;;;:19;29497:4;29483:19;;;;;;;;;;;;;;;;29461:41;;29540:6;29525:11;:21;;29517:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29673:6;29659:11;:20;29637:9;:13;29647:2;29637:13;;;;;;;;;;;:19;29651:4;29637:19;;;;;;;;;;;;;;;:42;;;;29730:6;29709:9;:13;29719:2;29709:13;;;;;;;;;;;:17;29723:2;29709:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29368:380;;;29363:3;;;;:::i;:::-;;;29327:421;;;;29795:2;29765:47;;29789:4;29765:47;;29779:8;29765:47;;;29799:3;29804:7;29765:47;;;;;;;:::i;:::-;;;;;;;;29825:59;29845:8;29855:4;29861:2;29865:3;29870:7;29879:4;29825:19;:59::i;:::-;29897:75;29933:8;29943:4;29949:2;29953:3;29958:7;29967:4;29897:35;:75::i;:::-;29028:952;28834:1146;;;;;:::o;2405:132::-;2480:12;:10;:12::i;:::-;2469:23;;:7;:5;:7::i;:::-;:23;;;2461:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2405:132::o;3507:191::-;3581:16;3600:6;;;;;;;;;;;3581:25;;3626:8;3617:6;;:17;;;;;;;;;;;;;;;;;;3681:8;3650:40;;3671:8;3650:40;;;;;;;;;;;;3570:128;3507:191;:::o;35711:331::-;35866:8;35857:17;;:5;:17;;;35849:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35969:8;35931:18;:25;35950:5;35931:25;;;;;;;;;;;;;;;:35;35957:8;35931:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;36015:8;35993:41;;36008:5;35993:41;;;36025:8;35993:41;;;;;;:::i;:::-;;;;;;;;35711:331;;;:::o;32430:813::-;32622:1;32608:16;;:2;:16;;;32600:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32695:7;:14;32681:3;:10;:28;32673:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32767:16;32786:12;:10;:12::i;:::-;32767:31;;32811:66;32832:8;32850:1;32854:2;32858:3;32863:7;32872:4;32811:20;:66::i;:::-;32895:9;32890:103;32914:3;:10;32910:1;:14;32890:103;;;32971:7;32979:1;32971:10;;;;;;;;:::i;:::-;;;;;;;;32946:9;:17;32956:3;32960:1;32956:6;;;;;;;;:::i;:::-;;;;;;;;32946:17;;;;;;;;;;;:21;32964:2;32946:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32926:3;;;;;:::i;:::-;;;;32890:103;;;;33046:2;33010:53;;33042:1;33010:53;;33024:8;33010:53;;;33050:3;33055:7;33010:53;;;;;;;:::i;:::-;;;;;;;;33076:65;33096:8;33114:1;33118:2;33122:3;33127:7;33136:4;33076:19;:65::i;:::-;33154:81;33190:8;33208:1;33212:2;33216:3;33221:7;33230:4;33154:35;:81::i;:::-;32589:654;32430:813;;;;:::o;27502:974::-;27704:1;27690:16;;:2;:16;;;27682:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27761:16;27780:12;:10;:12::i;:::-;27761:31;;27803:20;27826:21;27844:2;27826:17;:21::i;:::-;27803:44;;27858:24;27885:25;27903:6;27885:17;:25::i;:::-;27858:52;;27923:60;27944:8;27954:4;27960:2;27964:3;27969:7;27978:4;27923:20;:60::i;:::-;27996:19;28018:9;:13;28028:2;28018:13;;;;;;;;;;;:19;28032:4;28018:19;;;;;;;;;;;;;;;;27996:41;;28071:6;28056:11;:21;;28048:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28196:6;28182:11;:20;28160:9;:13;28170:2;28160:13;;;;;;;;;;;:19;28174:4;28160:19;;;;;;;;;;;;;;;:42;;;;28245:6;28224:9;:13;28234:2;28224:13;;;;;;;;;;;:17;28238:2;28224:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28300:2;28269:46;;28294:4;28269:46;;28284:8;28269:46;;;28304:2;28308:6;28269:46;;;;;;;:::i;:::-;;;;;;;;28328:59;28348:8;28358:4;28364:2;28368:3;28373:7;28382:4;28328:19;:59::i;:::-;28400:68;28431:8;28441:4;28447:2;28451;28455:6;28463:4;28400:30;:68::i;:::-;27671:805;;;;27502:974;;;;;:::o;39977:198::-;40043:16;40072:22;40111:1;40097:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;40072:41;;40135:7;40124:5;40130:1;40124:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;40162:5;40155:12;;;39977:198;;;:::o;37000:221::-;;;;;;;:::o;38176:220::-;;;;;;;:::o;38404:744::-;38619:15;:2;:13;;;:15::i;:::-;38615:526;;;38672:2;38655:38;;;38694:8;38704:4;38710:2;38714:6;38722:4;38655:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38651:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39003:6;38996:14;;;;;;;;;;;:::i;:::-;;;;;;;;38651:479;;;39052:62;;;;;;;;;;:::i;:::-;;;;;;;;38651:479;38789:43;;;38777:55;;;:8;:55;;;;38773:154;;38857:50;;;;;;;;;;:::i;:::-;;;;;;;;38773:154;38728:214;38615:526;38404:744;;;;;;:::o;39156:813::-;39396:15;:2;:13;;;:15::i;:::-;39392:570;;;39449:2;39432:43;;;39476:8;39486:4;39492:3;39497:7;39506:4;39432:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39428:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39824:6;39817:14;;;;;;;;;;;:::i;:::-;;;;;;;;39428:523;;;39873:62;;;;;;;;;;:::i;:::-;;;;;;;;39428:523;39605:48;;;39593:60;;;:8;:60;;;;39589:159;;39678:50;;;;;;;;;;:::i;:::-;;;;;;;;39589:159;39512:251;39392:570;39156:813;;;;;;:::o;13352:326::-;13412:4;13669:1;13647:7;:19;;;:23;13640:30;;13352:326;;;:::o;7:75:1:-;40:6;73:2;67:9;57:19;;7:75;:::o;88:117::-;197:1;194;187:12;211:117;320:1;317;310:12;334:126;371:7;411:42;404:5;400:54;389:65;;334:126;;;:::o;466:96::-;503:7;532:24;550:5;532:24;:::i;:::-;521:35;;466:96;;;:::o;568:122::-;641:24;659:5;641:24;:::i;:::-;634:5;631:35;621:63;;680:1;677;670:12;621:63;568:122;:::o;696:139::-;742:5;780:6;767:20;758:29;;796:33;823:5;796:33;:::i;:::-;696:139;;;;:::o;841:77::-;878:7;907:5;896:16;;841:77;;;:::o;924:122::-;997:24;1015:5;997:24;:::i;:::-;990:5;987:35;977:63;;1036:1;1033;1026:12;977:63;924:122;:::o;1052:139::-;1098:5;1136:6;1123:20;1114:29;;1152:33;1179:5;1152:33;:::i;:::-;1052:139;;;;:::o;1197:474::-;1265:6;1273;1322:2;1310:9;1301:7;1297:23;1293:32;1290:119;;;1328:79;;:::i;:::-;1290:119;1448:1;1473:53;1518:7;1509:6;1498:9;1494:22;1473:53;:::i;:::-;1463:63;;1419:117;1575:2;1601:53;1646:7;1637:6;1626:9;1622:22;1601:53;:::i;:::-;1591:63;;1546:118;1197:474;;;;;:::o;1677:118::-;1764:24;1782:5;1764:24;:::i;:::-;1759:3;1752:37;1677:118;;:::o;1801:222::-;1894:4;1932:2;1921:9;1917:18;1909:26;;1945:71;2013:1;2002:9;1998:17;1989:6;1945:71;:::i;:::-;1801:222;;;;:::o;2029:149::-;2065:7;2105:66;2098:5;2094:78;2083:89;;2029:149;;;:::o;2184:120::-;2256:23;2273:5;2256:23;:::i;:::-;2249:5;2246:34;2236:62;;2294:1;2291;2284:12;2236:62;2184:120;:::o;2310:137::-;2355:5;2393:6;2380:20;2371:29;;2409:32;2435:5;2409:32;:::i;:::-;2310:137;;;;:::o;2453:327::-;2511:6;2560:2;2548:9;2539:7;2535:23;2531:32;2528:119;;;2566:79;;:::i;:::-;2528:119;2686:1;2711:52;2755:7;2746:6;2735:9;2731:22;2711:52;:::i;:::-;2701:62;;2657:116;2453:327;;;;:::o;2786:90::-;2820:7;2863:5;2856:13;2849:21;2838:32;;2786:90;;;:::o;2882:109::-;2963:21;2978:5;2963:21;:::i;:::-;2958:3;2951:34;2882:109;;:::o;2997:210::-;3084:4;3122:2;3111:9;3107:18;3099:26;;3135:65;3197:1;3186:9;3182:17;3173:6;3135:65;:::i;:::-;2997:210;;;;:::o;3213:99::-;3265:6;3299:5;3293:12;3283:22;;3213:99;;;:::o;3318:169::-;3402:11;3436:6;3431:3;3424:19;3476:4;3471:3;3467:14;3452:29;;3318:169;;;;:::o;3493:246::-;3574:1;3584:113;3598:6;3595:1;3592:13;3584:113;;;3683:1;3678:3;3674:11;3668:18;3664:1;3659:3;3655:11;3648:39;3620:2;3617:1;3613:10;3608:15;;3584:113;;;3731:1;3722:6;3717:3;3713:16;3706:27;3555:184;3493:246;;;:::o;3745:102::-;3786:6;3837:2;3833:7;3828:2;3821:5;3817:14;3813:28;3803:38;;3745:102;;;:::o;3853:377::-;3941:3;3969:39;4002:5;3969:39;:::i;:::-;4024:71;4088:6;4083:3;4024:71;:::i;:::-;4017:78;;4104:65;4162:6;4157:3;4150:4;4143:5;4139:16;4104:65;:::i;:::-;4194:29;4216:6;4194:29;:::i;:::-;4189:3;4185:39;4178:46;;3945:285;3853:377;;;;:::o;4236:313::-;4349:4;4387:2;4376:9;4372:18;4364:26;;4436:9;4430:4;4426:20;4422:1;4411:9;4407:17;4400:47;4464:78;4537:4;4528:6;4464:78;:::i;:::-;4456:86;;4236:313;;;;:::o;4555:329::-;4614:6;4663:2;4651:9;4642:7;4638:23;4634:32;4631:119;;;4669:79;;:::i;:::-;4631:119;4789:1;4814:53;4859:7;4850:6;4839:9;4835:22;4814:53;:::i;:::-;4804:63;;4760:117;4555:329;;;;:::o;4890:619::-;4967:6;4975;4983;5032:2;5020:9;5011:7;5007:23;5003:32;5000:119;;;5038:79;;:::i;:::-;5000:119;5158:1;5183:53;5228:7;5219:6;5208:9;5204:22;5183:53;:::i;:::-;5173:63;;5129:117;5285:2;5311:53;5356:7;5347:6;5336:9;5332:22;5311:53;:::i;:::-;5301:63;;5256:118;5413:2;5439:53;5484:7;5475:6;5464:9;5460:22;5439:53;:::i;:::-;5429:63;;5384:118;4890:619;;;;;:::o;5515:117::-;5624:1;5621;5614:12;5638:180;5686:77;5683:1;5676:88;5783:4;5780:1;5773:15;5807:4;5804:1;5797:15;5824:281;5907:27;5929:4;5907:27;:::i;:::-;5899:6;5895:40;6037:6;6025:10;6022:22;6001:18;5989:10;5986:34;5983:62;5980:88;;;6048:18;;:::i;:::-;5980:88;6088:10;6084:2;6077:22;5867:238;5824:281;;:::o;6111:129::-;6145:6;6172:20;;:::i;:::-;6162:30;;6201:33;6229:4;6221:6;6201:33;:::i;:::-;6111:129;;;:::o;6246:311::-;6323:4;6413:18;6405:6;6402:30;6399:56;;;6435:18;;:::i;:::-;6399:56;6485:4;6477:6;6473:17;6465:25;;6545:4;6539;6535:15;6527:23;;6246:311;;;:::o;6563:117::-;6672:1;6669;6662:12;6703:710;6799:5;6824:81;6840:64;6897:6;6840:64;:::i;:::-;6824:81;:::i;:::-;6815:90;;6925:5;6954:6;6947:5;6940:21;6988:4;6981:5;6977:16;6970:23;;7041:4;7033:6;7029:17;7021:6;7017:30;7070:3;7062:6;7059:15;7056:122;;;7089:79;;:::i;:::-;7056:122;7204:6;7187:220;7221:6;7216:3;7213:15;7187:220;;;7296:3;7325:37;7358:3;7346:10;7325:37;:::i;:::-;7320:3;7313:50;7392:4;7387:3;7383:14;7376:21;;7263:144;7247:4;7242:3;7238:14;7231:21;;7187:220;;;7191:21;6805:608;;6703:710;;;;;:::o;7436:370::-;7507:5;7556:3;7549:4;7541:6;7537:17;7533:27;7523:122;;7564:79;;:::i;:::-;7523:122;7681:6;7668:20;7706:94;7796:3;7788:6;7781:4;7773:6;7769:17;7706:94;:::i;:::-;7697:103;;7513:293;7436:370;;;;:::o;7812:117::-;7921:1;7918;7911:12;7935:307;7996:4;8086:18;8078:6;8075:30;8072:56;;;8108:18;;:::i;:::-;8072:56;8146:29;8168:6;8146:29;:::i;:::-;8138:37;;8230:4;8224;8220:15;8212:23;;7935:307;;;:::o;8248:146::-;8345:6;8340:3;8335;8322:30;8386:1;8377:6;8372:3;8368:16;8361:27;8248:146;;;:::o;8400:423::-;8477:5;8502:65;8518:48;8559:6;8518:48;:::i;:::-;8502:65;:::i;:::-;8493:74;;8590:6;8583:5;8576:21;8628:4;8621:5;8617:16;8666:3;8657:6;8652:3;8648:16;8645:25;8642:112;;;8673:79;;:::i;:::-;8642:112;8763:54;8810:6;8805:3;8800;8763:54;:::i;:::-;8483:340;8400:423;;;;;:::o;8842:338::-;8897:5;8946:3;8939:4;8931:6;8927:17;8923:27;8913:122;;8954:79;;:::i;:::-;8913:122;9071:6;9058:20;9096:78;9170:3;9162:6;9155:4;9147:6;9143:17;9096:78;:::i;:::-;9087:87;;8903:277;8842:338;;;;:::o;9186:1509::-;9340:6;9348;9356;9364;9372;9421:3;9409:9;9400:7;9396:23;9392:33;9389:120;;;9428:79;;:::i;:::-;9389:120;9548:1;9573:53;9618:7;9609:6;9598:9;9594:22;9573:53;:::i;:::-;9563:63;;9519:117;9675:2;9701:53;9746:7;9737:6;9726:9;9722:22;9701:53;:::i;:::-;9691:63;;9646:118;9831:2;9820:9;9816:18;9803:32;9862:18;9854:6;9851:30;9848:117;;;9884:79;;:::i;:::-;9848:117;9989:78;10059:7;10050:6;10039:9;10035:22;9989:78;:::i;:::-;9979:88;;9774:303;10144:2;10133:9;10129:18;10116:32;10175:18;10167:6;10164:30;10161:117;;;10197:79;;:::i;:::-;10161:117;10302:78;10372:7;10363:6;10352:9;10348:22;10302:78;:::i;:::-;10292:88;;10087:303;10457:3;10446:9;10442:19;10429:33;10489:18;10481:6;10478:30;10475:117;;;10511:79;;:::i;:::-;10475:117;10616:62;10670:7;10661:6;10650:9;10646:22;10616:62;:::i;:::-;10606:72;;10400:288;9186:1509;;;;;;;;:::o;10701:311::-;10778:4;10868:18;10860:6;10857:30;10854:56;;;10890:18;;:::i;:::-;10854:56;10940:4;10932:6;10928:17;10920:25;;11000:4;10994;10990:15;10982:23;;10701:311;;;:::o;11035:710::-;11131:5;11156:81;11172:64;11229:6;11172:64;:::i;:::-;11156:81;:::i;:::-;11147:90;;11257:5;11286:6;11279:5;11272:21;11320:4;11313:5;11309:16;11302:23;;11373:4;11365:6;11361:17;11353:6;11349:30;11402:3;11394:6;11391:15;11388:122;;;11421:79;;:::i;:::-;11388:122;11536:6;11519:220;11553:6;11548:3;11545:15;11519:220;;;11628:3;11657:37;11690:3;11678:10;11657:37;:::i;:::-;11652:3;11645:50;11724:4;11719:3;11715:14;11708:21;;11595:144;11579:4;11574:3;11570:14;11563:21;;11519:220;;;11523:21;11137:608;;11035:710;;;;;:::o;11768:370::-;11839:5;11888:3;11881:4;11873:6;11869:17;11865:27;11855:122;;11896:79;;:::i;:::-;11855:122;12013:6;12000:20;12038:94;12128:3;12120:6;12113:4;12105:6;12101:17;12038:94;:::i;:::-;12029:103;;11845:293;11768:370;;;;:::o;12144:894::-;12262:6;12270;12319:2;12307:9;12298:7;12294:23;12290:32;12287:119;;;12325:79;;:::i;:::-;12287:119;12473:1;12462:9;12458:17;12445:31;12503:18;12495:6;12492:30;12489:117;;;12525:79;;:::i;:::-;12489:117;12630:78;12700:7;12691:6;12680:9;12676:22;12630:78;:::i;:::-;12620:88;;12416:302;12785:2;12774:9;12770:18;12757:32;12816:18;12808:6;12805:30;12802:117;;;12838:79;;:::i;:::-;12802:117;12943:78;13013:7;13004:6;12993:9;12989:22;12943:78;:::i;:::-;12933:88;;12728:303;12144:894;;;;;:::o;13044:114::-;13111:6;13145:5;13139:12;13129:22;;13044:114;;;:::o;13164:184::-;13263:11;13297:6;13292:3;13285:19;13337:4;13332:3;13328:14;13313:29;;13164:184;;;;:::o;13354:132::-;13421:4;13444:3;13436:11;;13474:4;13469:3;13465:14;13457:22;;13354:132;;;:::o;13492:108::-;13569:24;13587:5;13569:24;:::i;:::-;13564:3;13557:37;13492:108;;:::o;13606:179::-;13675:10;13696:46;13738:3;13730:6;13696:46;:::i;:::-;13774:4;13769:3;13765:14;13751:28;;13606:179;;;;:::o;13791:113::-;13861:4;13893;13888:3;13884:14;13876:22;;13791:113;;;:::o;13940:732::-;14059:3;14088:54;14136:5;14088:54;:::i;:::-;14158:86;14237:6;14232:3;14158:86;:::i;:::-;14151:93;;14268:56;14318:5;14268:56;:::i;:::-;14347:7;14378:1;14363:284;14388:6;14385:1;14382:13;14363:284;;;14464:6;14458:13;14491:63;14550:3;14535:13;14491:63;:::i;:::-;14484:70;;14577:60;14630:6;14577:60;:::i;:::-;14567:70;;14423:224;14410:1;14407;14403:9;14398:14;;14363:284;;;14367:14;14663:3;14656:10;;14064:608;;;13940:732;;;;:::o;14678:373::-;14821:4;14859:2;14848:9;14844:18;14836:26;;14908:9;14902:4;14898:20;14894:1;14883:9;14879:17;14872:47;14936:108;15039:4;15030:6;14936:108;:::i;:::-;14928:116;;14678:373;;;;:::o;15057:308::-;15119:4;15209:18;15201:6;15198:30;15195:56;;;15231:18;;:::i;:::-;15195:56;15269:29;15291:6;15269:29;:::i;:::-;15261:37;;15353:4;15347;15343:15;15335:23;;15057:308;;;:::o;15371:425::-;15449:5;15474:66;15490:49;15532:6;15490:49;:::i;:::-;15474:66;:::i;:::-;15465:75;;15563:6;15556:5;15549:21;15601:4;15594:5;15590:16;15639:3;15630:6;15625:3;15621:16;15618:25;15615:112;;;15646:79;;:::i;:::-;15615:112;15736:54;15783:6;15778:3;15773;15736:54;:::i;:::-;15455:341;15371:425;;;;;:::o;15816:340::-;15872:5;15921:3;15914:4;15906:6;15902:17;15898:27;15888:122;;15929:79;;:::i;:::-;15888:122;16046:6;16033:20;16071:79;16146:3;16138:6;16131:4;16123:6;16119:17;16071:79;:::i;:::-;16062:88;;15878:278;15816:340;;;;:::o;16162:654::-;16240:6;16248;16297:2;16285:9;16276:7;16272:23;16268:32;16265:119;;;16303:79;;:::i;:::-;16265:119;16423:1;16448:53;16493:7;16484:6;16473:9;16469:22;16448:53;:::i;:::-;16438:63;;16394:117;16578:2;16567:9;16563:18;16550:32;16609:18;16601:6;16598:30;16595:117;;;16631:79;;:::i;:::-;16595:117;16736:63;16791:7;16782:6;16771:9;16767:22;16736:63;:::i;:::-;16726:73;;16521:288;16162:654;;;;;:::o;16822:118::-;16909:24;16927:5;16909:24;:::i;:::-;16904:3;16897:37;16822:118;;:::o;16946:222::-;17039:4;17077:2;17066:9;17062:18;17054:26;;17090:71;17158:1;17147:9;17143:17;17134:6;17090:71;:::i;:::-;16946:222;;;;:::o;17174:116::-;17244:21;17259:5;17244:21;:::i;:::-;17237:5;17234:32;17224:60;;17280:1;17277;17270:12;17224:60;17174:116;:::o;17296:133::-;17339:5;17377:6;17364:20;17355:29;;17393:30;17417:5;17393:30;:::i;:::-;17296:133;;;;:::o;17435:468::-;17500:6;17508;17557:2;17545:9;17536:7;17532:23;17528:32;17525:119;;;17563:79;;:::i;:::-;17525:119;17683:1;17708:53;17753:7;17744:6;17733:9;17729:22;17708:53;:::i;:::-;17698:63;;17654:117;17810:2;17836:50;17878:7;17869:6;17858:9;17854:22;17836:50;:::i;:::-;17826:60;;17781:115;17435:468;;;;;:::o;17909:329::-;17968:6;18017:2;18005:9;17996:7;17992:23;17988:32;17985:119;;;18023:79;;:::i;:::-;17985:119;18143:1;18168:53;18213:7;18204:6;18193:9;18189:22;18168:53;:::i;:::-;18158:63;;18114:117;17909:329;;;;:::o;18244:1039::-;18371:6;18379;18387;18436:2;18424:9;18415:7;18411:23;18407:32;18404:119;;;18442:79;;:::i;:::-;18404:119;18562:1;18587:53;18632:7;18623:6;18612:9;18608:22;18587:53;:::i;:::-;18577:63;;18533:117;18717:2;18706:9;18702:18;18689:32;18748:18;18740:6;18737:30;18734:117;;;18770:79;;:::i;:::-;18734:117;18875:78;18945:7;18936:6;18925:9;18921:22;18875:78;:::i;:::-;18865:88;;18660:303;19030:2;19019:9;19015:18;19002:32;19061:18;19053:6;19050:30;19047:117;;;19083:79;;:::i;:::-;19047:117;19188:78;19258:7;19249:6;19238:9;19234:22;19188:78;:::i;:::-;19178:88;;18973:303;18244:1039;;;;;:::o;19289:474::-;19357:6;19365;19414:2;19402:9;19393:7;19389:23;19385:32;19382:119;;;19420:79;;:::i;:::-;19382:119;19540:1;19565:53;19610:7;19601:6;19590:9;19586:22;19565:53;:::i;:::-;19555:63;;19511:117;19667:2;19693:53;19738:7;19729:6;19718:9;19714:22;19693:53;:::i;:::-;19683:63;;19638:118;19289:474;;;;;:::o;19769:1089::-;19873:6;19881;19889;19897;19905;19954:3;19942:9;19933:7;19929:23;19925:33;19922:120;;;19961:79;;:::i;:::-;19922:120;20081:1;20106:53;20151:7;20142:6;20131:9;20127:22;20106:53;:::i;:::-;20096:63;;20052:117;20208:2;20234:53;20279:7;20270:6;20259:9;20255:22;20234:53;:::i;:::-;20224:63;;20179:118;20336:2;20362:53;20407:7;20398:6;20387:9;20383:22;20362:53;:::i;:::-;20352:63;;20307:118;20464:2;20490:53;20535:7;20526:6;20515:9;20511:22;20490:53;:::i;:::-;20480:63;;20435:118;20620:3;20609:9;20605:19;20592:33;20652:18;20644:6;20641:30;20638:117;;;20674:79;;:::i;:::-;20638:117;20779:62;20833:7;20824:6;20813:9;20809:22;20779:62;:::i;:::-;20769:72;;20563:288;19769:1089;;;;;;;;:::o;20864:229::-;21004:34;21000:1;20992:6;20988:14;20981:58;21073:12;21068:2;21060:6;21056:15;21049:37;20864:229;:::o;21099:366::-;21241:3;21262:67;21326:2;21321:3;21262:67;:::i;:::-;21255:74;;21338:93;21427:3;21338:93;:::i;:::-;21456:2;21451:3;21447:12;21440:19;;21099:366;;;:::o;21471:419::-;21637:4;21675:2;21664:9;21660:18;21652:26;;21724:9;21718:4;21714:20;21710:1;21699:9;21695:17;21688:47;21752:131;21878:4;21752:131;:::i;:::-;21744:139;;21471:419;;;:::o;21896:180::-;21944:77;21941:1;21934:88;22041:4;22038:1;22031:15;22065:4;22062:1;22055:15;22082:320;22126:6;22163:1;22157:4;22153:12;22143:22;;22210:1;22204:4;22200:12;22231:18;22221:81;;22287:4;22279:6;22275:17;22265:27;;22221:81;22349:2;22341:6;22338:14;22318:18;22315:38;22312:84;;22368:18;;:::i;:::-;22312:84;22133:269;22082:320;;;:::o;22408:182::-;22548:34;22544:1;22536:6;22532:14;22525:58;22408:182;:::o;22596:366::-;22738:3;22759:67;22823:2;22818:3;22759:67;:::i;:::-;22752:74;;22835:93;22924:3;22835:93;:::i;:::-;22953:2;22948:3;22944:12;22937:19;;22596:366;;;:::o;22968:419::-;23134:4;23172:2;23161:9;23157:18;23149:26;;23221:9;23215:4;23211:20;23207:1;23196:9;23192:17;23185:47;23249:131;23375:4;23249:131;:::i;:::-;23241:139;;22968:419;;;:::o;23393:233::-;23533:34;23529:1;23521:6;23517:14;23510:58;23602:16;23597:2;23589:6;23585:15;23578:41;23393:233;:::o;23632:366::-;23774:3;23795:67;23859:2;23854:3;23795:67;:::i;:::-;23788:74;;23871:93;23960:3;23871:93;:::i;:::-;23989:2;23984:3;23980:12;23973:19;;23632:366;;;:::o;24004:419::-;24170:4;24208:2;24197:9;24193:18;24185:26;;24257:9;24251:4;24247:20;24243:1;24232:9;24228:17;24221:47;24285:131;24411:4;24285:131;:::i;:::-;24277:139;;24004:419;;;:::o;24429:228::-;24569:34;24565:1;24557:6;24553:14;24546:58;24638:11;24633:2;24625:6;24621:15;24614:36;24429:228;:::o;24663:366::-;24805:3;24826:67;24890:2;24885:3;24826:67;:::i;:::-;24819:74;;24902:93;24991:3;24902:93;:::i;:::-;25020:2;25015:3;25011:12;25004:19;;24663:366;;;:::o;25035:419::-;25201:4;25239:2;25228:9;25224:18;25216:26;;25288:9;25282:4;25278:20;25274:1;25263:9;25259:17;25252:47;25316:131;25442:4;25316:131;:::i;:::-;25308:139;;25035:419;;;:::o;25460:180::-;25508:77;25505:1;25498:88;25605:4;25602:1;25595:15;25629:4;25626:1;25619:15;25646:180;25694:77;25691:1;25684:88;25791:4;25788:1;25781:15;25815:4;25812:1;25805:15;25832:233;25871:3;25894:24;25912:5;25894:24;:::i;:::-;25885:33;;25940:66;25933:5;25930:77;25927:103;;26010:18;;:::i;:::-;25927:103;26057:1;26050:5;26046:13;26039:20;;25832:233;;;:::o;26071:141::-;26120:4;26143:3;26135:11;;26166:3;26163:1;26156:14;26200:4;26197:1;26187:18;26179:26;;26071:141;;;:::o;26218:93::-;26255:6;26302:2;26297;26290:5;26286:14;26282:23;26272:33;;26218:93;;;:::o;26317:107::-;26361:8;26411:5;26405:4;26401:16;26380:37;;26317:107;;;;:::o;26430:393::-;26499:6;26549:1;26537:10;26533:18;26572:97;26602:66;26591:9;26572:97;:::i;:::-;26690:39;26720:8;26709:9;26690:39;:::i;:::-;26678:51;;26762:4;26758:9;26751:5;26747:21;26738:30;;26811:4;26801:8;26797:19;26790:5;26787:30;26777:40;;26506:317;;26430:393;;;;;:::o;26829:60::-;26857:3;26878:5;26871:12;;26829:60;;;:::o;26895:142::-;26945:9;26978:53;26996:34;27005:24;27023:5;27005:24;:::i;:::-;26996:34;:::i;:::-;26978:53;:::i;:::-;26965:66;;26895:142;;;:::o;27043:75::-;27086:3;27107:5;27100:12;;27043:75;;;:::o;27124:269::-;27234:39;27265:7;27234:39;:::i;:::-;27295:91;27344:41;27368:16;27344:41;:::i;:::-;27336:6;27329:4;27323:11;27295:91;:::i;:::-;27289:4;27282:105;27200:193;27124:269;;;:::o;27399:73::-;27444:3;27399:73;:::o;27478:189::-;27555:32;;:::i;:::-;27596:65;27654:6;27646;27640:4;27596:65;:::i;:::-;27531:136;27478:189;;:::o;27673:186::-;27733:120;27750:3;27743:5;27740:14;27733:120;;;27804:39;27841:1;27834:5;27804:39;:::i;:::-;27777:1;27770:5;27766:13;27757:22;;27733:120;;;27673:186;;:::o;27865:543::-;27966:2;27961:3;27958:11;27955:446;;;28000:38;28032:5;28000:38;:::i;:::-;28084:29;28102:10;28084:29;:::i;:::-;28074:8;28070:44;28267:2;28255:10;28252:18;28249:49;;;28288:8;28273:23;;28249:49;28311:80;28367:22;28385:3;28367:22;:::i;:::-;28357:8;28353:37;28340:11;28311:80;:::i;:::-;27970:431;;27955:446;27865:543;;;:::o;28414:117::-;28468:8;28518:5;28512:4;28508:16;28487:37;;28414:117;;;;:::o;28537:169::-;28581:6;28614:51;28662:1;28658:6;28650:5;28647:1;28643:13;28614:51;:::i;:::-;28610:56;28695:4;28689;28685:15;28675:25;;28588:118;28537:169;;;;:::o;28711:295::-;28787:4;28933:29;28958:3;28952:4;28933:29;:::i;:::-;28925:37;;28995:3;28992:1;28988:11;28982:4;28979:21;28971:29;;28711:295;;;;:::o;29011:1395::-;29128:37;29161:3;29128:37;:::i;:::-;29230:18;29222:6;29219:30;29216:56;;;29252:18;;:::i;:::-;29216:56;29296:38;29328:4;29322:11;29296:38;:::i;:::-;29381:67;29441:6;29433;29427:4;29381:67;:::i;:::-;29475:1;29499:4;29486:17;;29531:2;29523:6;29520:14;29548:1;29543:618;;;;30205:1;30222:6;30219:77;;;30271:9;30266:3;30262:19;30256:26;30247:35;;30219:77;30322:67;30382:6;30375:5;30322:67;:::i;:::-;30316:4;30309:81;30178:222;29513:887;;29543:618;29595:4;29591:9;29583:6;29579:22;29629:37;29661:4;29629:37;:::i;:::-;29688:1;29702:208;29716:7;29713:1;29710:14;29702:208;;;29795:9;29790:3;29786:19;29780:26;29772:6;29765:42;29846:1;29838:6;29834:14;29824:24;;29893:2;29882:9;29878:18;29865:31;;29739:4;29736:1;29732:12;29727:17;;29702:208;;;29938:6;29929:7;29926:19;29923:179;;;29996:9;29991:3;29987:19;29981:26;30039:48;30081:4;30073:6;30069:17;30058:9;30039:48;:::i;:::-;30031:6;30024:64;29946:156;29923:179;30148:1;30144;30136:6;30132:14;30128:22;30122:4;30115:36;29550:611;;;29513:887;;29103:1303;;;29011:1395;;:::o;30412:225::-;30552:34;30548:1;30540:6;30536:14;30529:58;30621:8;30616:2;30608:6;30604:15;30597:33;30412:225;:::o;30643:366::-;30785:3;30806:67;30870:2;30865:3;30806:67;:::i;:::-;30799:74;;30882:93;30971:3;30882:93;:::i;:::-;31000:2;30995:3;30991:12;30984:19;;30643:366;;;:::o;31015:419::-;31181:4;31219:2;31208:9;31204:18;31196:26;;31268:9;31262:4;31258:20;31254:1;31243:9;31239:17;31232:47;31296:131;31422:4;31296:131;:::i;:::-;31288:139;;31015:419;;;:::o;31440:220::-;31580:34;31576:1;31568:6;31564:14;31557:58;31649:3;31644:2;31636:6;31632:15;31625:28;31440:220;:::o;31666:366::-;31808:3;31829:67;31893:2;31888:3;31829:67;:::i;:::-;31822:74;;31905:93;31994:3;31905:93;:::i;:::-;32023:2;32018:3;32014:12;32007:19;;31666:366;;;:::o;32038:419::-;32204:4;32242:2;32231:9;32227:18;32219:26;;32291:9;32285:4;32281:20;32277:1;32266:9;32262:17;32255:47;32319:131;32445:4;32319:131;:::i;:::-;32311:139;;32038:419;;;:::o;32463:191::-;32503:3;32522:20;32540:1;32522:20;:::i;:::-;32517:25;;32556:20;32574:1;32556:20;:::i;:::-;32551:25;;32599:1;32596;32592:9;32585:16;;32620:3;32617:1;32614:10;32611:36;;;32627:18;;:::i;:::-;32611:36;32463:191;;;;:::o;32660:332::-;32781:4;32819:2;32808:9;32804:18;32796:26;;32832:71;32900:1;32889:9;32885:17;32876:6;32832:71;:::i;:::-;32913:72;32981:2;32970:9;32966:18;32957:6;32913:72;:::i;:::-;32660:332;;;;;:::o;32998:227::-;33138:34;33134:1;33126:6;33122:14;33115:58;33207:10;33202:2;33194:6;33190:15;33183:35;32998:227;:::o;33231:366::-;33373:3;33394:67;33458:2;33453:3;33394:67;:::i;:::-;33387:74;;33470:93;33559:3;33470:93;:::i;:::-;33588:2;33583:3;33579:12;33572:19;;33231:366;;;:::o;33603:419::-;33769:4;33807:2;33796:9;33792:18;33784:26;;33856:9;33850:4;33846:20;33842:1;33831:9;33827:17;33820:47;33884:131;34010:4;33884:131;:::i;:::-;33876:139;;33603:419;;;:::o;34028:224::-;34168:34;34164:1;34156:6;34152:14;34145:58;34237:7;34232:2;34224:6;34220:15;34213:32;34028:224;:::o;34258:366::-;34400:3;34421:67;34485:2;34480:3;34421:67;:::i;:::-;34414:74;;34497:93;34586:3;34497:93;:::i;:::-;34615:2;34610:3;34606:12;34599:19;;34258:366;;;:::o;34630:419::-;34796:4;34834:2;34823:9;34819:18;34811:26;;34883:9;34877:4;34873:20;34869:1;34858:9;34854:17;34847:47;34911:131;35037:4;34911:131;:::i;:::-;34903:139;;34630:419;;;:::o;35055:229::-;35195:34;35191:1;35183:6;35179:14;35172:58;35264:12;35259:2;35251:6;35247:15;35240:37;35055:229;:::o;35290:366::-;35432:3;35453:67;35517:2;35512:3;35453:67;:::i;:::-;35446:74;;35529:93;35618:3;35529:93;:::i;:::-;35647:2;35642:3;35638:12;35631:19;;35290:366;;;:::o;35662:419::-;35828:4;35866:2;35855:9;35851:18;35843:26;;35915:9;35909:4;35905:20;35901:1;35890:9;35886:17;35879:47;35943:131;36069:4;35943:131;:::i;:::-;35935:139;;35662:419;;;:::o;36087:634::-;36308:4;36346:2;36335:9;36331:18;36323:26;;36395:9;36389:4;36385:20;36381:1;36370:9;36366:17;36359:47;36423:108;36526:4;36517:6;36423:108;:::i;:::-;36415:116;;36578:9;36572:4;36568:20;36563:2;36552:9;36548:18;36541:48;36606:108;36709:4;36700:6;36606:108;:::i;:::-;36598:116;;36087:634;;;;;:::o;36727:182::-;36867:34;36863:1;36855:6;36851:14;36844:58;36727:182;:::o;36915:366::-;37057:3;37078:67;37142:2;37137:3;37078:67;:::i;:::-;37071:74;;37154:93;37243:3;37154:93;:::i;:::-;37272:2;37267:3;37263:12;37256:19;;36915:366;;;:::o;37287:419::-;37453:4;37491:2;37480:9;37476:18;37468:26;;37540:9;37534:4;37530:20;37526:1;37515:9;37511:17;37504:47;37568:131;37694:4;37568:131;:::i;:::-;37560:139;;37287:419;;;:::o;37712:228::-;37852:34;37848:1;37840:6;37836:14;37829:58;37921:11;37916:2;37908:6;37904:15;37897:36;37712:228;:::o;37946:366::-;38088:3;38109:67;38173:2;38168:3;38109:67;:::i;:::-;38102:74;;38185:93;38274:3;38185:93;:::i;:::-;38303:2;38298:3;38294:12;38287:19;;37946:366;;;:::o;38318:419::-;38484:4;38522:2;38511:9;38507:18;38499:26;;38571:9;38565:4;38561:20;38557:1;38546:9;38542:17;38535:47;38599:131;38725:4;38599:131;:::i;:::-;38591:139;;38318:419;;;:::o;38743:98::-;38794:6;38828:5;38822:12;38812:22;;38743:98;;;:::o;38847:168::-;38930:11;38964:6;38959:3;38952:19;39004:4;38999:3;38995:14;38980:29;;38847:168;;;;:::o;39021:373::-;39107:3;39135:38;39167:5;39135:38;:::i;:::-;39189:70;39252:6;39247:3;39189:70;:::i;:::-;39182:77;;39268:65;39326:6;39321:3;39314:4;39307:5;39303:16;39268:65;:::i;:::-;39358:29;39380:6;39358:29;:::i;:::-;39353:3;39349:39;39342:46;;39111:283;39021:373;;;;:::o;39400:751::-;39623:4;39661:3;39650:9;39646:19;39638:27;;39675:71;39743:1;39732:9;39728:17;39719:6;39675:71;:::i;:::-;39756:72;39824:2;39813:9;39809:18;39800:6;39756:72;:::i;:::-;39838;39906:2;39895:9;39891:18;39882:6;39838:72;:::i;:::-;39920;39988:2;39977:9;39973:18;39964:6;39920:72;:::i;:::-;40040:9;40034:4;40030:20;40024:3;40013:9;40009:19;40002:49;40068:76;40139:4;40130:6;40068:76;:::i;:::-;40060:84;;39400:751;;;;;;;;:::o;40157:141::-;40213:5;40244:6;40238:13;40229:22;;40260:32;40286:5;40260:32;:::i;:::-;40157:141;;;;:::o;40304:349::-;40373:6;40422:2;40410:9;40401:7;40397:23;40393:32;40390:119;;;40428:79;;:::i;:::-;40390:119;40548:1;40573:63;40628:7;40619:6;40608:9;40604:22;40573:63;:::i;:::-;40563:73;;40519:127;40304:349;;;;:::o;40659:106::-;40703:8;40752:5;40747:3;40743:15;40722:36;;40659:106;;;:::o;40771:183::-;40806:3;40844:1;40826:16;40823:23;40820:128;;;40882:1;40879;40876;40861:23;40904:34;40935:1;40929:8;40904:34;:::i;:::-;40897:41;;40820:128;40771:183;:::o;40960:711::-;40999:3;41037:4;41019:16;41016:26;41045:5;41013:39;41074:20;;:::i;:::-;41149:1;41131:16;41127:24;41124:1;41118:4;41103:49;41182:4;41176:11;41281:16;41274:4;41266:6;41262:17;41259:39;41226:18;41218:6;41215:30;41199:113;41196:146;;;41327:5;;;;41196:146;41373:6;41367:4;41363:17;41409:3;41403:10;41436:18;41428:6;41425:30;41422:43;;;41458:5;;;;;;41422:43;41506:6;41499:4;41494:3;41490:14;41486:27;41565:1;41547:16;41543:24;41537:4;41533:35;41528:3;41525:44;41522:57;;;41572:5;;;;;;;41522:57;41589;41637:6;41631:4;41627:17;41619:6;41615:30;41609:4;41589:57;:::i;:::-;41662:3;41655:10;;41003:668;;;;;40960:711;;:::o;41677:239::-;41817:34;41813:1;41805:6;41801:14;41794:58;41886:22;41881:2;41873:6;41869:15;41862:47;41677:239;:::o;41922:366::-;42064:3;42085:67;42149:2;42144:3;42085:67;:::i;:::-;42078:74;;42161:93;42250:3;42161:93;:::i;:::-;42279:2;42274:3;42270:12;42263:19;;41922:366;;;:::o;42294:419::-;42460:4;42498:2;42487:9;42483:18;42475:26;;42547:9;42541:4;42537:20;42533:1;42522:9;42518:17;42511:47;42575:131;42701:4;42575:131;:::i;:::-;42567:139;;42294:419;;;:::o;42719:227::-;42859:34;42855:1;42847:6;42843:14;42836:58;42928:10;42923:2;42915:6;42911:15;42904:35;42719:227;:::o;42952:366::-;43094:3;43115:67;43179:2;43174:3;43115:67;:::i;:::-;43108:74;;43191:93;43280:3;43191:93;:::i;:::-;43309:2;43304:3;43300:12;43293:19;;42952:366;;;:::o;43324:419::-;43490:4;43528:2;43517:9;43513:18;43505:26;;43577:9;43571:4;43567:20;43563:1;43552:9;43548:17;43541:47;43605:131;43731:4;43605:131;:::i;:::-;43597:139;;43324:419;;;:::o;43749:1053::-;44072:4;44110:3;44099:9;44095:19;44087:27;;44124:71;44192:1;44181:9;44177:17;44168:6;44124:71;:::i;:::-;44205:72;44273:2;44262:9;44258:18;44249:6;44205:72;:::i;:::-;44324:9;44318:4;44314:20;44309:2;44298:9;44294:18;44287:48;44352:108;44455:4;44446:6;44352:108;:::i;:::-;44344:116;;44507:9;44501:4;44497:20;44492:2;44481:9;44477:18;44470:48;44535:108;44638:4;44629:6;44535:108;:::i;:::-;44527:116;;44691:9;44685:4;44681:20;44675:3;44664:9;44660:19;44653:49;44719:76;44790:4;44781:6;44719:76;:::i;:::-;44711:84;;43749:1053;;;;;;;;:::o
Swarm Source
ipfs://31af75018e81dd417ed5af40f3c52743d1c735d49d1cd2d599d79154760371f9
Loading...
Loading
Loading...
Loading
[ Download: CSV Export ]
[ Download: CSV Export ]
A token is a representation of an on-chain or off-chain asset. The token page shows information such as price, total supply, holders, transfers and social links. Learn more about this page in our Knowledge Base.