anchor.diff:      var root = 1;
   
       stackNodes[0] = root;
  -
  -    var stream = new ReadStream(_chunks);
  -    stream.position = positions[root];
  -    stream.skipUnsigned(); // addr
  -    stream.skipUnsigned(); // shallowSize
  -    stream.skipUnsigned(); // cid
  -    stackCurrentEdgePos[0] = stream.position;
  +    stackCurrentEdgePos[0] = firstSuccs[root];
       visited[root] = 1;
   
       while (stackTop >= 0) {
         var n = stackNodes[stackTop];
         var edgePos = stackCurrentEdgePos[stackTop];
   
  -      stream.position = edgePos;
  -      stream.readUnsigned();  // childAddr
  -      if (!stream.isZero) {
  -        stackCurrentEdgePos[stackTop] = stream.position;
  -        var childId = addrToId.get(stream.high, stream.mid, stream.low);
  -        if (childId == null) continue; // Reference to VM isolate's heap.
  -        E++;
  +      if (edgePos < firstSuccs[n + 1]) {
  +        var childId = succs[edgePos];
  +        edgePos++;
  +        stackCurrentEdgePos[stackTop] = edgePos;
           if (visited[childId] == 1) continue;
   
  +        // Push child.
           stackTop++;
           stackNodes[stackTop] = childId;
  -
  -        stream.position = positions[childId];
  -        stream.skipUnsigned(); // addr
  -        stream.skipUnsigned(); // shallowSize
  -        stream.skipUnsigned(); // cid
  -        stackCurrentEdgePos[stackTop] = stream.position; // i.e., first edge
  +        edgePos = firstSuccs[childId];
  +        stackCurrentEdgePos[stackTop] = edgePos;
           visited[childId] = 1;
         } else {
           // Done with all children.
  
positive.code:     return this;
    }
  
    final List<ByteData> _chunks;
  
    int _kObjectAlignment;
    int _N;
    int _E;
    int _size;
  
    AddressMapper _addrToId;
  
    // Indexed by node id, with id 0 representing invalid/uninitialized.
    Uint32List _positions; // Position of the node in the snapshot.
    Uint32List _postOrderOrdinals; // post-order index -> id
    Uint32List _postOrderIndices; // id -> post-order index
    Uint32List _firstPreds; // Offset into preds.
    Uint32List _preds;
    Uint32List _doms;
    Uint32List _retainedSizes;
  
    void _buildPositions() {
      var N = _N;
      var addrToId = new AddressMapper(N);
  
      var positions = new Uint32List(N + 1);
  
      var stream = new ReadStream(_chunks);
      stream.readUnsigned();
  
negative.code:     // We build futures here instead of marking the steps as async to avoid the
      // heavy lifting being inside a transformed method.
  
      statusReporter.add("Remapping $_N objects...");
      await new Future(() => _remapNodes());
  
      statusReporter.add("Remapping $_E references...");
      await new Future(() => _remapEdges());
  
      _addrToId = null;
      _chunks = null;
  
      statusReporter.add("Finding post order...");
      await new Future(() => _buildPostOrder());
  