The ````Stream```` contract is designed to receive ETH but not implement function for withdrawal
The `Stream` contract instances can receive ETH but can not withdraw, ETH occasionally sent by users will be stuck in those contracts.\\nShown as the test case, it can receive ETH normally.\\n```\\ncontract StreamReceiveETHTest is StreamTest {\\n    function setUp() public override {\\n        super.setUp();\\n    }\\n\\n    function test_receiveETH() public {\\n        s = Stream(\\n            factory.createStream(\\n                payer, recipient, STREAM_AMOUNT, address(token), startTime, stopTime\\n            )\\n        );\\n\\n        vm.deal(payer, 10 ether);\\n        vm.prank(payer);\\n        (bool success, ) = address(s).call{value: 1 ether}("");\\n        assertEq(success, true);\\n        assertEq(address(s).balance, 1 ether);\\n    }\\n}\\n```\\n\\nResult\\n```\\nRunning 1 test for test/Stream.t.sol:StreamReceiveETHTest\\n[PASS] test_receiveETH() (gas: 167691)\\nTest result: ok. 1 passed; 0 failed; finished in 1.25ms\\n```\\n
Issue The `Stream` contract is designed to receive ETH but not implement function for withdrawal\\nAdd a `rescueETH()` function which is similar with the existing `rescueERC20()`
See Summary
```\\ncontract StreamReceiveETHTest is StreamTest {\\n    function setUp() public override {\\n        super.setUp();\\n    }\\n\\n    function test_receiveETH() public {\\n        s = Stream(\\n            factory.createStream(\\n                payer, recipient, STREAM_AMOUNT, address(token), startTime, stopTime\\n            )\\n        );\\n\\n        vm.deal(payer, 10 ether);\\n        vm.prank(payer);\\n        (bool success, ) = address(s).call{value: 1 ether}("");\\n        assertEq(success, true);\\n        assertEq(address(s).balance, 1 ether);\\n    }\\n}\\n```\\n