(cherry picked from commit d76cca5e1eae86450aa236e49a2024881d0bac01)
(cherry picked from commit 6932d0d19ea75c64ed38b82a246b68c6bbfb8cec) (cherry picked from commit 8e3da36b6b0a261975808bc67b5caca733a1a23d)
(cherry picked from commit 2232c91d5c277673929eab2abb5e0495c00877cb)