仍然有bug。但是几乎完成了