code: func (db *DB) QuerySeeds(n int, maxAge time.Duration) []*Node {
  	var (
  		now   = time.Now()
  		nodes = make([]*Node, 0, n)
  		it    = db.lvl.NewIterator(nil, nil)
  		id    ID
  	)
  	defer it.Release()
  
  seek:
  	for seeks := 0; len(nodes) < n && seeks < n*5; seeks++ {
  		// Seek to a random entry. The first byte is incremented by a
  		// random amount each time in order to increase the likelihood
  		// of hitting all existing nodes in very small databases.
  		ctr := id[0]
  		rand.Read(id[:])
  		id[0] = ctr + id[0]%16
  		it.Seek(nodeKey(id))
  
  		n := nextNode(it)
  		if n == nil {
  			id[0] = 0
  			continue seek // iterator exhausted
  		}
  		if now.Sub(db.LastPongReceived(n.ID(), n.IP())) > maxAge {
  			continue seek
  		}
  		for i := range nodes {
  			if nodes[i].ID() == n.ID() {
  				continue seek // duplicate
  			}
  		}
  		nodes = append(nodes, n)
  	}
  	return nodes
  }
docs: // QuerySeeds retrieves random nodes to be used as potential seed nodes
  // for bootstrapping.