(cherry picked from commit 3c1bb4af0009104e836f9110687a1da4e0ee3bb7)
(cherry picked from commit ee55ef51a60abc692fdef69614c9a8ccfa9358e0)
(cherry picked from commit 203f5d519369235097fef2bdaefa6b3d0f5e963b)