Polygon Sponsored slots available. Book your slot here!
ERC-1155
Overview
Max Total Supply
0 EGL
Holders
156,338
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
Contract Name:
Eigen
Compiler Version
v0.8.18+commit.87f61d96
Contract Source Code (Solidity)
/** *Submitted for verification at polygonscan.com on 2023-07-19 */ // File: @openzeppelin/contracts/utils/Context.sol // OpenZeppelin Contracts v4.4.1 (utils/Context.sol) pragma solidity ^0.8.0; /** * @dev Provides information about the current execution context, including the * sender of the transaction and its data. While these are generally available * via msg.sender and msg.data, they should not be accessed in such a direct * manner, since when dealing with meta-transactions the account sending and * paying for execution may not be the actual sender (as far as an application * is concerned). * * This contract is only required for intermediate, library-like contracts. */ abstract contract Context { function _msgSender() internal view virtual returns (address) { return msg.sender; } function _msgData() internal view virtual returns (bytes calldata) { return msg.data; } } // File: @openzeppelin/contracts/access/Ownable.sol // OpenZeppelin Contracts (last updated v4.9.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. Can only be called by the current owner. * * NOTE: Renouncing ownership will leave the contract without an owner, * thereby disabling any functionality that is only available to the owner. */ function renounceOwnership() public virtual onlyOwner { _transferOwnership(address(0)); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Can only be called by the current owner. */ function transferOwnership(address newOwner) public virtual onlyOwner { require(newOwner != address(0), "Ownable: new owner is the zero address"); _transferOwnership(newOwner); } /** * @dev Transfers ownership of the contract to a new account (`newOwner`). * Internal function without access restriction. */ function _transferOwnership(address newOwner) internal virtual { address oldOwner = _owner; _owner = newOwner; emit OwnershipTransferred(oldOwner, newOwner); } } // File: @openzeppelin/contracts/utils/Address.sol // OpenZeppelin Contracts (last updated v4.9.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 * * Furthermore, `isContract` will also return true if the target contract within * the same transaction is already scheduled for destruction by `SELFDESTRUCT`, * which only has an effect at the end of a transaction. * ==== * * [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://consensys.net/diligence/blog/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.8.0/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/IERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/IERC165.sol) pragma solidity ^0.8.0; /** * @dev Interface of the ERC165 standard, as defined in the * https://eips.ethereum.org/EIPS/eip-165[EIP]. * * Implementers can declare support of contract interfaces, which can then be * queried by others ({ERC165Checker}). * * For an implementation, see {ERC165}. */ interface IERC165 { /** * @dev Returns true if this contract implements the interface defined by * `interfaceId`. See the corresponding * https://eips.ethereum.org/EIPS/eip-165#how-interfaces-are-identified[EIP section] * to learn more about how these ids are created. * * This function call must use less than 30 000 gas. */ function supportsInterface(bytes4 interfaceId) external view returns (bool); } // File: @openzeppelin/contracts/utils/introspection/ERC165.sol // OpenZeppelin Contracts v4.4.1 (utils/introspection/ERC165.sol) pragma solidity ^0.8.0; /** * @dev Implementation of the {IERC165} interface. * * Contracts that want to implement ERC165 should inherit from this contract and override {supportsInterface} to check * for the additional interface id that will be supported. For example: * * ```solidity * function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { * return interfaceId == type(MyInterface).interfaceId || super.supportsInterface(interfaceId); * } * ``` * * Alternatively, {ERC165Storage} provides an easier to use but more expensive implementation. */ abstract contract ERC165 is IERC165 { /** * @dev See {IERC165-supportsInterface}. */ function supportsInterface(bytes4 interfaceId) public view virtual override returns (bool) { return interfaceId == type(IERC165).interfaceId; } } // File: @openzeppelin/contracts/token/ERC1155/IERC1155Receiver.sol // OpenZeppelin Contracts (last updated v4.5.0) (token/ERC1155/IERC1155Receiver.sol) pragma solidity ^0.8.0; /** * @dev _Available since v3.1._ */ interface IERC1155Receiver is IERC165 { /** * @dev Handles the receipt of a single ERC1155 token type. This function is * called at the end of a `safeTransferFrom` after the balance has been updated. * * NOTE: To accept the transfer, this must return * `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` * (i.e. 0xf23a6e61, or its own function selector). * * @param operator The address which initiated the transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param id The ID of the token being transferred * @param value The amount of tokens being transferred * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155Received(address,address,uint256,uint256,bytes)"))` if transfer is allowed */ function onERC1155Received( address operator, address from, uint256 id, uint256 value, bytes calldata data ) external returns (bytes4); /** * @dev Handles the receipt of a multiple ERC1155 token types. This function * is called at the end of a `safeBatchTransferFrom` after the balances have * been updated. * * NOTE: To accept the transfer(s), this must return * `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` * (i.e. 0xbc197c81, or its own function selector). * * @param operator The address which initiated the batch transfer (i.e. msg.sender) * @param from The address which previously owned the token * @param ids An array containing ids of each token being transferred (order and length must match values array) * @param values An array containing amounts of each token being transferred (order and length must match ids array) * @param data Additional data with no specified format * @return `bytes4(keccak256("onERC1155BatchReceived(address,address,uint256[],uint256[],bytes)"))` if transfer is allowed */ function onERC1155BatchReceived( address operator, address from, uint256[] calldata ids, uint256[] calldata values, bytes calldata data ) external returns (bytes4); } // File: @openzeppelin/contracts/token/ERC1155/IERC1155.sol // OpenZeppelin Contracts (last updated v4.9.0) (token/ERC1155/IERC1155.sol) pragma solidity ^0.8.0; /** * @dev Required interface of an ERC1155 compliant contract, as defined in the * https://eips.ethereum.org/EIPS/eip-1155[EIP]. * * _Available since v3.1._ */ interface IERC1155 is IERC165 { /** * @dev Emitted when `value` tokens of token type `id` are transferred from `from` to `to` by `operator`. */ event TransferSingle(address indexed operator, address indexed from, address indexed to, uint256 id, uint256 value); /** * @dev Equivalent to multiple {TransferSingle} events, where `operator`, `from` and `to` are the same for all * transfers. */ event TransferBatch( address indexed operator, address indexed from, address indexed to, uint256[] ids, uint256[] values ); /** * @dev Emitted when `account` grants or revokes permission to `operator` to transfer their tokens, according to * `approved`. */ event ApprovalForAll(address indexed account, address indexed operator, bool approved); /** * @dev Emitted when the URI for token type `id` changes to `value`, if it is a non-programmatic URI. * * If an {URI} event was emitted for `id`, the standard * https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[guarantees] that `value` will equal the value * returned by {IERC1155MetadataURI-uri}. */ event URI(string value, uint256 indexed id); /** * @dev Returns the amount of tokens of token type `id` owned by `account`. * * Requirements: * * - `account` cannot be the zero address. */ function balanceOf(address account, uint256 id) external view returns (uint256); /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {balanceOf}. * * Requirements: * * - `accounts` and `ids` must have the same length. */ function balanceOfBatch( address[] calldata accounts, uint256[] calldata ids ) external view returns (uint256[] memory); /** * @dev Grants or revokes permission to `operator` to transfer the caller's tokens, according to `approved`, * * Emits an {ApprovalForAll} event. * * Requirements: * * - `operator` cannot be the caller. */ function setApprovalForAll(address operator, bool approved) external; /** * @dev Returns true if `operator` is approved to transfer ``account``'s tokens. * * See {setApprovalForAll}. */ function isApprovedForAll(address account, address operator) external view returns (bool); /** * @dev Transfers `amount` tokens of token type `id` from `from` to `to`. * * Emits a {TransferSingle} event. * * Requirements: * * - `to` cannot be the zero address. * - If the caller is not `from`, it must have been approved to spend ``from``'s tokens via {setApprovalForAll}. * - `from` must have a balance of tokens of type `id` of at least `amount`. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155Received} and return the * acceptance magic value. */ function safeTransferFrom(address from, address to, uint256 id, uint256 amount, bytes calldata data) external; /** * @dev xref:ROOT:erc1155.adoc#batch-operations[Batched] version of {safeTransferFrom}. * * Emits a {TransferBatch} event. * * Requirements: * * - `ids` and `amounts` must have the same length. * - If `to` refers to a smart contract, it must implement {IERC1155Receiver-onERC1155BatchReceived} and return the * acceptance magic value. */ function safeBatchTransferFrom( address from, address to, uint256[] calldata ids, uint256[] calldata amounts, bytes calldata data ) external; } // File: @openzeppelin/contracts/token/ERC1155/extensions/IERC1155MetadataURI.sol // OpenZeppelin Contracts v4.4.1 (token/ERC1155/extensions/IERC1155MetadataURI.sol) pragma solidity ^0.8.0; /** * @dev Interface of the optional ERC1155MetadataExtension interface, as defined * in the https://eips.ethereum.org/EIPS/eip-1155#metadata-extensions[EIP]. * * _Available since v3.1._ */ interface IERC1155MetadataURI is IERC1155 { /** * @dev Returns the URI for token type `id`. * * If the `\{id\}` substring is present in the URI, it must be replaced by * clients with the actual token type ID. */ function uri(uint256 id) external view returns (string memory); } // File: @openzeppelin/contracts/token/ERC1155/ERC1155.sol // OpenZeppelin Contracts (last updated v4.9.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/ERC1155Supply.sol // OpenZeppelin Contracts (last updated v4.6.0) (token/ERC1155/extensions/ERC1155Supply.sol) pragma solidity ^0.8.0; /** * @dev Extension of ERC1155 that adds tracking of total supply per id. * * Useful for scenarios where Fungible and Non-fungible tokens have to be * clearly identified. Note: While a totalSupply of 1 might mean the * corresponding is an NFT, there is no guarantees that no other token with the * same id are not going to be minted. */ abstract contract ERC1155Supply is ERC1155 { mapping(uint256 => uint256) private _totalSupply; /** * @dev Total amount of tokens in with a given id. */ function totalSupply(uint256 id) public view virtual returns (uint256) { return _totalSupply[id]; } /** * @dev Indicates whether any token exist with a given id, or not. */ function exists(uint256 id) public view virtual returns (bool) { return ERC1155Supply.totalSupply(id) > 0; } /** * @dev See {ERC1155-_beforeTokenTransfer}. */ function _beforeTokenTransfer( address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data ) internal virtual override { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); if (from == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { _totalSupply[ids[i]] += amounts[i]; } } if (to == address(0)) { for (uint256 i = 0; i < ids.length; ++i) { uint256 id = ids[i]; uint256 amount = amounts[i]; uint256 supply = _totalSupply[id]; require(supply >= amount, "ERC1155: burn amount exceeds totalSupply"); unchecked { _totalSupply[id] = supply - amount; } } } } } // File: contracts/tokennft.sol pragma solidity ^0.8.9; contract Eigen is ERC1155, Ownable, ERC1155Supply { string private _baseTokenURI; string public name; string public symbol; constructor(string memory baseTokenURI) ERC1155(baseTokenURI) { name = "EigenLayer"; symbol = "EGL"; _baseTokenURI = baseTokenURI; } function setURI(string memory _newuri) public onlyOwner { _baseTokenURI = _newuri; } function mint(address account, uint256 id, uint256 amount) public onlyOwner { _mint(account, id, amount, ""); } function mintBatch(address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) public onlyOwner { _mintBatch(to, ids, amounts, data); } // The following functions are overrides required by Solidity. function _beforeTokenTransfer(address operator, address from, address to, uint256[] memory ids, uint256[] memory amounts, bytes memory data) internal override(ERC1155, ERC1155Supply) { super._beforeTokenTransfer(operator, from, to, ids, amounts, data); } function airdrop(address[] memory recipients) public onlyOwner { for (uint256 i = 0; i < recipients.length; i++) { if(!isContract(recipients[i])){ _mint(recipients[i], 0, 1, ""); } } } function isContract(address _addr) internal view returns (bool) { return Address.isContract(_addr); } function uri(uint256 tokenId) public view override returns (string memory) { return string(abi.encodePacked(_baseTokenURI)); } }
Contract Security Audit
- No Contract Security Audit Submitted- Submit Audit Here
[{"inputs":[{"internalType":"string","name":"baseTokenURI","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":"recipients","type":"address[]"}],"name":"airdrop","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","type":"uint256"}],"name":"balanceOf","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address[]","name":"accounts","type":"address[]"},{"internalType":"uint256[]","name":"ids","type":"uint256[]"}],"name":"balanceOfBatch","outputs":[{"internalType":"uint256[]","name":"","type":"uint256[]"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"exists","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"address","name":"operator","type":"address"}],"name":"isApprovedForAll","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"account","type":"address"},{"internalType":"uint256","name":"id","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":"ids","type":"uint256[]"},{"internalType":"uint256[]","name":"amounts","type":"uint256[]"},{"internalType":"bytes","name":"data","type":"bytes"}],"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":[],"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":"string","name":"_newuri","type":"string"}],"name":"setURI","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"bytes4","name":"interfaceId","type":"bytes4"}],"name":"supportsInterface","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"symbol","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"id","type":"uint256"}],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newOwner","type":"address"}],"name":"transferOwnership","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"tokenId","type":"uint256"}],"name":"uri","outputs":[{"internalType":"string","name":"","type":"string"}],"stateMutability":"view","type":"function"}]
Contract Creation Code
60806040523480156200001157600080fd5b5060405162003f6b38038062003f6b833981810160405281019062000037919062000387565b8062000049816200011160201b60201c565b506200006a6200005e6200012660201b60201c565b6200012e60201b60201c565b6040518060400160405280600a81526020017f456967656e4c617965720000000000000000000000000000000000000000000081525060069081620000b0919062000623565b506040518060400160405280600381526020017f45474c000000000000000000000000000000000000000000000000000000000081525060079081620000f7919062000623565b50806005908162000109919062000623565b50506200070a565b806002908162000122919062000623565b5050565b600033905090565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b6000604051905090565b600080fd5b600080fd5b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6200025d8262000212565b810181811067ffffffffffffffff821117156200027f576200027e62000223565b5b80604052505050565b600062000294620001f4565b9050620002a2828262000252565b919050565b600067ffffffffffffffff821115620002c557620002c462000223565b5b620002d08262000212565b9050602081019050919050565b60005b83811015620002fd578082015181840152602081019050620002e0565b60008484015250505050565b6000620003206200031a84620002a7565b62000288565b9050828152602081018484840111156200033f576200033e6200020d565b5b6200034c848285620002dd565b509392505050565b600082601f8301126200036c576200036b62000208565b5b81516200037e84826020860162000309565b91505092915050565b600060208284031215620003a0576200039f620001fe565b5b600082015167ffffffffffffffff811115620003c157620003c062000203565b5b620003cf8482850162000354565b91505092915050565b600081519050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b600060028204905060018216806200042b57607f821691505b602082108103620004415762000440620003e3565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302620004ab7fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff826200046c565b620004b786836200046c565b95508019841693508086168417925050509392505050565b6000819050919050565b6000819050919050565b600062000504620004fe620004f884620004cf565b620004d9565b620004cf565b9050919050565b6000819050919050565b6200052083620004e3565b620005386200052f826200050b565b84845462000479565b825550505050565b600090565b6200054f62000540565b6200055c81848462000515565b505050565b5b8181101562000584576200057860008262000545565b60018101905062000562565b5050565b601f821115620005d3576200059d8162000447565b620005a8846200045c565b81016020851015620005b8578190505b620005d0620005c7856200045c565b83018262000561565b50505b505050565b600082821c905092915050565b6000620005f860001984600802620005d8565b1980831691505092915050565b6000620006138383620005e5565b9150826002028217905092915050565b6200062e82620003d8565b67ffffffffffffffff8111156200064a576200064962000223565b5b62000656825462000412565b6200066382828562000588565b600060209050601f8311600181146200069b576000841562000686578287015190505b62000692858262000605565b86555062000702565b601f198416620006ab8662000447565b60005b82811015620006d557848901518255600182019150602085019450602081019050620006ae565b86831015620006f55784890151620006f1601f891682620005e5565b8355505b6001600288020188555050505b505050505050565b613851806200071a6000396000f3fe608060405234801561001057600080fd5b50600436106101205760003560e01c80634f558e79116100ad578063a22cb46511610071578063a22cb46514610305578063bd85b03914610321578063e985e9c514610351578063f242432a14610381578063f2fde38b1461039d57610120565b80634f558e7914610273578063715018a6146102a3578063729ad39e146102ad5780638da5cb5b146102c957806395d89b41146102e757610120565b80630e89341c116100f45780630e89341c146101bf578063156e29f6146101ef5780631f7fdffa1461020b5780632eb2c2d6146102275780634e1273f41461024357610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190611f3c565b6103b9565b60405161014c9190611f8b565b60405180910390f35b61016f600480360381019061016a9190611ffe565b610481565b60405161017c9190612046565b60405180910390f35b61019f600480360381019061019a91906121a7565b610563565b005b6101a961057e565b6040516101b6919061226f565b60405180910390f35b6101d960048036038101906101d49190612291565b61060c565b6040516101e6919061226f565b60405180910390f35b610209600480360381019061020491906122be565b610636565b005b6102256004803603810190610220919061247a565b61065e565b005b610241600480360381019061023c9190612535565b610678565b005b61025d600480360381019061025891906126c7565b610719565b60405161026a91906127fd565b60405180910390f35b61028d60048036038101906102889190612291565b610832565b60405161029a9190612046565b60405180910390f35b6102ab610846565b005b6102c760048036038101906102c2919061281f565b61085a565b005b6102d16108e4565b6040516102de9190612877565b60405180910390f35b6102ef61090e565b6040516102fc919061226f565b60405180910390f35b61031f600480360381019061031a91906128be565b61099c565b005b61033b60048036038101906103369190612291565b6109b2565b6040516103489190611f8b565b60405180910390f35b61036b600480360381019061036691906128fe565b6109cf565b6040516103789190612046565b60405180910390f35b61039b6004803603810190610396919061293e565b610a63565b005b6103b760048036038101906103b291906129d5565b610b04565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042090612a74565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054c57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061055c575061055b82610b87565b5b9050919050565b61056b610bf1565b806005908161057a9190612ca0565b5050565b6006805461058b90612ac3565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790612ac3565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b505050505081565b606060056040516020016106209190612e00565b6040516020818303038152906040529050919050565b61063e610bf1565b61065983838360405180602001604052806000815250610c6f565b505050565b610666610bf1565b61067284848484610e1f565b50505050565b61068061104b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106c657506106c5856106c061104b565b6109cf565b5b610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90612e89565b60405180910390fd5b6107128585858585611053565b5050505050565b6060815183511461075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690612f1b565b60405180910390fd5b6000835167ffffffffffffffff81111561077c5761077b61207c565b5b6040519080825280602002602001820160405280156107aa5781602001602082028036833780820191505090505b50905060005b8451811015610827576107f78582815181106107cf576107ce612f3b565b5b60200260200101518583815181106107ea576107e9612f3b565b5b60200260200101516103b9565b82828151811061080a57610809612f3b565b5b6020026020010181815250508061082090612f99565b90506107b0565b508091505092915050565b60008061083e836109b2565b119050919050565b61084e610bf1565b6108586000611374565b565b610862610bf1565b60005b81518110156108e05761089182828151811061088457610883612f3b565b5b602002602001015161143a565b6108cd576108cc8282815181106108ab576108aa612f3b565b5b60200260200101516000600160405180602001604052806000815250610c6f565b5b80806108d890612f99565b915050610865565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007805461091b90612ac3565b80601f016020809104026020016040519081016040528092919081815260200182805461094790612ac3565b80156109945780601f1061096957610100808354040283529160200191610994565b820191906000526020600020905b81548152906001019060200180831161097757829003601f168201915b505050505081565b6109ae6109a761104b565b838361144c565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a6b61104b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ab15750610ab085610aab61104b565b6109cf565b5b610af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae790612e89565b60405180910390fd5b610afd85858585856115b8565b5050505050565b610b0c610bf1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613053565b60405180910390fd5b610b8481611374565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bf961104b565b73ffffffffffffffffffffffffffffffffffffffff16610c176108e4565b73ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c64906130bf565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590613151565b60405180910390fd5b6000610ce861104b565b90506000610cf585611853565b90506000610d0285611853565b9050610d13836000898585896118cd565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d729190613171565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610df09291906131a5565b60405180910390a4610e07836000898585896118e3565b610e16836000898989896118eb565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613151565b60405180910390fd5b8151835114610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613240565b60405180910390fd5b6000610edc61104b565b9050610eed816000878787876118cd565b60005b8451811015610fa657838181518110610f0c57610f0b612f3b565b5b6020026020010151600080878481518110610f2a57610f29612f3b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f8c9190613171565b925050819055508080610f9e90612f99565b915050610ef0565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161101e929190613260565b60405180910390a4611035816000878787876118e3565b61104481600087878787611ac2565b5050505050565b600033905090565b8151835114611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613309565b60405180910390fd5b600061111061104b565b90506111208187878787876118cd565b60005b84518110156112d157600085828151811061114157611140612f3b565b5b6020026020010151905060008583815181106111605761115f612f3b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061339b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112b69190613171565b92505081905550505050806112ca90612f99565b9050611123565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611348929190613260565b60405180910390a461135e8187878787876118e3565b61136c818787878787611ac2565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061144582611c99565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b19061342d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115ab9190612046565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613309565b60405180910390fd5b600061163161104b565b9050600061163e85611853565b9050600061164b85611853565b905061165b8389898585896118cd565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e99061339b565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a79190613171565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516118249291906131a5565b60405180910390a461183a848a8a86868a6118e3565b611848848a8a8a8a8a6118eb565b505050505050505050565b60606000600167ffffffffffffffff8111156118725761187161207c565b5b6040519080825280602002602001820160405280156118a05781602001602082028036833780820191505090505b50905082816000815181106118b8576118b7612f3b565b5b60200260200101818152505080915050919050565b6118db868686868686611cbc565b505050505050565b505050505050565b61190a8473ffffffffffffffffffffffffffffffffffffffff16611c99565b15611aba578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016119509594939291906134a2565b6020604051808303816000875af192505050801561198c57506040513d601f19601f820116820180604052508101906119899190613511565b60015b611a315761199861354b565b806308c379a0036119f457506119ac61356d565b806119b757506119f6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb919061226f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a289061366f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613701565b60405180910390fd5b505b505050505050565b611ae18473ffffffffffffffffffffffffffffffffffffffff16611c99565b15611c91578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b27959493929190613721565b6020604051808303816000875af1925050508015611b6357506040513d601f19601f82011682018060405250810190611b609190613511565b60015b611c0857611b6f61354b565b806308c379a003611bcb5750611b8361356d565b80611b8e5750611bcd565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc2919061226f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff9061366f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613701565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611cca868686868686611e8c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611d7b5760005b8351811015611d7957828181518110611d1d57611d1c612f3b565b5b602002602001015160046000868481518110611d3c57611d3b612f3b565b5b602002602001015181526020019081526020016000206000828254611d619190613171565b9250508190555080611d7290612f99565b9050611d01565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e845760005b8351811015611e82576000848281518110611dd057611dcf612f3b565b5b602002602001015190506000848381518110611def57611dee612f3b565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b906137fb565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080611e7b90612f99565b9050611db2565b505b505050505050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ed382611ea8565b9050919050565b611ee381611ec8565b8114611eee57600080fd5b50565b600081359050611f0081611eda565b92915050565b6000819050919050565b611f1981611f06565b8114611f2457600080fd5b50565b600081359050611f3681611f10565b92915050565b60008060408385031215611f5357611f52611e9e565b5b6000611f6185828601611ef1565b9250506020611f7285828601611f27565b9150509250929050565b611f8581611f06565b82525050565b6000602082019050611fa06000830184611f7c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611fdb81611fa6565b8114611fe657600080fd5b50565b600081359050611ff881611fd2565b92915050565b60006020828403121561201457612013611e9e565b5b600061202284828501611fe9565b91505092915050565b60008115159050919050565b6120408161202b565b82525050565b600060208201905061205b6000830184612037565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120b48261206b565b810181811067ffffffffffffffff821117156120d3576120d261207c565b5b80604052505050565b60006120e6611e94565b90506120f282826120ab565b919050565b600067ffffffffffffffff8211156121125761211161207c565b5b61211b8261206b565b9050602081019050919050565b82818337600083830152505050565b600061214a612145846120f7565b6120dc565b90508281526020810184848401111561216657612165612066565b5b612171848285612128565b509392505050565b600082601f83011261218e5761218d612061565b5b813561219e848260208601612137565b91505092915050565b6000602082840312156121bd576121bc611e9e565b5b600082013567ffffffffffffffff8111156121db576121da611ea3565b5b6121e784828501612179565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561222a57808201518184015260208101905061220f565b60008484015250505050565b6000612241826121f0565b61224b81856121fb565b935061225b81856020860161220c565b6122648161206b565b840191505092915050565b600060208201905081810360008301526122898184612236565b905092915050565b6000602082840312156122a7576122a6611e9e565b5b60006122b584828501611f27565b91505092915050565b6000806000606084860312156122d7576122d6611e9e565b5b60006122e586828701611ef1565b93505060206122f686828701611f27565b925050604061230786828701611f27565b9150509250925092565b600067ffffffffffffffff82111561232c5761232b61207c565b5b602082029050602081019050919050565b600080fd5b600061235561235084612311565b6120dc565b905080838252602082019050602084028301858111156123785761237761233d565b5b835b818110156123a1578061238d8882611f27565b84526020840193505060208101905061237a565b5050509392505050565b600082601f8301126123c0576123bf612061565b5b81356123d0848260208601612342565b91505092915050565b600067ffffffffffffffff8211156123f4576123f361207c565b5b6123fd8261206b565b9050602081019050919050565b600061241d612418846123d9565b6120dc565b90508281526020810184848401111561243957612438612066565b5b612444848285612128565b509392505050565b600082601f83011261246157612460612061565b5b813561247184826020860161240a565b91505092915050565b6000806000806080858703121561249457612493611e9e565b5b60006124a287828801611ef1565b945050602085013567ffffffffffffffff8111156124c3576124c2611ea3565b5b6124cf878288016123ab565b935050604085013567ffffffffffffffff8111156124f0576124ef611ea3565b5b6124fc878288016123ab565b925050606085013567ffffffffffffffff81111561251d5761251c611ea3565b5b6125298782880161244c565b91505092959194509250565b600080600080600060a0868803121561255157612550611e9e565b5b600061255f88828901611ef1565b955050602061257088828901611ef1565b945050604086013567ffffffffffffffff81111561259157612590611ea3565b5b61259d888289016123ab565b935050606086013567ffffffffffffffff8111156125be576125bd611ea3565b5b6125ca888289016123ab565b925050608086013567ffffffffffffffff8111156125eb576125ea611ea3565b5b6125f78882890161244c565b9150509295509295909350565b600067ffffffffffffffff82111561261f5761261e61207c565b5b602082029050602081019050919050565b600061264361263e84612604565b6120dc565b905080838252602082019050602084028301858111156126665761266561233d565b5b835b8181101561268f578061267b8882611ef1565b845260208401935050602081019050612668565b5050509392505050565b600082601f8301126126ae576126ad612061565b5b81356126be848260208601612630565b91505092915050565b600080604083850312156126de576126dd611e9e565b5b600083013567ffffffffffffffff8111156126fc576126fb611ea3565b5b61270885828601612699565b925050602083013567ffffffffffffffff81111561272957612728611ea3565b5b612735858286016123ab565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61277481611f06565b82525050565b6000612786838361276b565b60208301905092915050565b6000602082019050919050565b60006127aa8261273f565b6127b4818561274a565b93506127bf8361275b565b8060005b838110156127f05781516127d7888261277a565b97506127e283612792565b9250506001810190506127c3565b5085935050505092915050565b60006020820190508181036000830152612817818461279f565b905092915050565b60006020828403121561283557612834611e9e565b5b600082013567ffffffffffffffff81111561285357612852611ea3565b5b61285f84828501612699565b91505092915050565b61287181611ec8565b82525050565b600060208201905061288c6000830184612868565b92915050565b61289b8161202b565b81146128a657600080fd5b50565b6000813590506128b881612892565b92915050565b600080604083850312156128d5576128d4611e9e565b5b60006128e385828601611ef1565b92505060206128f4858286016128a9565b9150509250929050565b6000806040838503121561291557612914611e9e565b5b600061292385828601611ef1565b925050602061293485828601611ef1565b9150509250929050565b600080600080600060a0868803121561295a57612959611e9e565b5b600061296888828901611ef1565b955050602061297988828901611ef1565b945050604061298a88828901611f27565b935050606061299b88828901611f27565b925050608086013567ffffffffffffffff8111156129bc576129bb611ea3565b5b6129c88882890161244c565b9150509295509295909350565b6000602082840312156129eb576129ea611e9e565b5b60006129f984828501611ef1565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612a5e602a836121fb565b9150612a6982612a02565b604082019050919050565b60006020820190508181036000830152612a8d81612a51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612adb57607f821691505b602082108103612aee57612aed612a94565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612b567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b19565b612b608683612b19565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612b9d612b98612b9384611f06565b612b78565b611f06565b9050919050565b6000819050919050565b612bb783612b82565b612bcb612bc382612ba4565b848454612b26565b825550505050565b600090565b612be0612bd3565b612beb818484612bae565b505050565b5b81811015612c0f57612c04600082612bd8565b600181019050612bf1565b5050565b601f821115612c5457612c2581612af4565b612c2e84612b09565b81016020851015612c3d578190505b612c51612c4985612b09565b830182612bf0565b50505b505050565b600082821c905092915050565b6000612c7760001984600802612c59565b1980831691505092915050565b6000612c908383612c66565b9150826002028217905092915050565b612ca9826121f0565b67ffffffffffffffff811115612cc257612cc161207c565b5b612ccc8254612ac3565b612cd7828285612c13565b600060209050601f831160018114612d0a5760008415612cf8578287015190505b612d028582612c84565b865550612d6a565b601f198416612d1886612af4565b60005b82811015612d4057848901518255600182019150602085019450602081019050612d1b565b86831015612d5d5784890151612d59601f891682612c66565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b60008154612d8a81612ac3565b612d948186612d72565b94506001821660008114612daf5760018114612dc457612df7565b60ff1983168652811515820286019350612df7565b612dcd85612af4565b60005b83811015612def57815481890152600182019150602081019050612dd0565b838801955050505b50505092915050565b6000612e0c8284612d7d565b915081905092915050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612e73602e836121fb565b9150612e7e82612e17565b604082019050919050565b60006020820190508181036000830152612ea281612e66565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612f056029836121fb565b9150612f1082612ea9565b604082019050919050565b60006020820190508181036000830152612f3481612ef8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa482611f06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fd657612fd5612f6a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061303d6026836121fb565b915061304882612fe1565b604082019050919050565b6000602082019050818103600083015261306c81613030565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130a96020836121fb565b91506130b482613073565b602082019050919050565b600060208201905081810360008301526130d88161309c565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061313b6021836121fb565b9150613146826130df565b604082019050919050565b6000602082019050818103600083015261316a8161312e565b9050919050565b600061317c82611f06565b915061318783611f06565b925082820190508082111561319f5761319e612f6a565b5b92915050565b60006040820190506131ba6000830185611f7c565b6131c76020830184611f7c565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061322a6028836121fb565b9150613235826131ce565b604082019050919050565b600060208201905081810360008301526132598161321d565b9050919050565b6000604082019050818103600083015261327a818561279f565b9050818103602083015261328e818461279f565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132f36025836121fb565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613385602a836121fb565b915061339082613329565b604082019050919050565b600060208201905081810360008301526133b481613378565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006134176029836121fb565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006134748261344d565b61347e8185613458565b935061348e81856020860161220c565b6134978161206b565b840191505092915050565b600060a0820190506134b76000830188612868565b6134c46020830187612868565b6134d16040830186611f7c565b6134de6060830185611f7c565b81810360808301526134f08184613469565b90509695505050505050565b60008151905061350b81611fd2565b92915050565b60006020828403121561352757613526611e9e565b5b6000613535848285016134fc565b91505092915050565b60008160e01c9050919050565b600060033d111561356a5760046000803e61356760005161353e565b90505b90565b600060443d106135fa5761357f611e94565b60043d036004823e80513d602482011167ffffffffffffffff821117156135a75750506135fa565b808201805167ffffffffffffffff8111156135c557505050506135fa565b80602083010160043d0385018111156135e25750505050506135fa565b6135f1826020018501866120ab565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006136596034836121fb565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006136eb6028836121fb565b91506136f68261368f565b604082019050919050565b6000602082019050818103600083015261371a816136de565b9050919050565b600060a0820190506137366000830188612868565b6137436020830187612868565b8181036040830152613755818661279f565b90508181036060830152613769818561279f565b9050818103608083015261377d8184613469565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006137e56028836121fb565b91506137f082613789565b604082019050919050565b60006020820190508181036000830152613814816137d8565b905091905056fea2646970667358221220284cd4e1ec1e865001f3dcec2188569105b74a09d1f373f3628e07501776aab664736f6c634300081200330000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f656967656e6c617965722e746563682f6d657461646174612e6a736f6e000000000000000000000000000000000000000000000000000000
Deployed Bytecode
0x608060405234801561001057600080fd5b50600436106101205760003560e01c80634f558e79116100ad578063a22cb46511610071578063a22cb46514610305578063bd85b03914610321578063e985e9c514610351578063f242432a14610381578063f2fde38b1461039d57610120565b80634f558e7914610273578063715018a6146102a3578063729ad39e146102ad5780638da5cb5b146102c957806395d89b41146102e757610120565b80630e89341c116100f45780630e89341c146101bf578063156e29f6146101ef5780631f7fdffa1461020b5780632eb2c2d6146102275780634e1273f41461024357610120565b8062fdd58e1461012557806301ffc9a71461015557806302fe53051461018557806306fdde03146101a1575b600080fd5b61013f600480360381019061013a9190611f3c565b6103b9565b60405161014c9190611f8b565b60405180910390f35b61016f600480360381019061016a9190611ffe565b610481565b60405161017c9190612046565b60405180910390f35b61019f600480360381019061019a91906121a7565b610563565b005b6101a961057e565b6040516101b6919061226f565b60405180910390f35b6101d960048036038101906101d49190612291565b61060c565b6040516101e6919061226f565b60405180910390f35b610209600480360381019061020491906122be565b610636565b005b6102256004803603810190610220919061247a565b61065e565b005b610241600480360381019061023c9190612535565b610678565b005b61025d600480360381019061025891906126c7565b610719565b60405161026a91906127fd565b60405180910390f35b61028d60048036038101906102889190612291565b610832565b60405161029a9190612046565b60405180910390f35b6102ab610846565b005b6102c760048036038101906102c2919061281f565b61085a565b005b6102d16108e4565b6040516102de9190612877565b60405180910390f35b6102ef61090e565b6040516102fc919061226f565b60405180910390f35b61031f600480360381019061031a91906128be565b61099c565b005b61033b60048036038101906103369190612291565b6109b2565b6040516103489190611f8b565b60405180910390f35b61036b600480360381019061036691906128fe565b6109cf565b6040516103789190612046565b60405180910390f35b61039b6004803603810190610396919061293e565b610a63565b005b6103b760048036038101906103b291906129d5565b610b04565b005b60008073ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff1603610429576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161042090612a74565b60405180910390fd5b60008083815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905092915050565b60007fd9b67a26000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916148061054c57507f0e89341c000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916145b8061055c575061055b82610b87565b5b9050919050565b61056b610bf1565b806005908161057a9190612ca0565b5050565b6006805461058b90612ac3565b80601f01602080910402602001604051908101604052809291908181526020018280546105b790612ac3565b80156106045780601f106105d957610100808354040283529160200191610604565b820191906000526020600020905b8154815290600101906020018083116105e757829003601f168201915b505050505081565b606060056040516020016106209190612e00565b6040516020818303038152906040529050919050565b61063e610bf1565b61065983838360405180602001604052806000815250610c6f565b505050565b610666610bf1565b61067284848484610e1f565b50505050565b61068061104b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1614806106c657506106c5856106c061104b565b6109cf565b5b610705576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016106fc90612e89565b60405180910390fd5b6107128585858585611053565b5050505050565b6060815183511461075f576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161075690612f1b565b60405180910390fd5b6000835167ffffffffffffffff81111561077c5761077b61207c565b5b6040519080825280602002602001820160405280156107aa5781602001602082028036833780820191505090505b50905060005b8451811015610827576107f78582815181106107cf576107ce612f3b565b5b60200260200101518583815181106107ea576107e9612f3b565b5b60200260200101516103b9565b82828151811061080a57610809612f3b565b5b6020026020010181815250508061082090612f99565b90506107b0565b508091505092915050565b60008061083e836109b2565b119050919050565b61084e610bf1565b6108586000611374565b565b610862610bf1565b60005b81518110156108e05761089182828151811061088457610883612f3b565b5b602002602001015161143a565b6108cd576108cc8282815181106108ab576108aa612f3b565b5b60200260200101516000600160405180602001604052806000815250610c6f565b5b80806108d890612f99565b915050610865565b5050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905090565b6007805461091b90612ac3565b80601f016020809104026020016040519081016040528092919081815260200182805461094790612ac3565b80156109945780601f1061096957610100808354040283529160200191610994565b820191906000526020600020905b81548152906001019060200180831161097757829003601f168201915b505050505081565b6109ae6109a761104b565b838361144c565b5050565b600060046000838152602001908152602001600020549050919050565b6000600160008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008373ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060009054906101000a900460ff16905092915050565b610a6b61104b565b73ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff161480610ab15750610ab085610aab61104b565b6109cf565b5b610af0576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ae790612e89565b60405180910390fd5b610afd85858585856115b8565b5050505050565b610b0c610bf1565b600073ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff1603610b7b576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610b7290613053565b60405180910390fd5b610b8481611374565b50565b60007f01ffc9a7000000000000000000000000000000000000000000000000000000007bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916827bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916149050919050565b610bf961104b565b73ffffffffffffffffffffffffffffffffffffffff16610c176108e4565b73ffffffffffffffffffffffffffffffffffffffff1614610c6d576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610c64906130bf565b60405180910390fd5b565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610cde576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610cd590613151565b60405180910390fd5b6000610ce861104b565b90506000610cf585611853565b90506000610d0285611853565b9050610d13836000898585896118cd565b8460008088815260200190815260200160002060008973ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610d729190613171565b925050819055508673ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628989604051610df09291906131a5565b60405180910390a4610e07836000898585896118e3565b610e16836000898989896118eb565b50505050505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603610e8e576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610e8590613151565b60405180910390fd5b8151835114610ed2576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401610ec990613240565b60405180910390fd5b6000610edc61104b565b9050610eed816000878787876118cd565b60005b8451811015610fa657838181518110610f0c57610f0b612f3b565b5b6020026020010151600080878481518110610f2a57610f29612f3b565b5b6020026020010151815260200190815260200160002060008873ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff1681526020019081526020016000206000828254610f8c9190613171565b925050819055508080610f9e90612f99565b915050610ef0565b508473ffffffffffffffffffffffffffffffffffffffff16600073ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb878760405161101e929190613260565b60405180910390a4611035816000878787876118e3565b61104481600087878787611ac2565b5050505050565b600033905090565b8151835114611097576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161108e90613240565b60405180910390fd5b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611106576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016110fd90613309565b60405180910390fd5b600061111061104b565b90506111208187878787876118cd565b60005b84518110156112d157600085828151811061114157611140612f3b565b5b6020026020010151905060008583815181106111605761115f612f3b565b5b60200260200101519050600080600084815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002054905081811015611201576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016111f89061339b565b60405180910390fd5b81810360008085815260200190815260200160002060008c73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508160008085815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546112b69190613171565b92505081905550505050806112ca90612f99565b9050611123565b508473ffffffffffffffffffffffffffffffffffffffff168673ffffffffffffffffffffffffffffffffffffffff168273ffffffffffffffffffffffffffffffffffffffff167f4a39dc06d4c0dbc64b70af90fd698a233a518aa5d07e595d983b8c0526c8f7fb8787604051611348929190613260565b60405180910390a461135e8187878787876118e3565b61136c818787878787611ac2565b505050505050565b6000600360009054906101000a900473ffffffffffffffffffffffffffffffffffffffff16905081600360006101000a81548173ffffffffffffffffffffffffffffffffffffffff021916908373ffffffffffffffffffffffffffffffffffffffff1602179055508173ffffffffffffffffffffffffffffffffffffffff168173ffffffffffffffffffffffffffffffffffffffff167f8be0079c531659141344cd1fd0a4f28419497f9722a3daafe3b4186f6b6457e060405160405180910390a35050565b600061144582611c99565b9050919050565b8173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff16036114ba576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016114b19061342d565b60405180910390fd5b80600160008573ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008473ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060006101000a81548160ff0219169083151502179055508173ffffffffffffffffffffffffffffffffffffffff168373ffffffffffffffffffffffffffffffffffffffff167f17307eab39ab6107e8899845ad3d59bd9653f200f220920489ca2b5937696c31836040516115ab9190612046565b60405180910390a3505050565b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611627576040517f08c379a000000000000000000000000000000000000000000000000000000000815260040161161e90613309565b60405180910390fd5b600061163161104b565b9050600061163e85611853565b9050600061164b85611853565b905061165b8389898585896118cd565b600080600088815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020549050858110156116f2576040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016116e99061339b565b60405180910390fd5b85810360008089815260200190815260200160002060008b73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff168152602001908152602001600020819055508560008089815260200190815260200160002060008a73ffffffffffffffffffffffffffffffffffffffff1673ffffffffffffffffffffffffffffffffffffffff16815260200190815260200160002060008282546117a79190613171565b925050819055508773ffffffffffffffffffffffffffffffffffffffff168973ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff167fc3d58168c5ae7397731d063d5bbf3d657854427343f4c083240f7aacaa2d0f628a8a6040516118249291906131a5565b60405180910390a461183a848a8a86868a6118e3565b611848848a8a8a8a8a6118eb565b505050505050505050565b60606000600167ffffffffffffffff8111156118725761187161207c565b5b6040519080825280602002602001820160405280156118a05781602001602082028036833780820191505090505b50905082816000815181106118b8576118b7612f3b565b5b60200260200101818152505080915050919050565b6118db868686868686611cbc565b505050505050565b505050505050565b61190a8473ffffffffffffffffffffffffffffffffffffffff16611c99565b15611aba578373ffffffffffffffffffffffffffffffffffffffff1663f23a6e6187878686866040518663ffffffff1660e01b81526004016119509594939291906134a2565b6020604051808303816000875af192505050801561198c57506040513d601f19601f820116820180604052508101906119899190613511565b60015b611a315761199861354b565b806308c379a0036119f457506119ac61356d565b806119b757506119f6565b806040517f08c379a00000000000000000000000000000000000000000000000000000000081526004016119eb919061226f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611a289061366f565b60405180910390fd5b63f23a6e6160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611ab8576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611aaf90613701565b60405180910390fd5b505b505050505050565b611ae18473ffffffffffffffffffffffffffffffffffffffff16611c99565b15611c91578373ffffffffffffffffffffffffffffffffffffffff1663bc197c8187878686866040518663ffffffff1660e01b8152600401611b27959493929190613721565b6020604051808303816000875af1925050508015611b6357506040513d601f19601f82011682018060405250810190611b609190613511565b60015b611c0857611b6f61354b565b806308c379a003611bcb5750611b8361356d565b80611b8e5750611bcd565b806040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bc2919061226f565b60405180910390fd5b505b6040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611bff9061366f565b60405180910390fd5b63bc197c8160e01b7bffffffffffffffffffffffffffffffffffffffffffffffffffffffff1916817bffffffffffffffffffffffffffffffffffffffffffffffffffffffff191614611c8f576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611c8690613701565b60405180910390fd5b505b505050505050565b6000808273ffffffffffffffffffffffffffffffffffffffff163b119050919050565b611cca868686868686611e8c565b600073ffffffffffffffffffffffffffffffffffffffff168573ffffffffffffffffffffffffffffffffffffffff1603611d7b5760005b8351811015611d7957828181518110611d1d57611d1c612f3b565b5b602002602001015160046000868481518110611d3c57611d3b612f3b565b5b602002602001015181526020019081526020016000206000828254611d619190613171565b9250508190555080611d7290612f99565b9050611d01565b505b600073ffffffffffffffffffffffffffffffffffffffff168473ffffffffffffffffffffffffffffffffffffffff1603611e845760005b8351811015611e82576000848281518110611dd057611dcf612f3b565b5b602002602001015190506000848381518110611def57611dee612f3b565b5b6020026020010151905060006004600084815260200190815260200160002054905081811015611e54576040517f08c379a0000000000000000000000000000000000000000000000000000000008152600401611e4b906137fb565b60405180910390fd5b818103600460008581526020019081526020016000208190555050505080611e7b90612f99565b9050611db2565b505b505050505050565b505050505050565b6000604051905090565b600080fd5b600080fd5b600073ffffffffffffffffffffffffffffffffffffffff82169050919050565b6000611ed382611ea8565b9050919050565b611ee381611ec8565b8114611eee57600080fd5b50565b600081359050611f0081611eda565b92915050565b6000819050919050565b611f1981611f06565b8114611f2457600080fd5b50565b600081359050611f3681611f10565b92915050565b60008060408385031215611f5357611f52611e9e565b5b6000611f6185828601611ef1565b9250506020611f7285828601611f27565b9150509250929050565b611f8581611f06565b82525050565b6000602082019050611fa06000830184611f7c565b92915050565b60007fffffffff0000000000000000000000000000000000000000000000000000000082169050919050565b611fdb81611fa6565b8114611fe657600080fd5b50565b600081359050611ff881611fd2565b92915050565b60006020828403121561201457612013611e9e565b5b600061202284828501611fe9565b91505092915050565b60008115159050919050565b6120408161202b565b82525050565b600060208201905061205b6000830184612037565b92915050565b600080fd5b600080fd5b6000601f19601f8301169050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052604160045260246000fd5b6120b48261206b565b810181811067ffffffffffffffff821117156120d3576120d261207c565b5b80604052505050565b60006120e6611e94565b90506120f282826120ab565b919050565b600067ffffffffffffffff8211156121125761211161207c565b5b61211b8261206b565b9050602081019050919050565b82818337600083830152505050565b600061214a612145846120f7565b6120dc565b90508281526020810184848401111561216657612165612066565b5b612171848285612128565b509392505050565b600082601f83011261218e5761218d612061565b5b813561219e848260208601612137565b91505092915050565b6000602082840312156121bd576121bc611e9e565b5b600082013567ffffffffffffffff8111156121db576121da611ea3565b5b6121e784828501612179565b91505092915050565b600081519050919050565b600082825260208201905092915050565b60005b8381101561222a57808201518184015260208101905061220f565b60008484015250505050565b6000612241826121f0565b61224b81856121fb565b935061225b81856020860161220c565b6122648161206b565b840191505092915050565b600060208201905081810360008301526122898184612236565b905092915050565b6000602082840312156122a7576122a6611e9e565b5b60006122b584828501611f27565b91505092915050565b6000806000606084860312156122d7576122d6611e9e565b5b60006122e586828701611ef1565b93505060206122f686828701611f27565b925050604061230786828701611f27565b9150509250925092565b600067ffffffffffffffff82111561232c5761232b61207c565b5b602082029050602081019050919050565b600080fd5b600061235561235084612311565b6120dc565b905080838252602082019050602084028301858111156123785761237761233d565b5b835b818110156123a1578061238d8882611f27565b84526020840193505060208101905061237a565b5050509392505050565b600082601f8301126123c0576123bf612061565b5b81356123d0848260208601612342565b91505092915050565b600067ffffffffffffffff8211156123f4576123f361207c565b5b6123fd8261206b565b9050602081019050919050565b600061241d612418846123d9565b6120dc565b90508281526020810184848401111561243957612438612066565b5b612444848285612128565b509392505050565b600082601f83011261246157612460612061565b5b813561247184826020860161240a565b91505092915050565b6000806000806080858703121561249457612493611e9e565b5b60006124a287828801611ef1565b945050602085013567ffffffffffffffff8111156124c3576124c2611ea3565b5b6124cf878288016123ab565b935050604085013567ffffffffffffffff8111156124f0576124ef611ea3565b5b6124fc878288016123ab565b925050606085013567ffffffffffffffff81111561251d5761251c611ea3565b5b6125298782880161244c565b91505092959194509250565b600080600080600060a0868803121561255157612550611e9e565b5b600061255f88828901611ef1565b955050602061257088828901611ef1565b945050604086013567ffffffffffffffff81111561259157612590611ea3565b5b61259d888289016123ab565b935050606086013567ffffffffffffffff8111156125be576125bd611ea3565b5b6125ca888289016123ab565b925050608086013567ffffffffffffffff8111156125eb576125ea611ea3565b5b6125f78882890161244c565b9150509295509295909350565b600067ffffffffffffffff82111561261f5761261e61207c565b5b602082029050602081019050919050565b600061264361263e84612604565b6120dc565b905080838252602082019050602084028301858111156126665761266561233d565b5b835b8181101561268f578061267b8882611ef1565b845260208401935050602081019050612668565b5050509392505050565b600082601f8301126126ae576126ad612061565b5b81356126be848260208601612630565b91505092915050565b600080604083850312156126de576126dd611e9e565b5b600083013567ffffffffffffffff8111156126fc576126fb611ea3565b5b61270885828601612699565b925050602083013567ffffffffffffffff81111561272957612728611ea3565b5b612735858286016123ab565b9150509250929050565b600081519050919050565b600082825260208201905092915050565b6000819050602082019050919050565b61277481611f06565b82525050565b6000612786838361276b565b60208301905092915050565b6000602082019050919050565b60006127aa8261273f565b6127b4818561274a565b93506127bf8361275b565b8060005b838110156127f05781516127d7888261277a565b97506127e283612792565b9250506001810190506127c3565b5085935050505092915050565b60006020820190508181036000830152612817818461279f565b905092915050565b60006020828403121561283557612834611e9e565b5b600082013567ffffffffffffffff81111561285357612852611ea3565b5b61285f84828501612699565b91505092915050565b61287181611ec8565b82525050565b600060208201905061288c6000830184612868565b92915050565b61289b8161202b565b81146128a657600080fd5b50565b6000813590506128b881612892565b92915050565b600080604083850312156128d5576128d4611e9e565b5b60006128e385828601611ef1565b92505060206128f4858286016128a9565b9150509250929050565b6000806040838503121561291557612914611e9e565b5b600061292385828601611ef1565b925050602061293485828601611ef1565b9150509250929050565b600080600080600060a0868803121561295a57612959611e9e565b5b600061296888828901611ef1565b955050602061297988828901611ef1565b945050604061298a88828901611f27565b935050606061299b88828901611f27565b925050608086013567ffffffffffffffff8111156129bc576129bb611ea3565b5b6129c88882890161244c565b9150509295509295909350565b6000602082840312156129eb576129ea611e9e565b5b60006129f984828501611ef1565b91505092915050565b7f455243313135353a2061646472657373207a65726f206973206e6f742061207660008201527f616c6964206f776e657200000000000000000000000000000000000000000000602082015250565b6000612a5e602a836121fb565b9150612a6982612a02565b604082019050919050565b60006020820190508181036000830152612a8d81612a51565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052602260045260246000fd5b60006002820490506001821680612adb57607f821691505b602082108103612aee57612aed612a94565b5b50919050565b60008190508160005260206000209050919050565b60006020601f8301049050919050565b600082821b905092915050565b600060088302612b567fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff82612b19565b612b608683612b19565b95508019841693508086168417925050509392505050565b6000819050919050565b6000612b9d612b98612b9384611f06565b612b78565b611f06565b9050919050565b6000819050919050565b612bb783612b82565b612bcb612bc382612ba4565b848454612b26565b825550505050565b600090565b612be0612bd3565b612beb818484612bae565b505050565b5b81811015612c0f57612c04600082612bd8565b600181019050612bf1565b5050565b601f821115612c5457612c2581612af4565b612c2e84612b09565b81016020851015612c3d578190505b612c51612c4985612b09565b830182612bf0565b50505b505050565b600082821c905092915050565b6000612c7760001984600802612c59565b1980831691505092915050565b6000612c908383612c66565b9150826002028217905092915050565b612ca9826121f0565b67ffffffffffffffff811115612cc257612cc161207c565b5b612ccc8254612ac3565b612cd7828285612c13565b600060209050601f831160018114612d0a5760008415612cf8578287015190505b612d028582612c84565b865550612d6a565b601f198416612d1886612af4565b60005b82811015612d4057848901518255600182019150602085019450602081019050612d1b565b86831015612d5d5784890151612d59601f891682612c66565b8355505b6001600288020188555050505b505050505050565b600081905092915050565b60008154612d8a81612ac3565b612d948186612d72565b94506001821660008114612daf5760018114612dc457612df7565b60ff1983168652811515820286019350612df7565b612dcd85612af4565b60005b83811015612def57815481890152600182019150602081019050612dd0565b838801955050505b50505092915050565b6000612e0c8284612d7d565b915081905092915050565b7f455243313135353a2063616c6c6572206973206e6f7420746f6b656e206f776e60008201527f6572206f7220617070726f766564000000000000000000000000000000000000602082015250565b6000612e73602e836121fb565b9150612e7e82612e17565b604082019050919050565b60006020820190508181036000830152612ea281612e66565b9050919050565b7f455243313135353a206163636f756e747320616e6420696473206c656e67746860008201527f206d69736d617463680000000000000000000000000000000000000000000000602082015250565b6000612f056029836121fb565b9150612f1082612ea9565b604082019050919050565b60006020820190508181036000830152612f3481612ef8565b9050919050565b7f4e487b7100000000000000000000000000000000000000000000000000000000600052603260045260246000fd5b7f4e487b7100000000000000000000000000000000000000000000000000000000600052601160045260246000fd5b6000612fa482611f06565b91507fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff8203612fd657612fd5612f6a565b5b600182019050919050565b7f4f776e61626c653a206e6577206f776e657220697320746865207a65726f206160008201527f6464726573730000000000000000000000000000000000000000000000000000602082015250565b600061303d6026836121fb565b915061304882612fe1565b604082019050919050565b6000602082019050818103600083015261306c81613030565b9050919050565b7f4f776e61626c653a2063616c6c6572206973206e6f7420746865206f776e6572600082015250565b60006130a96020836121fb565b91506130b482613073565b602082019050919050565b600060208201905081810360008301526130d88161309c565b9050919050565b7f455243313135353a206d696e7420746f20746865207a65726f2061646472657360008201527f7300000000000000000000000000000000000000000000000000000000000000602082015250565b600061313b6021836121fb565b9150613146826130df565b604082019050919050565b6000602082019050818103600083015261316a8161312e565b9050919050565b600061317c82611f06565b915061318783611f06565b925082820190508082111561319f5761319e612f6a565b5b92915050565b60006040820190506131ba6000830185611f7c565b6131c76020830184611f7c565b9392505050565b7f455243313135353a2069647320616e6420616d6f756e7473206c656e6774682060008201527f6d69736d61746368000000000000000000000000000000000000000000000000602082015250565b600061322a6028836121fb565b9150613235826131ce565b604082019050919050565b600060208201905081810360008301526132598161321d565b9050919050565b6000604082019050818103600083015261327a818561279f565b9050818103602083015261328e818461279f565b90509392505050565b7f455243313135353a207472616e7366657220746f20746865207a65726f20616460008201527f6472657373000000000000000000000000000000000000000000000000000000602082015250565b60006132f36025836121fb565b91506132fe82613297565b604082019050919050565b60006020820190508181036000830152613322816132e6565b9050919050565b7f455243313135353a20696e73756666696369656e742062616c616e636520666f60008201527f72207472616e7366657200000000000000000000000000000000000000000000602082015250565b6000613385602a836121fb565b915061339082613329565b604082019050919050565b600060208201905081810360008301526133b481613378565b9050919050565b7f455243313135353a2073657474696e6720617070726f76616c2073746174757360008201527f20666f722073656c660000000000000000000000000000000000000000000000602082015250565b60006134176029836121fb565b9150613422826133bb565b604082019050919050565b600060208201905081810360008301526134468161340a565b9050919050565b600081519050919050565b600082825260208201905092915050565b60006134748261344d565b61347e8185613458565b935061348e81856020860161220c565b6134978161206b565b840191505092915050565b600060a0820190506134b76000830188612868565b6134c46020830187612868565b6134d16040830186611f7c565b6134de6060830185611f7c565b81810360808301526134f08184613469565b90509695505050505050565b60008151905061350b81611fd2565b92915050565b60006020828403121561352757613526611e9e565b5b6000613535848285016134fc565b91505092915050565b60008160e01c9050919050565b600060033d111561356a5760046000803e61356760005161353e565b90505b90565b600060443d106135fa5761357f611e94565b60043d036004823e80513d602482011167ffffffffffffffff821117156135a75750506135fa565b808201805167ffffffffffffffff8111156135c557505050506135fa565b80602083010160043d0385018111156135e25750505050506135fa565b6135f1826020018501866120ab565b82955050505050505b90565b7f455243313135353a207472616e7366657220746f206e6f6e2d4552433131353560008201527f526563656976657220696d706c656d656e746572000000000000000000000000602082015250565b60006136596034836121fb565b9150613664826135fd565b604082019050919050565b600060208201905081810360008301526136888161364c565b9050919050565b7f455243313135353a204552433131353552656365697665722072656a6563746560008201527f6420746f6b656e73000000000000000000000000000000000000000000000000602082015250565b60006136eb6028836121fb565b91506136f68261368f565b604082019050919050565b6000602082019050818103600083015261371a816136de565b9050919050565b600060a0820190506137366000830188612868565b6137436020830187612868565b8181036040830152613755818661279f565b90508181036060830152613769818561279f565b9050818103608083015261377d8184613469565b90509695505050505050565b7f455243313135353a206275726e20616d6f756e74206578636565647320746f7460008201527f616c537570706c79000000000000000000000000000000000000000000000000602082015250565b60006137e56028836121fb565b91506137f082613789565b604082019050919050565b60006020820190508181036000830152613814816137d8565b905091905056fea2646970667358221220284cd4e1ec1e865001f3dcec2188569105b74a09d1f373f3628e07501776aab664736f6c63430008120033
Constructor Arguments (ABI-Encoded and is the last bytes of the Contract Creation Code above)
0000000000000000000000000000000000000000000000000000000000000020000000000000000000000000000000000000000000000000000000000000002568747470733a2f2f656967656e6c617965722e746563682f6d657461646174612e6a736f6e000000000000000000000000000000000000000000000000000000
-----Decoded View---------------
Arg [0] : baseTokenURI (string): https://eigenlayer.tech/metadata.json
-----Encoded View---------------
4 Constructor Arguments found :
Arg [0] : 0000000000000000000000000000000000000000000000000000000000000020
Arg [1] : 0000000000000000000000000000000000000000000000000000000000000025
Arg [2] : 68747470733a2f2f656967656e6c617965722e746563682f6d65746164617461
Arg [3] : 2e6a736f6e000000000000000000000000000000000000000000000000000000
Deployed Bytecode Sourcemap
42154:1710:0:-:0;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;24643:230;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;23666:310;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42472:98;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42246:18;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;43721:140;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42578:148;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;42734:191;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;26561:438;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;25039:499;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;40949:122;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;2769:103;;;:::i;:::-;;43302:282;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;2128:87;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;42271:20;;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25611:155;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;40738:113;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;25838:168;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;;;;;;:::i;:::-;;;;;;;;26078:406;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;3027:201;;;;;;;;;;;;;:::i;:::-;;:::i;:::-;;24643:230;24729:7;24776:1;24757:21;;:7;:21;;;24749:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;24843:9;:13;24853:2;24843:13;;;;;;;;;;;:22;24857:7;24843:22;;;;;;;;;;;;;;;;24836:29;;24643:230;;;;:::o;23666:310::-;23768:4;23820:26;23805:41;;;:11;:41;;;;:110;;;;23878:37;23863:52;;;:11;:52;;;;23805:110;:163;;;;23932:36;23956:11;23932:23;:36::i;:::-;23805:163;23785:183;;23666:310;;;:::o;42472:98::-;2014:13;:11;:13::i;:::-;42555:7:::1;42539:13;:23;;;;;;:::i;:::-;;42472:98:::0;:::o;42246:18::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;43721:140::-;43781:13;43838;43821:31;;;;;;;;:::i;:::-;;;;;;;;;;;;;43807:46;;43721:140;;;:::o;42578:148::-;2014:13;:11;:13::i;:::-;42688:30:::1;42694:7;42703:2;42707:6;42688:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;42578:148:::0;;;:::o;42734:191::-;2014:13;:11;:13::i;:::-;42883:34:::1;42894:2;42898:3;42903:7;42912:4;42883:10;:34::i;:::-;42734:191:::0;;;;:::o;26561:438::-;26802:12;:10;:12::i;:::-;26794:20;;:4;:20;;;:60;;;;26818:36;26835:4;26841:12;:10;:12::i;:::-;26818:16;:36::i;:::-;26794:60;26772:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26939:52;26962:4;26968:2;26972:3;26977:7;26986:4;26939:22;:52::i;:::-;26561:438;;;;;:::o;25039:499::-;25175:16;25231:3;:10;25212:8;:15;:29;25204:83;;;;;;;;;;;;:::i;:::-;;;;;;;;;25300:30;25347:8;:15;25333:30;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;25300:63;;25381:9;25376:122;25400:8;:15;25396:1;:19;25376:122;;;25456:30;25466:8;25475:1;25466:11;;;;;;;;:::i;:::-;;;;;;;;25479:3;25483:1;25479:6;;;;;;;;:::i;:::-;;;;;;;;25456:9;:30::i;:::-;25437:13;25451:1;25437:16;;;;;;;;:::i;:::-;;;;;;;:49;;;;;25417:3;;;;:::i;:::-;;;25376:122;;;;25517:13;25510:20;;;25039:499;;;;:::o;40949:122::-;41006:4;41062:1;41030:29;41056:2;41030:25;:29::i;:::-;:33;41023:40;;40949:122;;;:::o;2769:103::-;2014:13;:11;:13::i;:::-;2834:30:::1;2861:1;2834:18;:30::i;:::-;2769:103::o:0;43302:282::-;2014:13;:11;:13::i;:::-;43381:9:::1;43376:201;43400:10;:17;43396:1;:21;43376:201;;;43444:25;43455:10;43466:1;43455:13;;;;;;;;:::i;:::-;;;;;;;;43444:10;:25::i;:::-;43440:112;;43488:30;43494:10;43505:1;43494:13;;;;;;;;:::i;:::-;;;;;;;;43509:1;43512;43488:30;;;;;;;;;;;::::0;:5:::1;:30::i;:::-;43440:112;43419:3;;;;;:::i;:::-;;;;43376:201;;;;43302:282:::0;:::o;2128:87::-;2174:7;2201:6;;;;;;;;;;;2194:13;;2128:87;:::o;42271:20::-;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::o;25611:155::-;25706:52;25725:12;:10;:12::i;:::-;25739:8;25749;25706:18;:52::i;:::-;25611:155;;:::o;40738:113::-;40800:7;40827:12;:16;40840:2;40827:16;;;;;;;;;;;;40820:23;;40738:113;;;:::o;25838:168::-;25937:4;25961:18;:27;25980:7;25961:27;;;;;;;;;;;;;;;:37;25989:8;25961:37;;;;;;;;;;;;;;;;;;;;;;;;;25954:44;;25838:168;;;;:::o;26078:406::-;26294:12;:10;:12::i;:::-;26286:20;;:4;:20;;;:60;;;;26310:36;26327:4;26333:12;:10;:12::i;:::-;26310:16;:36::i;:::-;26286:60;26264:156;;;;;;;;;;;;:::i;:::-;;;;;;;;;26431:45;26449:4;26455:2;26459;26463:6;26471:4;26431:17;:45::i;:::-;26078:406;;;;;:::o;3027:201::-;2014:13;:11;:13::i;:::-;3136:1:::1;3116:22;;:8;:22;;::::0;3108:73:::1;;;;;;;;;;;;:::i;:::-;;;;;;;;;3192:28;3211:8;3192:18;:28::i;:::-;3027:201:::0;:::o;15001:157::-;15086:4;15125:25;15110:40;;;:11;:40;;;;15103:47;;15001:157;;;:::o;2293:132::-;2368:12;:10;:12::i;:::-;2357:23;;:7;:5;:7::i;:::-;:23;;;2349:68;;;;;;;;;;;;:::i;:::-;;;;;;;;;2293:132::o;31259:686::-;31383:1;31369:16;;:2;:16;;;31361:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;31436:16;31455:12;:10;:12::i;:::-;31436:31;;31478:20;31501:21;31519:2;31501:17;:21::i;:::-;31478:44;;31533:24;31560:25;31578:6;31560:17;:25::i;:::-;31533:52;;31598:66;31619:8;31637:1;31641:2;31645:3;31650:7;31659:4;31598:20;:66::i;:::-;31698:6;31677:9;:13;31687:2;31677:13;;;;;;;;;;;:17;31691:2;31677:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;31757:2;31720:52;;31753:1;31720:52;;31735:8;31720:52;;;31761:2;31765:6;31720:52;;;;;;;:::i;:::-;;;;;;;;31785:65;31805:8;31823:1;31827:2;31831:3;31836:7;31845:4;31785:19;:65::i;:::-;31863:74;31894:8;31912:1;31916:2;31920;31924:6;31932:4;31863:30;:74::i;:::-;31350:595;;;31259:686;;;;:::o;32348:813::-;32540:1;32526:16;;:2;:16;;;32518:62;;;;;;;;;;;;:::i;:::-;;;;;;;;;32613:7;:14;32599:3;:10;:28;32591:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;32685:16;32704:12;:10;:12::i;:::-;32685:31;;32729:66;32750:8;32768:1;32772:2;32776:3;32781:7;32790:4;32729:20;:66::i;:::-;32813:9;32808:103;32832:3;:10;32828:1;:14;32808:103;;;32889:7;32897:1;32889:10;;;;;;;;:::i;:::-;;;;;;;;32864:9;:17;32874:3;32878:1;32874:6;;;;;;;;:::i;:::-;;;;;;;;32864:17;;;;;;;;;;;:21;32882:2;32864:21;;;;;;;;;;;;;;;;:35;;;;;;;:::i;:::-;;;;;;;;32844:3;;;;;:::i;:::-;;;;32808:103;;;;32964:2;32928:53;;32960:1;32928:53;;32942:8;32928:53;;;32968:3;32973:7;32928:53;;;;;;;:::i;:::-;;;;;;;;32994:65;33014:8;33032:1;33036:2;33040:3;33045:7;33054:4;32994:19;:65::i;:::-;33072:81;33108:8;33126:1;33130:2;33134:3;33139:7;33148:4;33072:35;:81::i;:::-;32507:654;32348:813;;;;:::o;679:98::-;732:7;759:10;752:17;;679:98;:::o;28795:1146::-;29022:7;:14;29008:3;:10;:28;29000:81;;;;;;;;;;;;:::i;:::-;;;;;;;;;29114:1;29100:16;;:2;:16;;;29092:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;29171:16;29190:12;:10;:12::i;:::-;29171:31;;29215:60;29236:8;29246:4;29252:2;29256:3;29261:7;29270:4;29215:20;:60::i;:::-;29293:9;29288:421;29312:3;:10;29308:1;:14;29288:421;;;29344:10;29357:3;29361:1;29357:6;;;;;;;;:::i;:::-;;;;;;;;29344:19;;29378:14;29395:7;29403:1;29395:10;;;;;;;;:::i;:::-;;;;;;;;29378:27;;29422:19;29444:9;:13;29454:2;29444:13;;;;;;;;;;;:19;29458:4;29444:19;;;;;;;;;;;;;;;;29422:41;;29501:6;29486:11;:21;;29478:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;29634:6;29620:11;:20;29598:9;:13;29608:2;29598:13;;;;;;;;;;;:19;29612:4;29598:19;;;;;;;;;;;;;;;:42;;;;29691:6;29670:9;:13;29680:2;29670:13;;;;;;;;;;;:17;29684:2;29670:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;29329:380;;;29324:3;;;;:::i;:::-;;;29288:421;;;;29756:2;29726:47;;29750:4;29726:47;;29740:8;29726:47;;;29760:3;29765:7;29726:47;;;;;;;:::i;:::-;;;;;;;;29786:59;29806:8;29816:4;29822:2;29826:3;29831:7;29840:4;29786:19;:59::i;:::-;29858:75;29894:8;29904:4;29910:2;29914:3;29919:7;29928:4;29858:35;:75::i;:::-;28989:952;28795:1146;;;;;:::o;3388:191::-;3462:16;3481:6;;;;;;;;;;;3462:25;;3507:8;3498:6;;:17;;;;;;;;;;;;;;;;;;3562:8;3531:40;;3552:8;3531:40;;;;;;;;;;;;3451:128;3388:191;:::o;43592:115::-;43650:4;43674:25;43693:5;43674:18;:25::i;:::-;43667:32;;43592:115;;;:::o;35561:297::-;35682:8;35673:17;;:5;:17;;;35665:71;;;;;;;;;;;;:::i;:::-;;;;;;;;;35785:8;35747:18;:25;35766:5;35747:25;;;;;;;;;;;;;;;:35;35773:8;35747:35;;;;;;;;;;;;;;;;:46;;;;;;;;;;;;;;;;;;35831:8;35809:41;;35824:5;35809:41;;;35841:8;35809:41;;;;;;:::i;:::-;;;;;;;;35561:297;;;:::o;27463:974::-;27665:1;27651:16;;:2;:16;;;27643:66;;;;;;;;;;;;:::i;:::-;;;;;;;;;27722:16;27741:12;:10;:12::i;:::-;27722:31;;27764:20;27787:21;27805:2;27787:17;:21::i;:::-;27764:44;;27819:24;27846:25;27864:6;27846:17;:25::i;:::-;27819:52;;27884:60;27905:8;27915:4;27921:2;27925:3;27930:7;27939:4;27884:20;:60::i;:::-;27957:19;27979:9;:13;27989:2;27979:13;;;;;;;;;;;:19;27993:4;27979:19;;;;;;;;;;;;;;;;27957:41;;28032:6;28017:11;:21;;28009:76;;;;;;;;;;;;:::i;:::-;;;;;;;;;28157:6;28143:11;:20;28121:9;:13;28131:2;28121:13;;;;;;;;;;;:19;28135:4;28121:19;;;;;;;;;;;;;;;:42;;;;28206:6;28185:9;:13;28195:2;28185:13;;;;;;;;;;;:17;28199:2;28185:17;;;;;;;;;;;;;;;;:27;;;;;;;:::i;:::-;;;;;;;;28261:2;28230:46;;28255:4;28230:46;;28245:8;28230:46;;;28265:2;28269:6;28230:46;;;;;;;:::i;:::-;;;;;;;;28289:59;28309:8;28319:4;28325:2;28329:3;28334:7;28343:4;28289:19;:59::i;:::-;28361:68;28392:8;28402:4;28408:2;28412;28416:6;28424:4;28361:30;:68::i;:::-;27632:805;;;;27463:974;;;;;:::o;39793:198::-;39859:16;39888:22;39927:1;39913:16;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;39888:41;;39951:7;39940:5;39946:1;39940:8;;;;;;;;:::i;:::-;;;;;;;:18;;;;;39978:5;39971:12;;;39793:198;;;:::o;43003:291::-;43220:66;43247:8;43257:4;43263:2;43267:3;43272:7;43281:4;43220:26;:66::i;:::-;43003:291;;;;;;:::o;37992:220::-;;;;;;;:::o;38220:744::-;38435:15;:2;:13;;;:15::i;:::-;38431:526;;;38488:2;38471:38;;;38510:8;38520:4;38526:2;38530:6;38538:4;38471:72;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;38467:479;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;38819:6;38812:14;;;;;;;;;;;:::i;:::-;;;;;;;;38467:479;;;38868:62;;;;;;;;;;:::i;:::-;;;;;;;;38467:479;38605:43;;;38593:55;;;:8;:55;;;;38589:154;;38673:50;;;;;;;;;;:::i;:::-;;;;;;;;38589:154;38544:214;38431:526;38220:744;;;;;;:::o;38972:813::-;39212:15;:2;:13;;;:15::i;:::-;39208:570;;;39265:2;39248:43;;;39292:8;39302:4;39308:3;39313:7;39322:4;39248:79;;;;;;;;;;;;;;;;;;;:::i;:::-;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;:::i;:::-;;;39244:523;;;;:::i;:::-;;;;;;;;;:::i;:::-;;;;;;;;39640:6;39633:14;;;;;;;;;;;:::i;:::-;;;;;;;;39244:523;;;39689:62;;;;;;;;;;:::i;:::-;;;;;;;;39244:523;39421:48;;;39409:60;;;:8;:60;;;;39405:159;;39494:50;;;;;;;;;;:::i;:::-;;;;;;;;39405:159;39328:251;39208:570;38972:813;;;;;;:::o;5060:326::-;5120:4;5377:1;5355:7;:19;;;:23;5348:30;;5060:326;;;:::o;41146:931::-;41385:66;41412:8;41422:4;41428:2;41432:3;41437:7;41446:4;41385:26;:66::i;:::-;41484:1;41468:18;;:4;:18;;;41464:160;;41508:9;41503:110;41527:3;:10;41523:1;:14;41503:110;;;41587:7;41595:1;41587:10;;;;;;;;:::i;:::-;;;;;;;;41563:12;:20;41576:3;41580:1;41576:6;;;;;;;;:::i;:::-;;;;;;;;41563:20;;;;;;;;;;;;:34;;;;;;;:::i;:::-;;;;;;;;41539:3;;;;:::i;:::-;;;41503:110;;;;41464:160;41654:1;41640:16;;:2;:16;;;41636:434;;41678:9;41673:386;41697:3;:10;41693:1;:14;41673:386;;;41733:10;41746:3;41750:1;41746:6;;;;;;;;:::i;:::-;;;;;;;;41733:19;;41771:14;41788:7;41796:1;41788:10;;;;;;;;:::i;:::-;;;;;;;;41771:27;;41817:14;41834:12;:16;41847:2;41834:16;;;;;;;;;;;;41817:33;;41887:6;41877;:16;;41869:69;;;;;;;;;;;;:::i;:::-;;;;;;;;;42018:6;42009;:15;41990:12;:16;42003:2;41990:16;;;;;;;;;;;:34;;;;41714:345;;;41709:3;;;;:::i;:::-;;;41673:386;;;;41636:434;41146:931;;;;;;:::o;36816:221::-;;;;;;;:::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:117::-;3322:1;3319;3312:12;3336:117;3445:1;3442;3435:12;3459:102;3500:6;3551:2;3547:7;3542:2;3535:5;3531:14;3527:28;3517:38;;3459:102;;;:::o;3567:180::-;3615:77;3612:1;3605:88;3712:4;3709:1;3702:15;3736:4;3733:1;3726:15;3753:281;3836:27;3858:4;3836:27;:::i;:::-;3828:6;3824:40;3966:6;3954:10;3951:22;3930:18;3918:10;3915:34;3912:62;3909:88;;;3977:18;;:::i;:::-;3909:88;4017:10;4013:2;4006:22;3796:238;3753:281;;:::o;4040:129::-;4074:6;4101:20;;:::i;:::-;4091:30;;4130:33;4158:4;4150:6;4130:33;:::i;:::-;4040:129;;;:::o;4175:308::-;4237:4;4327:18;4319:6;4316:30;4313:56;;;4349:18;;:::i;:::-;4313:56;4387:29;4409:6;4387:29;:::i;:::-;4379:37;;4471:4;4465;4461:15;4453:23;;4175:308;;;:::o;4489:146::-;4586:6;4581:3;4576;4563:30;4627:1;4618:6;4613:3;4609:16;4602:27;4489:146;;;:::o;4641:425::-;4719:5;4744:66;4760:49;4802:6;4760:49;:::i;:::-;4744:66;:::i;:::-;4735:75;;4833:6;4826:5;4819:21;4871:4;4864:5;4860:16;4909:3;4900:6;4895:3;4891:16;4888:25;4885:112;;;4916:79;;:::i;:::-;4885:112;5006:54;5053:6;5048:3;5043;5006:54;:::i;:::-;4725:341;4641:425;;;;;:::o;5086:340::-;5142:5;5191:3;5184:4;5176:6;5172:17;5168:27;5158:122;;5199:79;;:::i;:::-;5158:122;5316:6;5303:20;5341:79;5416:3;5408:6;5401:4;5393:6;5389:17;5341:79;:::i;:::-;5332:88;;5148:278;5086:340;;;;:::o;5432:509::-;5501:6;5550:2;5538:9;5529:7;5525:23;5521:32;5518:119;;;5556:79;;:::i;:::-;5518:119;5704:1;5693:9;5689:17;5676:31;5734:18;5726:6;5723:30;5720:117;;;5756:79;;:::i;:::-;5720:117;5861:63;5916:7;5907:6;5896:9;5892:22;5861:63;:::i;:::-;5851:73;;5647:287;5432:509;;;;:::o;5947:99::-;5999:6;6033:5;6027:12;6017:22;;5947:99;;;:::o;6052:169::-;6136:11;6170:6;6165:3;6158:19;6210:4;6205:3;6201:14;6186:29;;6052:169;;;;:::o;6227:246::-;6308:1;6318:113;6332:6;6329:1;6326:13;6318:113;;;6417:1;6412:3;6408:11;6402:18;6398:1;6393:3;6389:11;6382:39;6354:2;6351:1;6347:10;6342:15;;6318:113;;;6465:1;6456:6;6451:3;6447:16;6440:27;6289:184;6227:246;;;:::o;6479:377::-;6567:3;6595:39;6628:5;6595:39;:::i;:::-;6650:71;6714:6;6709:3;6650:71;:::i;:::-;6643:78;;6730:65;6788:6;6783:3;6776:4;6769:5;6765:16;6730:65;:::i;:::-;6820:29;6842:6;6820:29;:::i;:::-;6815:3;6811:39;6804:46;;6571:285;6479:377;;;;:::o;6862:313::-;6975:4;7013:2;7002:9;6998:18;6990:26;;7062:9;7056:4;7052:20;7048:1;7037:9;7033:17;7026:47;7090:78;7163:4;7154:6;7090:78;:::i;:::-;7082:86;;6862:313;;;;:::o;7181:329::-;7240:6;7289:2;7277:9;7268:7;7264:23;7260:32;7257:119;;;7295:79;;:::i;:::-;7257:119;7415:1;7440:53;7485:7;7476:6;7465:9;7461:22;7440:53;:::i;:::-;7430:63;;7386:117;7181:329;;;;:::o;7516:619::-;7593:6;7601;7609;7658:2;7646:9;7637:7;7633:23;7629:32;7626:119;;;7664:79;;:::i;:::-;7626:119;7784:1;7809:53;7854:7;7845:6;7834:9;7830:22;7809:53;:::i;:::-;7799:63;;7755:117;7911:2;7937:53;7982:7;7973:6;7962:9;7958:22;7937:53;:::i;:::-;7927:63;;7882:118;8039:2;8065:53;8110:7;8101:6;8090:9;8086:22;8065:53;:::i;:::-;8055:63;;8010:118;7516:619;;;;;:::o;8141:311::-;8218:4;8308:18;8300:6;8297:30;8294:56;;;8330:18;;:::i;:::-;8294:56;8380:4;8372:6;8368:17;8360:25;;8440:4;8434;8430:15;8422:23;;8141:311;;;:::o;8458:117::-;8567:1;8564;8557:12;8598:710;8694:5;8719:81;8735:64;8792:6;8735:64;:::i;:::-;8719:81;:::i;:::-;8710:90;;8820:5;8849:6;8842:5;8835:21;8883:4;8876:5;8872:16;8865:23;;8936:4;8928:6;8924:17;8916:6;8912:30;8965:3;8957:6;8954:15;8951:122;;;8984:79;;:::i;:::-;8951:122;9099:6;9082:220;9116:6;9111:3;9108:15;9082:220;;;9191:3;9220:37;9253:3;9241:10;9220:37;:::i;:::-;9215:3;9208:50;9287:4;9282:3;9278:14;9271:21;;9158:144;9142:4;9137:3;9133:14;9126:21;;9082:220;;;9086:21;8700:608;;8598:710;;;;;:::o;9331:370::-;9402:5;9451:3;9444:4;9436:6;9432:17;9428:27;9418:122;;9459:79;;:::i;:::-;9418:122;9576:6;9563:20;9601:94;9691:3;9683:6;9676:4;9668:6;9664:17;9601:94;:::i;:::-;9592:103;;9408:293;9331:370;;;;:::o;9707:307::-;9768:4;9858:18;9850:6;9847:30;9844:56;;;9880:18;;:::i;:::-;9844:56;9918:29;9940:6;9918:29;:::i;:::-;9910:37;;10002:4;9996;9992:15;9984:23;;9707:307;;;:::o;10020:423::-;10097:5;10122:65;10138:48;10179:6;10138:48;:::i;:::-;10122:65;:::i;:::-;10113:74;;10210:6;10203:5;10196:21;10248:4;10241:5;10237:16;10286:3;10277:6;10272:3;10268:16;10265:25;10262:112;;;10293:79;;:::i;:::-;10262:112;10383:54;10430:6;10425:3;10420;10383:54;:::i;:::-;10103:340;10020:423;;;;;:::o;10462:338::-;10517:5;10566:3;10559:4;10551:6;10547:17;10543:27;10533:122;;10574:79;;:::i;:::-;10533:122;10691:6;10678:20;10716:78;10790:3;10782:6;10775:4;10767:6;10763:17;10716:78;:::i;:::-;10707:87;;10523:277;10462:338;;;;:::o;10806:1363::-;10951:6;10959;10967;10975;11024:3;11012:9;11003:7;10999:23;10995:33;10992:120;;;11031:79;;:::i;:::-;10992:120;11151:1;11176:53;11221:7;11212:6;11201:9;11197:22;11176:53;:::i;:::-;11166:63;;11122:117;11306:2;11295:9;11291:18;11278:32;11337:18;11329:6;11326:30;11323:117;;;11359:79;;:::i;:::-;11323:117;11464:78;11534:7;11525:6;11514:9;11510:22;11464:78;:::i;:::-;11454:88;;11249:303;11619:2;11608:9;11604:18;11591:32;11650:18;11642:6;11639:30;11636:117;;;11672:79;;:::i;:::-;11636:117;11777:78;11847:7;11838:6;11827:9;11823:22;11777:78;:::i;:::-;11767:88;;11562:303;11932:2;11921:9;11917:18;11904:32;11963:18;11955:6;11952:30;11949:117;;;11985:79;;:::i;:::-;11949:117;12090:62;12144:7;12135:6;12124:9;12120:22;12090:62;:::i;:::-;12080:72;;11875:287;10806:1363;;;;;;;:::o;12175:1509::-;12329:6;12337;12345;12353;12361;12410:3;12398:9;12389:7;12385:23;12381:33;12378:120;;;12417:79;;:::i;:::-;12378:120;12537:1;12562:53;12607:7;12598:6;12587:9;12583:22;12562:53;:::i;:::-;12552:63;;12508:117;12664:2;12690:53;12735:7;12726:6;12715:9;12711:22;12690:53;:::i;:::-;12680:63;;12635:118;12820:2;12809:9;12805:18;12792:32;12851:18;12843:6;12840:30;12837:117;;;12873:79;;:::i;:::-;12837:117;12978:78;13048:7;13039:6;13028:9;13024:22;12978:78;:::i;:::-;12968:88;;12763:303;13133:2;13122:9;13118:18;13105:32;13164:18;13156:6;13153:30;13150:117;;;13186:79;;:::i;:::-;13150:117;13291:78;13361:7;13352:6;13341:9;13337:22;13291:78;:::i;:::-;13281:88;;13076:303;13446:3;13435:9;13431:19;13418:33;13478:18;13470:6;13467:30;13464:117;;;13500:79;;:::i;:::-;13464:117;13605:62;13659:7;13650:6;13639:9;13635:22;13605:62;:::i;:::-;13595:72;;13389:288;12175:1509;;;;;;;;:::o;13690:311::-;13767:4;13857:18;13849:6;13846:30;13843:56;;;13879:18;;:::i;:::-;13843:56;13929:4;13921:6;13917:17;13909:25;;13989:4;13983;13979:15;13971:23;;13690:311;;;:::o;14024:710::-;14120:5;14145:81;14161:64;14218:6;14161:64;:::i;:::-;14145:81;:::i;:::-;14136:90;;14246:5;14275:6;14268:5;14261:21;14309:4;14302:5;14298:16;14291:23;;14362:4;14354:6;14350:17;14342:6;14338:30;14391:3;14383:6;14380:15;14377:122;;;14410:79;;:::i;:::-;14377:122;14525:6;14508:220;14542:6;14537:3;14534:15;14508:220;;;14617:3;14646:37;14679:3;14667:10;14646:37;:::i;:::-;14641:3;14634:50;14713:4;14708:3;14704:14;14697:21;;14584:144;14568:4;14563:3;14559:14;14552:21;;14508:220;;;14512:21;14126:608;;14024:710;;;;;:::o;14757:370::-;14828:5;14877:3;14870:4;14862:6;14858:17;14854:27;14844:122;;14885:79;;:::i;:::-;14844:122;15002:6;14989:20;15027:94;15117:3;15109:6;15102:4;15094:6;15090:17;15027:94;:::i;:::-;15018:103;;14834:293;14757:370;;;;:::o;15133:894::-;15251:6;15259;15308:2;15296:9;15287:7;15283:23;15279:32;15276:119;;;15314:79;;:::i;:::-;15276:119;15462:1;15451:9;15447:17;15434:31;15492:18;15484:6;15481:30;15478:117;;;15514:79;;:::i;:::-;15478:117;15619:78;15689:7;15680:6;15669:9;15665:22;15619:78;:::i;:::-;15609:88;;15405:302;15774:2;15763:9;15759:18;15746:32;15805:18;15797:6;15794:30;15791:117;;;15827:79;;:::i;:::-;15791:117;15932:78;16002:7;15993:6;15982:9;15978:22;15932:78;:::i;:::-;15922:88;;15717:303;15133:894;;;;;:::o;16033:114::-;16100:6;16134:5;16128:12;16118:22;;16033:114;;;:::o;16153:184::-;16252:11;16286:6;16281:3;16274:19;16326:4;16321:3;16317:14;16302:29;;16153:184;;;;:::o;16343:132::-;16410:4;16433:3;16425:11;;16463:4;16458:3;16454:14;16446:22;;16343:132;;;:::o;16481:108::-;16558:24;16576:5;16558:24;:::i;:::-;16553:3;16546:37;16481:108;;:::o;16595:179::-;16664:10;16685:46;16727:3;16719:6;16685:46;:::i;:::-;16763:4;16758:3;16754:14;16740:28;;16595:179;;;;:::o;16780:113::-;16850:4;16882;16877:3;16873:14;16865:22;;16780:113;;;:::o;16929:732::-;17048:3;17077:54;17125:5;17077:54;:::i;:::-;17147:86;17226:6;17221:3;17147:86;:::i;:::-;17140:93;;17257:56;17307:5;17257:56;:::i;:::-;17336:7;17367:1;17352:284;17377:6;17374:1;17371:13;17352:284;;;17453:6;17447:13;17480:63;17539:3;17524:13;17480:63;:::i;:::-;17473:70;;17566:60;17619:6;17566:60;:::i;:::-;17556:70;;17412:224;17399:1;17396;17392:9;17387:14;;17352:284;;;17356:14;17652:3;17645:10;;17053:608;;;16929:732;;;;:::o;17667:373::-;17810:4;17848:2;17837:9;17833:18;17825:26;;17897:9;17891:4;17887:20;17883:1;17872:9;17868:17;17861:47;17925:108;18028:4;18019:6;17925:108;:::i;:::-;17917:116;;17667:373;;;;:::o;18046:539::-;18130:6;18179:2;18167:9;18158:7;18154:23;18150:32;18147:119;;;18185:79;;:::i;:::-;18147:119;18333:1;18322:9;18318:17;18305:31;18363:18;18355:6;18352:30;18349:117;;;18385:79;;:::i;:::-;18349:117;18490:78;18560:7;18551:6;18540:9;18536:22;18490:78;:::i;:::-;18480:88;;18276:302;18046:539;;;;:::o;18591:118::-;18678:24;18696:5;18678:24;:::i;:::-;18673:3;18666:37;18591:118;;:::o;18715:222::-;18808:4;18846:2;18835:9;18831:18;18823:26;;18859:71;18927:1;18916:9;18912:17;18903:6;18859:71;:::i;:::-;18715:222;;;;:::o;18943:116::-;19013:21;19028:5;19013:21;:::i;:::-;19006:5;19003:32;18993:60;;19049:1;19046;19039:12;18993:60;18943:116;:::o;19065:133::-;19108:5;19146:6;19133:20;19124:29;;19162:30;19186:5;19162:30;:::i;:::-;19065:133;;;;:::o;19204:468::-;19269:6;19277;19326:2;19314:9;19305:7;19301:23;19297:32;19294:119;;;19332:79;;:::i;:::-;19294:119;19452:1;19477:53;19522:7;19513:6;19502:9;19498:22;19477:53;:::i;:::-;19467:63;;19423:117;19579:2;19605:50;19647:7;19638:6;19627:9;19623:22;19605:50;:::i;:::-;19595:60;;19550:115;19204:468;;;;;:::o;19678:474::-;19746:6;19754;19803:2;19791:9;19782:7;19778:23;19774:32;19771:119;;;19809:79;;:::i;:::-;19771:119;19929:1;19954:53;19999:7;19990:6;19979:9;19975:22;19954:53;:::i;:::-;19944:63;;19900:117;20056:2;20082:53;20127:7;20118:6;20107:9;20103:22;20082:53;:::i;:::-;20072:63;;20027:118;19678:474;;;;;:::o;20158:1089::-;20262:6;20270;20278;20286;20294;20343:3;20331:9;20322:7;20318:23;20314:33;20311:120;;;20350:79;;:::i;:::-;20311:120;20470:1;20495:53;20540:7;20531:6;20520:9;20516:22;20495:53;:::i;:::-;20485:63;;20441:117;20597:2;20623:53;20668:7;20659:6;20648:9;20644:22;20623:53;:::i;:::-;20613:63;;20568:118;20725:2;20751:53;20796:7;20787:6;20776:9;20772:22;20751:53;:::i;:::-;20741:63;;20696:118;20853:2;20879:53;20924:7;20915:6;20904:9;20900:22;20879:53;:::i;:::-;20869:63;;20824:118;21009:3;20998:9;20994:19;20981:33;21041:18;21033:6;21030:30;21027:117;;;21063:79;;:::i;:::-;21027:117;21168:62;21222:7;21213:6;21202:9;21198:22;21168:62;:::i;:::-;21158:72;;20952:288;20158:1089;;;;;;;;:::o;21253:329::-;21312:6;21361:2;21349:9;21340:7;21336:23;21332:32;21329:119;;;21367:79;;:::i;:::-;21329:119;21487:1;21512:53;21557:7;21548:6;21537:9;21533:22;21512:53;:::i;:::-;21502:63;;21458:117;21253:329;;;;:::o;21588:229::-;21728:34;21724:1;21716:6;21712:14;21705:58;21797:12;21792:2;21784:6;21780:15;21773:37;21588:229;:::o;21823:366::-;21965:3;21986:67;22050:2;22045:3;21986:67;:::i;:::-;21979:74;;22062:93;22151:3;22062:93;:::i;:::-;22180:2;22175:3;22171:12;22164:19;;21823:366;;;:::o;22195:419::-;22361:4;22399:2;22388:9;22384:18;22376:26;;22448:9;22442:4;22438:20;22434:1;22423:9;22419:17;22412:47;22476:131;22602:4;22476:131;:::i;:::-;22468:139;;22195:419;;;:::o;22620:180::-;22668:77;22665:1;22658:88;22765:4;22762:1;22755:15;22789:4;22786:1;22779:15;22806:320;22850:6;22887:1;22881:4;22877:12;22867:22;;22934:1;22928:4;22924:12;22955:18;22945:81;;23011:4;23003:6;22999:17;22989:27;;22945:81;23073:2;23065:6;23062:14;23042:18;23039:38;23036:84;;23092:18;;:::i;:::-;23036:84;22857:269;22806:320;;;:::o;23132:141::-;23181:4;23204:3;23196:11;;23227:3;23224:1;23217:14;23261:4;23258:1;23248:18;23240:26;;23132:141;;;:::o;23279:93::-;23316:6;23363:2;23358;23351:5;23347:14;23343:23;23333:33;;23279:93;;;:::o;23378:107::-;23422:8;23472:5;23466:4;23462:16;23441:37;;23378:107;;;;:::o;23491:393::-;23560:6;23610:1;23598:10;23594:18;23633:97;23663:66;23652:9;23633:97;:::i;:::-;23751:39;23781:8;23770:9;23751:39;:::i;:::-;23739:51;;23823:4;23819:9;23812:5;23808:21;23799:30;;23872:4;23862:8;23858:19;23851:5;23848:30;23838:40;;23567:317;;23491:393;;;;;:::o;23890:60::-;23918:3;23939:5;23932:12;;23890:60;;;:::o;23956:142::-;24006:9;24039:53;24057:34;24066:24;24084:5;24066:24;:::i;:::-;24057:34;:::i;:::-;24039:53;:::i;:::-;24026:66;;23956:142;;;:::o;24104:75::-;24147:3;24168:5;24161:12;;24104:75;;;:::o;24185:269::-;24295:39;24326:7;24295:39;:::i;:::-;24356:91;24405:41;24429:16;24405:41;:::i;:::-;24397:6;24390:4;24384:11;24356:91;:::i;:::-;24350:4;24343:105;24261:193;24185:269;;;:::o;24460:73::-;24505:3;24460:73;:::o;24539:189::-;24616:32;;:::i;:::-;24657:65;24715:6;24707;24701:4;24657:65;:::i;:::-;24592:136;24539:189;;:::o;24734:186::-;24794:120;24811:3;24804:5;24801:14;24794:120;;;24865:39;24902:1;24895:5;24865:39;:::i;:::-;24838:1;24831:5;24827:13;24818:22;;24794:120;;;24734:186;;:::o;24926:543::-;25027:2;25022:3;25019:11;25016:446;;;25061:38;25093:5;25061:38;:::i;:::-;25145:29;25163:10;25145:29;:::i;:::-;25135:8;25131:44;25328:2;25316:10;25313:18;25310:49;;;25349:8;25334:23;;25310:49;25372:80;25428:22;25446:3;25428:22;:::i;:::-;25418:8;25414:37;25401:11;25372:80;:::i;:::-;25031:431;;25016:446;24926:543;;;:::o;25475:117::-;25529:8;25579:5;25573:4;25569:16;25548:37;;25475:117;;;;:::o;25598:169::-;25642:6;25675:51;25723:1;25719:6;25711:5;25708:1;25704:13;25675:51;:::i;:::-;25671:56;25756:4;25750;25746:15;25736:25;;25649:118;25598:169;;;;:::o;25772:295::-;25848:4;25994:29;26019:3;26013:4;25994:29;:::i;:::-;25986:37;;26056:3;26053:1;26049:11;26043:4;26040:21;26032:29;;25772:295;;;;:::o;26072:1395::-;26189:37;26222:3;26189:37;:::i;:::-;26291:18;26283:6;26280:30;26277:56;;;26313:18;;:::i;:::-;26277:56;26357:38;26389:4;26383:11;26357:38;:::i;:::-;26442:67;26502:6;26494;26488:4;26442:67;:::i;:::-;26536:1;26560:4;26547:17;;26592:2;26584:6;26581:14;26609:1;26604:618;;;;27266:1;27283:6;27280:77;;;27332:9;27327:3;27323:19;27317:26;27308:35;;27280:77;27383:67;27443:6;27436:5;27383:67;:::i;:::-;27377:4;27370:81;27239:222;26574:887;;26604:618;26656:4;26652:9;26644:6;26640:22;26690:37;26722:4;26690:37;:::i;:::-;26749:1;26763:208;26777:7;26774:1;26771:14;26763:208;;;26856:9;26851:3;26847:19;26841:26;26833:6;26826:42;26907:1;26899:6;26895:14;26885:24;;26954:2;26943:9;26939:18;26926:31;;26800:4;26797:1;26793:12;26788:17;;26763:208;;;26999:6;26990:7;26987:19;26984:179;;;27057:9;27052:3;27048:19;27042:26;27100:48;27142:4;27134:6;27130:17;27119:9;27100:48;:::i;:::-;27092:6;27085:64;27007:156;26984:179;27209:1;27205;27197:6;27193:14;27189:22;27183:4;27176:36;26611:611;;;26574:887;;26164:1303;;;26072:1395;;:::o;27473:148::-;27575:11;27612:3;27597:18;;27473:148;;;;:::o;27651:874::-;27754:3;27791:5;27785:12;27820:36;27846:9;27820:36;:::i;:::-;27872:89;27954:6;27949:3;27872:89;:::i;:::-;27865:96;;27992:1;27981:9;27977:17;28008:1;28003:166;;;;28183:1;28178:341;;;;27970:549;;28003:166;28087:4;28083:9;28072;28068:25;28063:3;28056:38;28149:6;28142:14;28135:22;28127:6;28123:35;28118:3;28114:45;28107:52;;28003:166;;28178:341;28245:38;28277:5;28245:38;:::i;:::-;28305:1;28319:154;28333:6;28330:1;28327:13;28319:154;;;28407:7;28401:14;28397:1;28392:3;28388:11;28381:35;28457:1;28448:7;28444:15;28433:26;;28355:4;28352:1;28348:12;28343:17;;28319:154;;;28502:6;28497:3;28493:16;28486:23;;28185:334;;27970:549;;27758:767;;27651:874;;;;:::o;28531:269::-;28660:3;28682:92;28770:3;28761:6;28682:92;:::i;:::-;28675:99;;28791:3;28784:10;;28531:269;;;;:::o;28806:233::-;28946:34;28942:1;28934:6;28930:14;28923:58;29015:16;29010:2;29002:6;28998:15;28991:41;28806:233;:::o;29045:366::-;29187:3;29208:67;29272:2;29267:3;29208:67;:::i;:::-;29201:74;;29284:93;29373:3;29284:93;:::i;:::-;29402:2;29397:3;29393:12;29386:19;;29045:366;;;:::o;29417:419::-;29583:4;29621:2;29610:9;29606:18;29598:26;;29670:9;29664:4;29660:20;29656:1;29645:9;29641:17;29634:47;29698:131;29824:4;29698:131;:::i;:::-;29690:139;;29417:419;;;:::o;29842:228::-;29982:34;29978:1;29970:6;29966:14;29959:58;30051:11;30046:2;30038:6;30034:15;30027:36;29842:228;:::o;30076:366::-;30218:3;30239:67;30303:2;30298:3;30239:67;:::i;:::-;30232:74;;30315:93;30404:3;30315:93;:::i;:::-;30433:2;30428:3;30424:12;30417:19;;30076:366;;;:::o;30448:419::-;30614:4;30652:2;30641:9;30637:18;30629:26;;30701:9;30695:4;30691:20;30687:1;30676:9;30672:17;30665:47;30729:131;30855:4;30729:131;:::i;:::-;30721:139;;30448:419;;;:::o;30873:180::-;30921:77;30918:1;30911:88;31018:4;31015:1;31008:15;31042:4;31039:1;31032:15;31059:180;31107:77;31104:1;31097:88;31204:4;31201:1;31194:15;31228:4;31225:1;31218:15;31245:233;31284:3;31307:24;31325:5;31307:24;:::i;:::-;31298:33;;31353:66;31346:5;31343:77;31340:103;;31423:18;;:::i;:::-;31340:103;31470:1;31463:5;31459:13;31452:20;;31245:233;;;:::o;31484:225::-;31624:34;31620:1;31612:6;31608:14;31601:58;31693:8;31688:2;31680:6;31676:15;31669:33;31484:225;:::o;31715:366::-;31857:3;31878:67;31942:2;31937:3;31878:67;:::i;:::-;31871:74;;31954:93;32043:3;31954:93;:::i;:::-;32072:2;32067:3;32063:12;32056:19;;31715:366;;;:::o;32087:419::-;32253:4;32291:2;32280:9;32276:18;32268:26;;32340:9;32334:4;32330:20;32326:1;32315:9;32311:17;32304:47;32368:131;32494:4;32368:131;:::i;:::-;32360:139;;32087:419;;;:::o;32512:182::-;32652:34;32648:1;32640:6;32636:14;32629:58;32512:182;:::o;32700:366::-;32842:3;32863:67;32927:2;32922:3;32863:67;:::i;:::-;32856:74;;32939:93;33028:3;32939:93;:::i;:::-;33057:2;33052:3;33048:12;33041:19;;32700:366;;;:::o;33072:419::-;33238:4;33276:2;33265:9;33261:18;33253:26;;33325:9;33319:4;33315:20;33311:1;33300:9;33296:17;33289:47;33353:131;33479:4;33353:131;:::i;:::-;33345:139;;33072:419;;;:::o;33497:220::-;33637:34;33633:1;33625:6;33621:14;33614:58;33706:3;33701:2;33693:6;33689:15;33682:28;33497:220;:::o;33723:366::-;33865:3;33886:67;33950:2;33945:3;33886:67;:::i;:::-;33879:74;;33962:93;34051:3;33962:93;:::i;:::-;34080:2;34075:3;34071:12;34064:19;;33723:366;;;:::o;34095:419::-;34261:4;34299:2;34288:9;34284:18;34276:26;;34348:9;34342:4;34338:20;34334:1;34323:9;34319:17;34312:47;34376:131;34502:4;34376:131;:::i;:::-;34368:139;;34095:419;;;:::o;34520:191::-;34560:3;34579:20;34597:1;34579:20;:::i;:::-;34574:25;;34613:20;34631:1;34613:20;:::i;:::-;34608:25;;34656:1;34653;34649:9;34642:16;;34677:3;34674:1;34671:10;34668:36;;;34684:18;;:::i;:::-;34668:36;34520:191;;;;:::o;34717:332::-;34838:4;34876:2;34865:9;34861:18;34853:26;;34889:71;34957:1;34946:9;34942:17;34933:6;34889:71;:::i;:::-;34970:72;35038:2;35027:9;35023:18;35014:6;34970:72;:::i;:::-;34717:332;;;;;:::o;35055:227::-;35195:34;35191:1;35183:6;35179:14;35172:58;35264:10;35259:2;35251:6;35247:15;35240:35;35055:227;:::o;35288:366::-;35430:3;35451:67;35515:2;35510:3;35451:67;:::i;:::-;35444:74;;35527:93;35616:3;35527:93;:::i;:::-;35645:2;35640:3;35636:12;35629:19;;35288:366;;;:::o;35660:419::-;35826:4;35864:2;35853:9;35849:18;35841:26;;35913:9;35907:4;35903:20;35899:1;35888:9;35884:17;35877:47;35941:131;36067:4;35941:131;:::i;:::-;35933:139;;35660:419;;;:::o;36085:634::-;36306:4;36344:2;36333:9;36329:18;36321:26;;36393:9;36387:4;36383:20;36379:1;36368:9;36364:17;36357:47;36421:108;36524:4;36515:6;36421:108;:::i;:::-;36413:116;;36576:9;36570:4;36566:20;36561:2;36550:9;36546:18;36539:48;36604:108;36707:4;36698:6;36604:108;:::i;:::-;36596:116;;36085:634;;;;;:::o;36725:224::-;36865:34;36861:1;36853:6;36849:14;36842:58;36934:7;36929:2;36921:6;36917:15;36910:32;36725:224;:::o;36955:366::-;37097:3;37118:67;37182:2;37177:3;37118:67;:::i;:::-;37111:74;;37194:93;37283:3;37194:93;:::i;:::-;37312:2;37307:3;37303:12;37296:19;;36955:366;;;:::o;37327:419::-;37493:4;37531:2;37520:9;37516:18;37508:26;;37580:9;37574:4;37570:20;37566:1;37555:9;37551:17;37544:47;37608:131;37734:4;37608:131;:::i;:::-;37600:139;;37327:419;;;:::o;37752:229::-;37892:34;37888:1;37880:6;37876:14;37869:58;37961:12;37956:2;37948:6;37944:15;37937:37;37752:229;:::o;37987:366::-;38129:3;38150:67;38214:2;38209:3;38150:67;:::i;:::-;38143:74;;38226:93;38315:3;38226:93;:::i;:::-;38344:2;38339:3;38335:12;38328:19;;37987:366;;;:::o;38359:419::-;38525:4;38563:2;38552:9;38548:18;38540:26;;38612:9;38606:4;38602:20;38598:1;38587:9;38583:17;38576:47;38640:131;38766:4;38640:131;:::i;:::-;38632:139;;38359:419;;;:::o;38784:228::-;38924:34;38920:1;38912:6;38908:14;38901:58;38993:11;38988:2;38980:6;38976:15;38969:36;38784:228;:::o;39018:366::-;39160:3;39181:67;39245:2;39240:3;39181:67;:::i;:::-;39174:74;;39257:93;39346:3;39257:93;:::i;:::-;39375:2;39370:3;39366:12;39359:19;;39018:366;;;:::o;39390:419::-;39556:4;39594:2;39583:9;39579:18;39571:26;;39643:9;39637:4;39633:20;39629:1;39618:9;39614:17;39607:47;39671:131;39797:4;39671:131;:::i;:::-;39663:139;;39390:419;;;:::o;39815:98::-;39866:6;39900:5;39894:12;39884:22;;39815:98;;;:::o;39919:168::-;40002:11;40036:6;40031:3;40024:19;40076:4;40071:3;40067:14;40052:29;;39919:168;;;;:::o;40093:373::-;40179:3;40207:38;40239:5;40207:38;:::i;:::-;40261:70;40324:6;40319:3;40261:70;:::i;:::-;40254:77;;40340:65;40398:6;40393:3;40386:4;40379:5;40375:16;40340:65;:::i;:::-;40430:29;40452:6;40430:29;:::i;:::-;40425:3;40421:39;40414:46;;40183:283;40093:373;;;;:::o;40472:751::-;40695:4;40733:3;40722:9;40718:19;40710:27;;40747:71;40815:1;40804:9;40800:17;40791:6;40747:71;:::i;:::-;40828:72;40896:2;40885:9;40881:18;40872:6;40828:72;:::i;:::-;40910;40978:2;40967:9;40963:18;40954:6;40910:72;:::i;:::-;40992;41060:2;41049:9;41045:18;41036:6;40992:72;:::i;:::-;41112:9;41106:4;41102:20;41096:3;41085:9;41081:19;41074:49;41140:76;41211:4;41202:6;41140:76;:::i;:::-;41132:84;;40472:751;;;;;;;;:::o;41229:141::-;41285:5;41316:6;41310:13;41301:22;;41332:32;41358:5;41332:32;:::i;:::-;41229:141;;;;:::o;41376:349::-;41445:6;41494:2;41482:9;41473:7;41469:23;41465:32;41462:119;;;41500:79;;:::i;:::-;41462:119;41620:1;41645:63;41700:7;41691:6;41680:9;41676:22;41645:63;:::i;:::-;41635:73;;41591:127;41376:349;;;;:::o;41731:106::-;41775:8;41824:5;41819:3;41815:15;41794:36;;41731:106;;;:::o;41843:183::-;41878:3;41916:1;41898:16;41895:23;41892:128;;;41954:1;41951;41948;41933:23;41976:34;42007:1;42001:8;41976:34;:::i;:::-;41969:41;;41892:128;41843:183;:::o;42032:711::-;42071:3;42109:4;42091:16;42088:26;42117:5;42085:39;42146:20;;:::i;:::-;42221:1;42203:16;42199:24;42196:1;42190:4;42175:49;42254:4;42248:11;42353:16;42346:4;42338:6;42334:17;42331:39;42298:18;42290:6;42287:30;42271:113;42268:146;;;42399:5;;;;42268:146;42445:6;42439:4;42435:17;42481:3;42475:10;42508:18;42500:6;42497:30;42494:43;;;42530:5;;;;;;42494:43;42578:6;42571:4;42566:3;42562:14;42558:27;42637:1;42619:16;42615:24;42609:4;42605:35;42600:3;42597:44;42594:57;;;42644:5;;;;;;;42594:57;42661;42709:6;42703:4;42699:17;42691:6;42687:30;42681:4;42661:57;:::i;:::-;42734:3;42727:10;;42075:668;;;;;42032:711;;:::o;42749:239::-;42889:34;42885:1;42877:6;42873:14;42866:58;42958:22;42953:2;42945:6;42941:15;42934:47;42749:239;:::o;42994:366::-;43136:3;43157:67;43221:2;43216:3;43157:67;:::i;:::-;43150:74;;43233:93;43322:3;43233:93;:::i;:::-;43351:2;43346:3;43342:12;43335:19;;42994:366;;;:::o;43366:419::-;43532:4;43570:2;43559:9;43555:18;43547:26;;43619:9;43613:4;43609:20;43605:1;43594:9;43590:17;43583:47;43647:131;43773:4;43647:131;:::i;:::-;43639:139;;43366:419;;;:::o;43791:227::-;43931:34;43927:1;43919:6;43915:14;43908:58;44000:10;43995:2;43987:6;43983:15;43976:35;43791:227;:::o;44024:366::-;44166:3;44187:67;44251:2;44246:3;44187:67;:::i;:::-;44180:74;;44263:93;44352:3;44263:93;:::i;:::-;44381:2;44376:3;44372:12;44365:19;;44024:366;;;:::o;44396:419::-;44562:4;44600:2;44589:9;44585:18;44577:26;;44649:9;44643:4;44639:20;44635:1;44624:9;44620:17;44613:47;44677:131;44803:4;44677:131;:::i;:::-;44669:139;;44396:419;;;:::o;44821:1053::-;45144:4;45182:3;45171:9;45167:19;45159:27;;45196:71;45264:1;45253:9;45249:17;45240:6;45196:71;:::i;:::-;45277:72;45345:2;45334:9;45330:18;45321:6;45277:72;:::i;:::-;45396:9;45390:4;45386:20;45381:2;45370:9;45366:18;45359:48;45424:108;45527:4;45518:6;45424:108;:::i;:::-;45416:116;;45579:9;45573:4;45569:20;45564:2;45553:9;45549:18;45542:48;45607:108;45710:4;45701:6;45607:108;:::i;:::-;45599:116;;45763:9;45757:4;45753:20;45747:3;45736:9;45732:19;45725:49;45791:76;45862:4;45853:6;45791:76;:::i;:::-;45783:84;;44821:1053;;;;;;;;:::o;45880:227::-;46020:34;46016:1;46008:6;46004:14;45997:58;46089:10;46084:2;46076:6;46072:15;46065:35;45880:227;:::o;46113:366::-;46255:3;46276:67;46340:2;46335:3;46276:67;:::i;:::-;46269:74;;46352:93;46441:3;46352:93;:::i;:::-;46470:2;46465:3;46461:12;46454:19;;46113:366;;;:::o;46485:419::-;46651:4;46689:2;46678:9;46674:18;46666:26;;46738:9;46732:4;46728:20;46724:1;46713:9;46709:17;46702:47;46766:131;46892:4;46766:131;:::i;:::-;46758:139;;46485:419;;;:::o
Swarm Source
ipfs://284cd4e1ec1e865001f3dcec2188569105b74a09d1f373f3628e07501776aab6
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.