contract ERC1967Proxy is Proxy, ERC1967Upgrade {
	/**
	 * @dev Initializes the upgradeable proxy with an initial implementation specified by `_logic`.
	 *
	 * If `_data` is nonempty, it's used as data in a delegate call to `_logic`. This will typically be an encoded
	 * function call, and allows initializating the storage of the proxy like a Solidity constructor.
	 */
	function initialize(address _logic, bytes calldata _data) external payable {
		assert(
			_IMPLEMENTATION_SLOT ==
				bytes32(uint256(keccak256("eip1967.proxy.implementation")) - 1)
		);
		_upgradeToAndCall(_logic, _data, false);
	}

	/**
	 * @dev Returns the current implementation address.
	 */
	function _implementation()
		internal
		view
		virtual
		override
		returns (address impl)
	{
		return ERC1967Upgrade._getImplementation();
	}
}
function _implementation()
	internal
	view
	virtual
	override
	returns (address impl)
{
	return ERC1967Upgrade._getImplementation();
}

/**
 	 * @dev Returns the current implementation address.
 	 */