(cherry picked from commit 255d0b5a8e529a34e1710c0aa010bba8d7bfadee)
(cherry picked from commit d6f1954346fdf35c57efcf384c478eb89d1847fb)
(cherry picked from commit 6b21128bc5da68ac987fa543bbd4973ca517407a)