部分更改，fork自eoe master