<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def _gradient_rgb_lines( self, text, start, stop, step=1, fore=None, back=None, style=None, movefactor=None):
 """ Yield colorized characters, morphing from one rgb value to another. This treats each line separately. """

        morphlist = list(self._morph_rgb(start, stop, step=step))
        if movefactor:
            # Moving means we need the morph to wrap around.
            morphlist.extend(self._morph_rgb(stop, start, step=step))
            if movefactor < 0:
                # Increase the start for each line.
                def move():
                    popped = []
                    for _ in range(abs(movefactor)):
                        try:
                            popped.append(morphlist.pop(0))
                        except IndexError:
                            pass
                    morphlist.extend(popped)
                    return morphlist
            else:
                # Decrease start for each line.
                def move():
                    for _ in range(movefactor):
                        try:
                            val = morphlist.pop(-1)
                        except IndexError:
                            pass
                        else:
                            morphlist.insert(0, val)
                    return morphlist

        return '\n'.join((
            self._gradient_rgb_line_from_morph(
                line,
                move() if movefactor else morphlist,
                fore=fore,
                back=back,
                style=style,
            )
            for i, line in enumerate(text.splitlines())
        ))