自己修改了一部分，暂未发现bug。望指正。