(cherry picked from commit 490bb901e175abe1d2b4c198a7c0a0424218c6df)
(cherry picked from commit 16aac738581606c46b4938ff97b80c633f3f07c5)
(cherry picked from commit 9793734fdc73c0f3707ffcd74e1a0605eeebd77a)