anchor.diff:      return node;
     }
   
  -  List<AssetId> _deserializeAssetIds(List<int> serializedIds) =>
  -      serializedIds.map((id) => _idToAssetId[id]).toList();
  +  Iterable<AssetId> _deserializeAssetIds(List<int> serializedIds) =>
  +      serializedIds.map((id) => _idToAssetId[id]);
   
     bool _deserializeBool(int value) => value == 0 ? false : true;
   }
   
   /// Serializes an [AssetGraph] into a [Map].
   class _AssetGraphSerializer {
  -  final _assetIdToId = <AssetId, int>{};
  +  // Iteration order does not matter
  +  final _assetIdToId = new HashMap<AssetId, int>();
   
     final AssetGraph _graph;
   
  
positive.code:       case _Field.PhaseNumber:
          return generatedNode.phaseNumber;
        case _Field.Globs:
          return generatedNode.globs.map((glob) => glob.pattern).toList();
        case _Field.NeedsUpdate:
          return _serializeBool(generatedNode.needsUpdate);
        case _Field.PreviousInputsDigest:
  
negative.code:     var graph = new AssetGraph._(
          _deserializeDigest(_serializedGraph['buildActionsDigest'] as String));
  
      var packageNames = _serializedGraph['packages'] as List<String>;
  
      // Read in the id => AssetId map from the graph first.
      var assetPaths = _serializedGraph['assetPaths'] as List;
      for (var i = 0; i < assetPaths.length; i += 2) {
        var packageName = packageNames[assetPaths[i + 1] as int];
        _idToAssetId[i ~/ 2] = new AssetId(packageName, assetPaths[i] as String);
      }
  
      // Read in all the nodes and their outputs.
  