Copyright (c) 2012-2018 Aseem Kishore, and [others].