Copyright (C) by lyude all rights reserved.