(cherry picked from commit 6ac99f67119f09729a3e08f35f58408598ebaaa9)
(cherry picked from commit 9bab5486138b98b0066b4d9adae9fde912566b32)
(cherry picked from commit fb5de635c9826631eac131f1c5d44e1f728386cd)