(cherry picked from commit 4ddba9d454ebfd221f39ba12b375401768ff7f45)
(cherry picked from commit 52bfc4dac00bf1e1be9a3d8e49a72d18c4c401bf)
(cherry picked from commit 50b181318b07c0f93827e8d6c3abfb34a3cd0c84)