Updated from source c3e0c47951daba1de3dded3b5a77be6840a823bf.