anchor.diff:    List<int> _parseEscape(List<int> output, Controller controller, StreamController stdin, Model model, DisplayAttributes currAttributes) {
       List<int> escape;
       int termIndex;
  +
       for (int i = 1; i <= output.length; i++) {
         termIndex = i;
         escape = output.sublist(0, i);
  
positive.code: 
    StreamController<List<int>> stdout;
  
    OutputHandler() {
      stdout = new StreamController<List<int>>.broadcast();
    }
  
    /// Processes [output] by coordinating handling of strings
    /// and escape parsing.
    void processStdOut(List<int> output, Controller controller, StreamController stdin, Model model, DisplayAttributes currAttributes) {
      //print(output.toString());
      int nextEsc;
      while (output.isNotEmpty) {
        nextEsc = output.indexOf(ESC);
        if (nextEsc == -1) {
          _handleOutString(output, model, controller, currAttributes);
          return;
        } else {
          _handleOutString(output.sublist(0, nextEsc),  model, controller, currAttributes);
          output = _parseEscape(output.sublist(nextEsc), controller, stdin, model, currAttributes);
        }
      }
    }
  
negative.code:       bool escapeHandled = EscapeHandler.handleEscape(escape, stdin, model, currAttributes);
        if (escapeHandled) {
          controller.refreshDisplay();
          return output.sublist(termIndex);
        }
      }
  
      _incompleteEscape = new List.from(output);
      return [];
    }
  
    /// Appends a new [SpanElement] with the contents of [_outString]
    /// to the [_buffer] and updates the display.
    void _handleOutString(List<int> string, Model model, Controller controller, DisplayAttributes currAttributes) {
      //print('string: ' + string.toString());
      var codes = UTF8.decode(string).codeUnits;
      for (var code in codes) {
        String char = new String.fromCharCode(code);
  