anchor.diff:  ///   value of the matched objectReference
   ///
   typedef CompletedFunction = void Function(
  -    String className, List<String> fields, dynamic value);
  +  String className,
  +  List<String> fields,
  +  dynamic value,
  +);
   
   class ObjectMatcher {
     ObjectMatcher(this._matchCompleted);
  
positive.code:       case 'externals':
          final externalsNode = AnalysisReference('Externals');
          analysisSnapshot.addChild(externalsNode);
          for (final ExternalReference ref in value) {
            final HeapGraphExternalLive liveExternal = ref.liveExternal;
            final HeapGraphElementLive liveElement = liveExternal.live;
  
            /// TODO(terry): Eliminate or show sentinels for total instances?
            final objectNode = AnalysisReference(
              '${ref.name}',
              countNote: liveElement.theClass.instancesCount,
            );
            externalsNode.addChild(objectNode);
            var childExternalSizes = 0;
            final bucketSizes = SplayTreeMap<String, Bucket>();
            for (final ExternalObjectReference child in ref.children) {
              if (child.externalSize < 10000) {
                bucketSizes.putIfAbsent(bucket10K, () => Bucket(0, 0));
                bucketSizes[bucket10K].totalCount += 1;
                bucketSizes[bucket10K].totalBytes += child.externalSize;
              } else if (child.externalSize < 50000) {
                bucketSizes.putIfAbsent(bucket50K, () => Bucket(0, 0));
                bucketSizes[bucket50K].totalCount += 1;
                bucketSizes[bucket50K].totalBytes += child.externalSize;
              } else if (child.externalSize < 100000) {
                bucketSizes.putIfAbsent(bucket100K, () => Bucket(0, 0));
                bucketSizes[bucket100K].totalCount += 1;
                bucketSizes[bucket100K].totalBytes += child.externalSize;
              } else if (child.externalSize < 500000) {
                bucketSizes.putIfAbsent(bucket500K, () => Bucket(0, 0));
                bucketSizes[bucket500K].totalCount += 1;
                bucketSizes[bucket500K].totalBytes += child.externalSize;
              } else if (child.externalSize < 1000000) {
                bucketSizes.putIfAbsent(bucket1M, () => Bucket(0, 0));
                bucketSizes[bucket1M].totalCount += 1;
                bucketSizes[bucket1M].totalBytes += child.externalSize;
              } else if (child.externalSize < 10000000) {
                bucketSizes.putIfAbsent(bucket10M, () => Bucket(0, 0));
                bucketSizes[bucket10M].totalCount += 1;
                bucketSizes[bucket10M].totalBytes += child.externalSize;
              } else if (child.externalSize < 50000000) {
                bucketSizes.putIfAbsent(bucket50M, () => Bucket(0, 0));
                bucketSizes[bucket50M].totalCount += 1;
                bucketSizes[bucket50M].totalBytes += child.externalSize;
              } else {
                bucketSizes.putIfAbsent(bucketBigM, () => Bucket(0, 0));
                bucketSizes[bucketBigM].totalCount += 1;
                bucketSizes[bucketBigM].totalBytes += child.externalSize;
              }
  
              childExternalSizes += child.externalSize;
  
negative.code:       for (final field in fields) {
          if (field.value.isSentinel) continue;
  
          final HeapGraphElementLive live = field.value as HeapGraphElementLive;
  
          if (live.references!.isNotEmpty) {
            _debugMonitor('${field.key} OBJECT Start');
  
            final fieldObjectNode = AnalysisField(field.key, '');
  