(cherry picked from commit 7de0e93d5ab304b1026583df5d66522860bd791d)
(cherry picked from commit eb97447bb764b49e2d88f83e8a6ebd0b9c37c127)
(cherry picked from commit 19a0a83054f73c84a2d5600ef6a1c22e1c68e134)