type Reader … // NewReader creates a new trace reader. func NewReader(r io.Reader) (*Reader, error) { … } // ReadEvent reads a single event from the stream. // // If the stream has been exhausted, it returns an invalid // event and io.EOF. func (r *Reader) ReadEvent() (e Event, err error) { … } func dumpFrontier(frontier []*batchCursor) string { … }