(cherry picked from commit 1116fb278bc5799839d7102322c0b5558374e70e)
(cherry picked from commit 61218ae71111acff6ba9697314c91963ece5b95f)
(cherry picked from commit a0014bed6529b15e07cf96413d4702c9904682a8)