# This is the official list of people who can contribute
# (and typically have contributed) code to the LUCI project.
# 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.
#
# 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:
#     Individual's name <submission email address>
#     Individual's name <submission email address> <email2> <emailN>
#
# An entry with multiple email addresses specifies that the
# first address should be used in the submit logs and
# that the other addresses should be recognized as the
# same person when interacting with Gerrit.

# Please keep the list sorted.

Andrew Wang <andrew.wang@cloudera.com>
Andrii Shyshkalov <tandrii@chromium.org>
Dan Jacques <dnj@chromium.org>
Dave Sansome <dsansome@chromium.org>
Eric Boren <borenet@chromium.org>
Erik Staab <estaab@chromium.org>
Kyle Cameron <kylecameron@google.com>
Marc-Antoine Ruel <maruel@chromium.org>
Mike Stipicevic <stip@chromium.org>
Nodir Turakulov <nodir@chromium.org>
Paweł Hajdan <phajdan.jr@chromium.org>
Philippe Gervais <pgervais@chromium.org>
Robert Iannucci <iannucci@chromium.org>
Roberto Carrillo <robertocn@chromium.org>
Roger Tawa <rogerta@chromium.org>
Ryan Tseng <hinoka@chromium.org>
Sergey Berezin <sergeyberezin@chromium.org>
Stephen Martinis <martiniss@chromium.org>
Todd Lipcon <todd@cloudera.com>
Vadim Shtayura <vadimsh@chromium.org>
Yoshisato Yanagisawa <yyanagisawa@chromium.org>
