(cherry picked from commit 6f3ea66f9678371c67d9b3d9e73536a5d538868f)
(cherry picked from commit 0c673a1add01781c8457e385be0cc54d722b7bb4)
(cherry picked from commit 9287cc2d51974b2acbf570a285fddf07e3dd6157)