Not test yet.
private static void Shift(IList<byte> data, int start, int length, int bits)
{
var to = start + length;
if (data.Count < to) to = data.Count;
var first = data[start];
for (var i = start; i < to; i++)
{
var current = i >= to - 1 ? first : data[i + 1]...