<!--

  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.

-->

The following volunteers have contributed code, documentation, testing and/or support to the Apache Edgent(incubating).

Apache Edgent(incubating) 1.2.0
---------------------
Christofer Dutz
Dale LaBossiere
John Ament
Justin Mclean
Thomas Cristanis

Apache Edgent(incubating) 1.1.0
---------------------
Cazen Lee
Dale LaBossiere
Daniel John Debrunner
Justin Mclean
Katherine Marsden
Susan L. Cline
Victor Dogaru
William Marshall
Yaoling Chen

Apache Edgent(incubating) 1.0.0
---------------------
Alex Glikson
Alexander Cook
BJ Hargrave
Cazen Lee
Dale LaBossiere
Daniel John Debrunner
Daniel Takamori
James Mullineux
Julian Hyde
Justin Mclean
Katherine Marsden
Kathy Saunders
Luciano Resende
May Wone
Michael Dye
Mike Spicer
Queenie Ma
Saurabh Jinturkar
Sergey Vlasov
Susan L. Cline
Victor Dogaru
William Marshall
Yaoliang Chen

Many other people have contributed in other ways to the Apache Edgent(incubating) project
by helping out on the mailing list, maintaining the website, adding and editing wiki content,
raising bugs in JIRA, and with many other tasks.

Please check the Apache Edgent website [1], Apache Edgent wiki [2], dev mailing list [3],
Apache Edgent JIRA [4], GitHub mirror [5] for some of these contributions.

If you've missing from any of these lists please get in touch and you'll appear
in future versions of this document.

1. http://edgent.incubator.apache.org/
2. https://cwiki.apache.org/confluence/display/Edgent/Apache+Edgent+Wiki+Home
3. dev@edgent.incubator.apache.org
4. https://issues.apache.org/jira/browse/EDGENT
5. https://github.com/apache/incubator-edgent
