(cherry picked from commit 27d572403ac98d83d652481da6c22ad50bb00168)
(cherry picked from commit 1127742e387ef78b91ec1e4cec0bb17b5e85666c)
(cherry picked from commit 203f5d519369235097fef2bdaefa6b3d0f5e963b)