(cherry picked from commit f3efeaad540b000779277b4fc49a239529ee616e)
(cherry picked from commit 88c21c47a3d187d4f8c4e87e3c6088198cb08a99)
(cherry picked from commit ebd14bfce9ef6b4bf41129a329823130d1002f42)