anchor.diff:  
   Random _random = new Random();
   
  -List _concat(List l1, List l2) => new List.from(l1)..addAll(l2);
  -
  -List _clone(List l) => new List.from(l);
  -
  -List _intersection(List l1, List l2) {
  -  final result = [];
  +List/*<T>*/ _concat/*<T>*/(List/*<T>*/ l1, List/*<T>*/ l2) =>
  +    new List<T>.from(l1)..addAll(l2);
  +
  +List/*<T>*/ _clone/*<T>*/(List/*<T>*/ l) => new List/*<T>*/.from(l);
  +
  +List/*<T>*/ _intersection/*<T>*/(List/*<T>*/ l1, List/*<T>*/ l2) {
  +  List<T> result = [];
     for (final item in l1) {
       if (!l2.contains(item)) continue;
       result.add(item);
  
positive.code:       newPromoted.clear();
      }
      node.addMarkersAtLevel(
          _concat(updated[i].markers[i], promoted) as List<M>, i);
  
      // Phase 2: Push markers leading into the inserted node higher, but no higher
      // than the height of the node
  
negative.code: 
      // Phase 1: Lower markers on edges to the left of node if needed
      for (var i = node.height - 1; i >= 0; i--) {
        for (final marker in _clone(updated[i].markers[i])) {
          final endIndex = intervalsByMarker[marker].endIndex;
          if (_comparator(node.next[i].index, endIndex) > 0) {
            newDemoted.add(marker);
  