Copyright (c) Alterlain.