Copyright (c) 2010-2020 Robert Kieffer and other contributors