anchor.diff:    Iterable iter(SelectorFunction f) => _iterNode(list, f);
   
     int _index(int bit) => _bitCount(bitmap & (bit - 1));
  +
  +  @override
  +  Node<K, V> freeze() {
  +    final newList = new List()..length = list.length;
  +    for (int i = 0; i < list.length; i += 2) {
  +      final key = list[i];
  +      final nodeOrValue = list[i + 1];
  +      if (key != null) {
  +        newList[i] = list[i];
  +        newList[i + 1] = list[i + 1];
  +      } else if (nodeOrValue != null) {
  +        newList[i + 1] = (nodeOrValue as Node).freeze();
  +      }
  +    }
  +    return new BitmapIndexedNode(bitmap, newList);
  +  }
   
     @override
     Node<K, V> add(int shift, int hash, K key, V value, Box addedLeaf) {
  
positive.code:   }
  
    @override
    Node<K, V> add(int shift, int hash, K key, V value, Box addedLeaf) {
      int idx = mask(hash, shift);
      Node<K, V> node = list[idx];
  
negative.code:   Iterable iter(SelectorFunction f) => _iterNode(list, f);
  
    @override
    Node<K, V> freeze() {
      final newList = new List()..length = list.length;
      for (int i = 0; i < list.length; i += 2) {
        final key = list[i];
        final nodeOrValue = list[i + 1];
        if (key != null) {
          newList[i] = list[i];
          newList[i + 1] = list[i + 1];
        } else if (nodeOrValue != null) {
          newList[i + 1] = (nodeOrValue as Node).freeze();
        }
      }
      return new HashCollisionNode(hash, count, newList);
    }
  
    @override
    Node<K, V> add(int shift, int hash, K key, V value, Box addedLeaf) {
      if (hash == this.hash) {
        int idx = findIndex(key);
  