# This is the official list of Go frontend authors for copyright
# purposes.  This file is distinct from the CONTRIBUTORS files.
# See the latter for an explanation.

# Names should be added to this file as
#	Name or Organization <email address>
# The email address is not required for organizations.

# Please keep the list sorted.

Alexander Shopov <ash@kambanaria.org>
Andrew Wilkins <axwalk@gmail.com>
ARM Ltd.
Atos Infogerance
Baokun Lee <nototon@gmail.com>
Ben Shi <powerman1st@163.com>
Cavium
Christopher Wedgwood <cw@f00f.org>
Dave Cheney <dave@cheney.net>
Ettl Martin <ettl.martin78@googlemail.com>
Evan Shaw <edsrzf@gmail.com>
Google Inc.
IBM Inc.
James Clarke <jrtc27@jrtc27.com>
James Cowgill <james.cowgill@imgtec.com>
Janne Snabb <snabb@epipe.com>
Joel Sherrill <joel.sherrill@gmail.com>
John Paul Adrian Glaubitz <glaubitz@physik.fu-berlin.de>
Linaro
Massimiliano Ghilardi <massimiliano.ghilardi@gmail.com>
Matthias Klose <doko@ubuntu.com>
Nikhil Benesch <nikhil.benesch@gmail.com>
Oracle
Rainer Orth <ro@cebitec.uni-bielefeld.de>
Rémy Oudompheng <oudomphe@phare.normalesup.org>
Red Hat, Inc.
Sanjoy Das <sanjoy@playingwithpointers.com>
Shenghou Ma <minux@golang.org> <minux.ma@gmail.com>
Svante Signell <svante.signell@gmail.com>
Tobias Klauser <tklauser@distanz.ch>
Uros Bizjak <ubizjak@gmail.com>
Vinu Rajashekhar <vinutheraj@gmail.com>
Xia Bin <snyh@snyh.org>
