public static Buf fromBase64(string s)
{
int slen = s.Length;
int si = 0;
int max = slen * 6 / 8;
byte[] buf = new byte[max];
int size = 0;
while (si < slen)
{
int n = 0;
int v = 0;
for (int j=0; j<4 && si<slen;)
{
int ch = s[si++];
int c = ch < 128 ? base64inv[ch] : -1;
if (c >= 0)
{
n |= c << (18 - j++ * 6);
if (ch != '=') v++;
}
}
if (v > 1) buf[size++] = (byte)(n >> 16);
if (v > 2) buf[size++] = (byte)(n >> 8);
if (v > 3) buf[size++] = (byte)n;
}
return new MemBuf(buf, size);
}