static void printbuf(const void *buf, size_t buflen) {
    const uint8_t *l = (const unsigned char*)buf;
    for (size_t i = 0; i < buflen; i++) {
        printf(" %02X", l[i]);
    }
}

static void print_limb(const char *name, mpz_srcptr x) {
    fprintf(stderr, "\t%s: alloc:%d size:%d\n", name, x->_mp_alloc, x->_mp_size);
    for (int i = 0; i < x->_mp_size; i++) {
        fprintf(stderr, "\t\t%d: ", i);
        printbuf(((uint8_t *)(x->_mp_d)) + i*8, 8);
        fprintf(stderr, "\n");
    }
}