# This file allows mapping several author and committer email addresses and
# names to a single canonical one for `git shortlog`, `git log --author`,
# or `git check-mailmap`.
#
# For example, if you commit as `random.person@example.com` but sometimes use
# "Rañdom Person" and sometimes "Random Person" as name and you want the former
# to be your canonical name, add
#
#     Rañdom Person <random.person@example.com>
#
# If you commit as both `random.person@example.com` and `ranp@example.com` and
# you want the former to be your canonical email address, add
#
#     <random.person@example.com> <ranp@example.com>
#
# Combinations of both are possible too, see
# https://git-scm.com/docs/gitmailmap for format details.
#
# You can commit changes for your own names and email addresses without review.
# If you want to add entries for other people, please have them review the
# addition.
#
# Please keep this file sorted.

<compnerd@compnerd.org> <abdulras@fb.com>
<compnerd@compnerd.org> <abdulras@google.com>
<compnerd@compnerd.org> <abdulras@thebrowser.company>
<git@xen0n.name> <xen0n@gentoo.org>
<hans@hanshq.net> <hans@chromium.org>
<i@maskray.me> <maskray@google.com>
<JCTremoulet@gmail.com> <jotrem@microsoft.com>
<qcf@ecnelises.com> <qiucofan@cn.ibm.com> <qiucf@cn.ibm.com>
<rnk@llvm.org> <rnk@nvidia.com> <rnk@google.com> <reid@kleckner.net>
<thakis@chromium.org> <nicolasweber@gmx.de>
Adarsha Regmi <aregmi@qti.qualcomm.com> <aregmi@quicinc.com>
Benjamin Maxwell <benjamin.maxwell@arm.com> <macdue@dueutil.tech>
Brian Cain <brian.cain@oss.qualcomm.com> <bcain@quicinc.com>
Eli Friedman <efriedma@qti.qualcomm.com> <efriedma@quicinc.com>
Fateme Hosseini <Fhossein@qti.qualcomm.com> <quic_fhossein@quicinc.com>
Garvit Gupta <garvgupt@qti.qualcomm.com> <quic_garvgupt@quicinc.com>
Harsh Chandel <hchandel@qti.qualcomm.com> <quic_hchandel@quicinc.com>
Ikhlas Ajbar <iajbar@qti.qualcomm.com> <iajbar@codeaurora.org>
Ikhlas Ajbar <iajbar@qti.qualcomm.com> <iajbar@quicinc.com>
Jianjian GUAN <jacquesguan@me.com>
Jianjian GUAN <jacquesguan@me.com> <Jianjian.Guan@streamcomputing.com>
Jon Roelofs <jonathan_roelofs@apple.com> <jonathan@codesourcery.com>
Jon Roelofs <jonathan_roelofs@apple.com> <jroelofs@jroelofs.com>
Jonathan Thackray <jonathan.thackray@arm.com> <jthackray@users.noreply.github.com>
klensy <nightouser@gmail.com>
klensy <nightouser@gmail.com> <klensy@users.noreply.github.com>
LLVM GN Syncbot <llvmgnsyncbot@gmail.com>
Martin Storsjö <martin@martin.st>
Med Ismail Bennani <ismail@bennani.ma> <m.i.b@apple.com>
Med Ismail Bennani <ismail@bennani.ma> <medismail.bennani@gmail.com>
Min Hsu <min.hsu@sifive.com> <min@myhsu.dev>
Min Hsu <min.hsu@sifive.com> <minyihh@uci.edu>
Pengcheng Wang <wangpengcheng.pp@bytedance.com>
Pengcheng Wang <wangpengcheng.pp@bytedance.com> <137158460+wangpc-pp@users.noreply.github.com>
Pengcheng Wang <wangpengcheng.pp@bytedance.com> <pc.wang@linux.alibaba.com>
Ramkumar Ramachandra <r@artagnon.com> <artagnon@gmail.com>
Ramkumar Ramachandra <r@artagnon.com> <Ramkumar.Ramachandra@imgtec.com>
Saleem Abdulrasool <compnerd@compnerd.org>
Sam Elliott <aelliott@qti.qualcomm.com> <quic_aelliott@quicinc.com>
Sudharsan Veeravalli <svs@qti.qualcomm.com> <quic_svs@quicinc.com>
Sumanth Gundapaneni <sgundapa@qti.qualcomm.com> <sgundapa@quicinc.com>
Tommy Chiang <ty1208chiang@gmail.com> <oToToT@users.noreply.github.com>
Usman Nadeem <mnadeem@qti.qualcomm.com> <mnadeem@quicinc.com>
Venkata Ramanaiah Nalamothu <vnalamot@qti.qualcomm.com> <quic_vnalamot@quicinc.com>
