(c) 2017-2019 Fabrice Bellard