(cherry picked from commit 42b8df47677a49bfef096e30127fe1fe40016e38)
(cherry picked from commit ae3d44d8bd88660a7b5d6dc279c27eb15b0d5cf6)
(cherry picked from commit 040b80b35f64373c41a44aa13116d74618c8cff9)