<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def run(self, *args, **kwargs):
 """A blocking call that abstracts away the event loop initialisation from you. If you want more control over the event loop then this function should not be used. Use :meth:`start` coroutine or :meth:`connect` + :meth:`login`. Roughly Equivalent to: :: try: loop.run_until_complete(start(*args, **kwargs)) except KeyboardInterrupt: loop.run_until_complete(logout()) # cancel all tasks lingering finally: loop.close() .. warning:: This function must be the last function to call due to the fact that it is blocking. That means that registration of events or anything being called after this function call will not execute until it returns. """

        async def runner():
            try:
                await self.start(*args, **kwargs)
            finally:
                await self.close()

        try:
            self.loop.run_until_complete(runner())
        except KeyboardInterrupt:
            log.info('Received signal to terminate bot and event loop.')
        finally:
            log.info('Cleaning up tasks.')
            _cleanup_loop(self.loop)