Merge changes from upstream a0705af6cec9ef68640aadfc82cec81133f6ecb3
Merge changes from upstream 7fbb1d338b66cfa78be07ce3b3e75e20ea953a3e
Merge changes from upstream 66d4a1896f9412962b29c058bad975852e4c6bdc