# This is the official list of people who can contribute
# (and typically have contributed) code to the Go repository.
# The AUTHORS file lists the copyright holders; this file
# lists people.  For example, Google employees are listed here
# but not in AUTHORS, because Google holds the copyright.
#
# The submission process automatically checks to make sure
# that people submitting code are listed in this file (by email address).
#
# Names should be added to this file only after verifying that
# the individual or the individual's organization has agreed to
# the appropriate Contributor License Agreement, found here:
#
#     http://code.google.com/legal/individual-cla-v1.0.html
#     http://code.google.com/legal/corporate-cla-v1.0.html
#
# The agreement for individuals can be filled out on the web.
#
# When adding J Random Contributor's name to this file,
# either J's name or J's organization's name should be
# added to the AUTHORS file, depending on whether the
# individual or corporate CLA was used.

# Names should be added to this file like so:
#     Name <email address>

# Please keep the list sorted.

Abhinav Gupta <abhinav.g90@gmail.com>
Adam Langley <agl@golang.org>
Aron Nopanen <aron.nopanen@gmail.com>
Austin Clements <aclements@csail.mit.edu>
Ben Eitzen <eitzenb@golang.org>
Bill Neubauer <wcn@golang.org>
Brendan O'Dea <bod@golang.org>
Cary Hull <chull@google.com>
Chris Lennert <calennert@gmail.com>
Daniel Nadasi <dnadasi@google.com>
David G. Andersen <dave.andersen@gmail.com>
David Symonds <dsymonds@golang.org>
David Titarenco <david.titarenco@gmail.com>
Devon H. O'Dell <devon.odell@gmail.com>
Eden Li <eden.li@gmail.com>
Evan Shaw <chickencha@gmail.com>
Fazlul Shahriar <fshahriar@gmail.com>
Fumitoshi Ukai <ukai@google.com>
Ian Lance Taylor <iant@golang.org>
Ivan Krasin <krasin@golang.org>
Jacob Baskin <jbaskin@google.com>
James Aguilar <jaguilar@google.com>
James Meneghello <rawrz0r@gmail.com>
Josh Goebel <dreamer3@gmail.com>
Kai Backman <kaib@golang.org>
Ken Thompson <ken@golang.org>
Kevin Ballard <kevin@sb.org>
Larry Hosken <lahosken@golang.org>
Michael Elkins <michael.elkins@gmail.com>
Michael Hoisie <hoisie@gmail.com>
Môshe van der Sterre <moshevds@gmail.com>
Nigel Tao <nigeltao@golang.org>
Peter McKenzie <petermck@google.com>
Péter Szabó <pts@google.com>
Phil Pennock <pdp@golang.org>
Rob Pike <r@golang.org>
Robert Griesemer <gri@golang.org>
Roger Peppe <rogpeppe@gmail.com>
Russ Cox <rsc@golang.org>
Scott Schwartz <scotts@golang.org>
Sergey 'SnakE' Gromov <snake.scaly@gmail.com>
Sergio Luis O. B. Correia <sergio@larces.uece.br>
Stephen Ma <stephenm@golang.org>
Tom Szymanski <tgs@google.com>
Trevor Strohman <trevor.strohman@gmail.com>
Vish Subramanian <vish@google.com>
William Josephson <wjosephson@gmail.com>
