# This is the official list of people who can contribute
# (and typically have contributed) code to the Go frontend
# 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.

Alexander Shopov <ash@kambanaria.org> <ash%kambanaria.org@gtempaccount.com>
Andreas Krebbel <krebbel@linux.vnet.ibm.com>
Andrew Wilkins <axwalk@gmail.com>
Chris Manghane <cmang@golang.org>
Christopher Wedgwood <cw@f00f.org>
Dave Cheney <dave@cheney.net>
David Daney <david.daney@cavium.com>
Diego Novillo <dnovillo@google.com>
Dominik Vogt <vogt@linux.vnet.ibm.com>
Ettl Martin <ettl.martin78@googlemail.com>
Evan Shaw <edsrzf@gmail.com>
Ian Lance Taylor <iant@golang.org>
James Clarke <jrtc27@jrtc27.com>
Janne Snabb <snabb@epipe.com>
Joel Sherrill <joel.sherrill@gmail.com>
Lynn A. Boger <laboger@linux.vnet.ibm.com>
Marek Polacek <mpolacek@redhat.com>
Matthias Klose <doko@ubuntu.com>
Matthieu Sarter <matthieu.sarter.external@atos.net>
Michael Hudson-Doyle <michael.hudson@linaro.org>
Peter Collingbourne <pcc@google.com>
Rainer Orth <ro@cebitec.uni-bielefeld.de>
Rémy Oudompheng <oudomphe@phare.normalesup.org> <remyoudompheng@gmail.com>
Richard Henderson <rth@redhat.com>
Roberto Lublinerman Reitzes <rluble@google.com> <rluble@gmail.com>
Sanjoy Das <sanjoy@playingwithpointers.com> <thedigitalangel@gmail.com>
Shenghou Ma <minux@golang.org> <minux.ma@gmail.com>
Tim Shen <timshen@google.com>
Than McIntosh <thanm@google.com>
Uros Bizjak <ubizjak@gmail.com>
Vinu Rajashekhar <vinutheraj@gmail.com>
Xia Bin <snyh@snyh.org>
