public static uint[] badd(uint[] a, uint[] b)
{
var al = a.Length;
var bl = b.Length;
if (al < bl) return badd(b, a);
var r = new uint[al];
uint c = 0, n = 0;
for (; n < bl; n++)
{
c += a[n] + b[n];
r[n] = (uint)(c & bm);
c >>= bs;
}
for (; n < al; n++)
{
c += a[n];
r[n] = (uint)(c & bm);
c >>= bs;
}
if (c != 0) r[n] = c;
return r;
}