/*
 * This file generated automatically from xinput.xml by c_client.py.
 * Edit at your peril.
 */

#ifdef HAVE_CONFIG_H
#include "config.h"
#endif
#include <stdlib.h>
#include <string.h>
#include <assert.h>
#include <stddef.h>  /* for offsetof() */
#include "xcbext.h"
#include "xinput.h"

#define ALIGNOF(type) offsetof(struct { char dummy; type member; }, member)
#include "xfixes.h"

xcb_extension_t xcb_input_id = { "XInputExtension", 0 };

void
xcb_input_event_class_next (xcb_input_event_class_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_event_class_t);
}

xcb_generic_iterator_t
xcb_input_event_class_end (xcb_input_event_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_key_code_next (xcb_input_key_code_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_key_code_t);
}

xcb_generic_iterator_t
xcb_input_key_code_end (xcb_input_key_code_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_id_next (xcb_input_device_id_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_id_t);
}

xcb_generic_iterator_t
xcb_input_device_id_end (xcb_input_device_id_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_fp1616_next (xcb_input_fp1616_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_fp1616_t);
}

xcb_generic_iterator_t
xcb_input_fp1616_end (xcb_input_fp1616_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_fp3232_next (xcb_input_fp3232_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_fp3232_t);
}

xcb_generic_iterator_t
xcb_input_fp3232_end (xcb_input_fp3232_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_get_extension_version_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_extension_version_request_t *_aux = (xcb_input_get_extension_version_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_extension_version_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* name */
    xcb_block_len += _aux->name_len * sizeof(char);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_extension_version_cookie_t
xcb_input_get_extension_version (xcb_connection_t *c,
                                 uint16_t          name_len,
                                 const char       *name)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_EXTENSION_VERSION,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_get_extension_version_cookie_t xcb_ret;
    xcb_input_get_extension_version_request_t xcb_out;

    xcb_out.name_len = name_len;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* char name */
    xcb_parts[4].iov_base = (char *) name;
    xcb_parts[4].iov_len = name_len * sizeof(char);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_extension_version_cookie_t
xcb_input_get_extension_version_unchecked (xcb_connection_t *c,
                                           uint16_t          name_len,
                                           const char       *name)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_EXTENSION_VERSION,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_get_extension_version_cookie_t xcb_ret;
    xcb_input_get_extension_version_request_t xcb_out;

    xcb_out.name_len = name_len;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* char name */
    xcb_parts[4].iov_base = (char *) name;
    xcb_parts[4].iov_len = name_len * sizeof(char);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_extension_version_reply_t *
xcb_input_get_extension_version_reply (xcb_connection_t                          *c,
                                       xcb_input_get_extension_version_cookie_t   cookie  /**< */,
                                       xcb_generic_error_t                      **e)
{
    return (xcb_input_get_extension_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

void
xcb_input_device_info_next (xcb_input_device_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_info_t);
}

xcb_generic_iterator_t
xcb_input_device_info_end (xcb_input_device_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_key_info_next (xcb_input_key_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_key_info_t);
}

xcb_generic_iterator_t
xcb_input_key_info_end (xcb_input_key_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_button_info_next (xcb_input_button_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_button_info_t);
}

xcb_generic_iterator_t
xcb_input_button_info_end (xcb_input_button_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_axis_info_next (xcb_input_axis_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_axis_info_t);
}

xcb_generic_iterator_t
xcb_input_axis_info_end (xcb_input_axis_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_valuator_info_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_valuator_info_t *_aux = (xcb_input_valuator_info_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_valuator_info_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* axes */
    xcb_block_len += _aux->axes_len * sizeof(xcb_input_axis_info_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_axis_info_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_axis_info_t *
xcb_input_valuator_info_axes (const xcb_input_valuator_info_t *R)
{
    return (xcb_input_axis_info_t *) (R + 1);
}

int
xcb_input_valuator_info_axes_length (const xcb_input_valuator_info_t *R)
{
    return R->axes_len;
}

xcb_input_axis_info_iterator_t
xcb_input_valuator_info_axes_iterator (const xcb_input_valuator_info_t *R)
{
    xcb_input_axis_info_iterator_t i;
    i.data = (xcb_input_axis_info_t *) (R + 1);
    i.rem = R->axes_len;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_valuator_info_next (xcb_input_valuator_info_iterator_t *i)
{
    xcb_input_valuator_info_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_valuator_info_t *)(((char *)R) + xcb_input_valuator_info_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_valuator_info_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_valuator_info_end (xcb_input_valuator_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_valuator_info_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

xcb_input_axis_info_t *
xcb_input_input_info_info_valuator_axes (const xcb_input_input_info_info_t *S)
{
    return S->valuator.axes;
}

int
xcb_input_input_info_info_valuator_axes_length (const xcb_input_input_info_t *R,
                                                const xcb_input_input_info_info_t *S)
{
    return S->valuator.axes_len;
}

xcb_input_axis_info_iterator_t
xcb_input_input_info_info_valuator_axes_iterator (const xcb_input_input_info_t *R,
                                                  const xcb_input_input_info_info_t *S)
{
    xcb_input_axis_info_iterator_t i;
    i.data = S->valuator.axes;
    i.rem = S->valuator.axes_len;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_input_info_info_serialize (void                              **_buffer,
                                     uint8_t                             class_id,
                                     const xcb_input_input_info_info_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 2;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[11];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
        /* xcb_input_input_info_info_t.key.min_keycode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.min_keycode;
        xcb_block_len += sizeof(xcb_input_key_code_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_key_code_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_key_code_t);
        /* xcb_input_input_info_info_t.key.max_keycode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.max_keycode;
        xcb_block_len += sizeof(xcb_input_key_code_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_key_code_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_key_code_t);
        /* xcb_input_input_info_info_t.key.num_keys */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.num_keys;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_input_info_info_t.key.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
        /* xcb_input_input_info_info_t.button.num_buttons */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->button.num_buttons;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
        /* xcb_input_input_info_info_t.valuator.axes_len */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.axes_len;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_info_info_t.valuator.mode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.mode;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_info_info_t.valuator.motion_size */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.motion_size;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* axes */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->valuator.axes;
        xcb_block_len += _aux->valuator.axes_len * sizeof(xcb_input_axis_info_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->valuator.axes_len * sizeof(xcb_input_axis_info_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_axis_info_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_input_info_info_unpack (const void                   *_buffer,
                                  uint8_t                       class_id,
                                  xcb_input_input_info_info_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 2;


    if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
        /* xcb_input_input_info_info_t.key.min_keycode */
        _aux->key.min_keycode = *(xcb_input_key_code_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_key_code_t);
        xcb_tmp += sizeof(xcb_input_key_code_t);
        xcb_align_to = ALIGNOF(xcb_input_key_code_t);
        /* xcb_input_input_info_info_t.key.max_keycode */
        _aux->key.max_keycode = *(xcb_input_key_code_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_key_code_t);
        xcb_tmp += sizeof(xcb_input_key_code_t);
        xcb_align_to = ALIGNOF(xcb_input_key_code_t);
        /* xcb_input_input_info_info_t.key.num_keys */
        _aux->key.num_keys = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_input_info_info_t.key.pad0 */
        _aux->key.pad0[0] = *(uint8_t *)xcb_tmp;
        _aux->key.pad0[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
        /* xcb_input_input_info_info_t.button.num_buttons */
        _aux->button.num_buttons = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
        /* xcb_input_input_info_info_t.valuator.axes_len */
        _aux->valuator.axes_len = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_info_info_t.valuator.mode */
        _aux->valuator.mode = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_info_info_t.valuator.motion_size */
        _aux->valuator.motion_size = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* axes */
        _aux->valuator.axes = (xcb_input_axis_info_t *)xcb_tmp;
        xcb_block_len += _aux->valuator.axes_len * sizeof(xcb_input_axis_info_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(xcb_input_axis_info_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_input_info_info_sizeof (const void  *_buffer,
                                  uint8_t      class_id)
{
    xcb_input_input_info_info_t _aux;
    return xcb_input_input_info_info_unpack(_buffer, class_id, &_aux);
}

int
xcb_input_input_info_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_input_info_t *_aux = (xcb_input_input_info_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_input_info_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* info */
    xcb_block_len += xcb_input_input_info_info_sizeof(xcb_tmp, _aux->class_id);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_input_info_info (const xcb_input_input_info_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_input_info_next (xcb_input_input_info_iterator_t *i)
{
    xcb_input_input_info_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_input_info_t *)(((char *)R) + xcb_input_input_info_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_input_info_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_input_info_end (xcb_input_input_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_input_info_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_device_name_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_name_t *_aux = (xcb_input_device_name_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_name_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* string */
    xcb_block_len += _aux->len * sizeof(char);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

char *
xcb_input_device_name_string (const xcb_input_device_name_t *R)
{
    return (char *) (R + 1);
}

int
xcb_input_device_name_string_length (const xcb_input_device_name_t *R)
{
    return R->len;
}

xcb_generic_iterator_t
xcb_input_device_name_string_end (const xcb_input_device_name_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((char *) (R + 1)) + (R->len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_device_name_next (xcb_input_device_name_iterator_t *i)
{
    xcb_input_device_name_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_name_t *)(((char *)R) + xcb_input_device_name_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_name_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_name_end (xcb_input_device_name_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_name_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_list_input_devices_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_list_input_devices_reply_t *_aux = (xcb_input_list_input_devices_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const xcb_input_device_info_t* xcb_pre_tmp_4; /* sumof list ptr */
    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_list_input_devices_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* devices */
    xcb_block_len += _aux->devices_len * sizeof(xcb_input_device_info_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_device_info_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* infos */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->devices_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_list_input_devices_devices(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        xcb_pre_tmp_3 += xcb_pre_tmp_4->num_class_info;
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    for(i=0; i<xcb_pre_tmp_3; i++) {
        xcb_tmp_len = xcb_input_input_info_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_input_info_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* names */
    for(i=0; i<_aux->devices_len; i++) {
        xcb_tmp_len = xcb_str_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_str_t);
    xcb_align_to = 4;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_list_input_devices_cookie_t
xcb_input_list_input_devices (xcb_connection_t *c)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_LIST_INPUT_DEVICES,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_list_input_devices_cookie_t xcb_ret;
    xcb_input_list_input_devices_request_t xcb_out;


    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_list_input_devices_cookie_t
xcb_input_list_input_devices_unchecked (xcb_connection_t *c)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_LIST_INPUT_DEVICES,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_list_input_devices_cookie_t xcb_ret;
    xcb_input_list_input_devices_request_t xcb_out;


    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_device_info_t *
xcb_input_list_input_devices_devices (const xcb_input_list_input_devices_reply_t *R)
{
    return (xcb_input_device_info_t *) (R + 1);
}

int
xcb_input_list_input_devices_devices_length (const xcb_input_list_input_devices_reply_t *R)
{
    return R->devices_len;
}

xcb_input_device_info_iterator_t
xcb_input_list_input_devices_devices_iterator (const xcb_input_list_input_devices_reply_t *R)
{
    xcb_input_device_info_iterator_t i;
    i.data = (xcb_input_device_info_t *) (R + 1);
    i.rem = R->devices_len;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_list_input_devices_infos_length (const xcb_input_list_input_devices_reply_t *R)
{
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const xcb_input_device_info_t* xcb_pre_tmp_8; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_5 = R->devices_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_list_input_devices_devices(R);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        xcb_pre_tmp_7 += xcb_pre_tmp_8->num_class_info;
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    return xcb_pre_tmp_7;
}

xcb_input_input_info_iterator_t
xcb_input_list_input_devices_infos_iterator (const xcb_input_list_input_devices_reply_t *R)
{
    xcb_input_input_info_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_device_info_end(xcb_input_list_input_devices_devices_iterator(R));
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const xcb_input_device_info_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->devices_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_list_input_devices_devices(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        xcb_pre_tmp_11 += xcb_pre_tmp_12->num_class_info;
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    i.data = (xcb_input_input_info_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_input_info_t, prev.index));
    i.rem = xcb_pre_tmp_11;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_list_input_devices_names_length (const xcb_input_list_input_devices_reply_t *R)
{
    return R->devices_len;
}

xcb_str_iterator_t
xcb_input_list_input_devices_names_iterator (const xcb_input_list_input_devices_reply_t *R)
{
    xcb_str_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_input_info_end(xcb_input_list_input_devices_infos_iterator(R));
    i.data = (xcb_str_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_str_t, prev.index));
    i.rem = R->devices_len;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_list_input_devices_reply_t *
xcb_input_list_input_devices_reply (xcb_connection_t                       *c,
                                    xcb_input_list_input_devices_cookie_t   cookie  /**< */,
                                    xcb_generic_error_t                   **e)
{
    return (xcb_input_list_input_devices_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

void
xcb_input_event_type_base_next (xcb_input_event_type_base_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_event_type_base_t);
}

xcb_generic_iterator_t
xcb_input_event_type_base_end (xcb_input_event_type_base_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_input_class_info_next (xcb_input_input_class_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_input_class_info_t);
}

xcb_generic_iterator_t
xcb_input_input_class_info_end (xcb_input_input_class_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_open_device_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_open_device_reply_t *_aux = (xcb_input_open_device_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_open_device_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* class_info */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_input_class_info_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_input_class_info_t);
    xcb_align_to = 4;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_open_device_cookie_t
xcb_input_open_device (xcb_connection_t *c,
                       uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_OPEN_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_open_device_cookie_t xcb_ret;
    xcb_input_open_device_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_open_device_cookie_t
xcb_input_open_device_unchecked (xcb_connection_t *c,
                                 uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_OPEN_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_open_device_cookie_t xcb_ret;
    xcb_input_open_device_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_input_class_info_t *
xcb_input_open_device_class_info (const xcb_input_open_device_reply_t *R)
{
    return (xcb_input_input_class_info_t *) (R + 1);
}

int
xcb_input_open_device_class_info_length (const xcb_input_open_device_reply_t *R)
{
    return R->num_classes;
}

xcb_input_input_class_info_iterator_t
xcb_input_open_device_class_info_iterator (const xcb_input_open_device_reply_t *R)
{
    xcb_input_input_class_info_iterator_t i;
    i.data = (xcb_input_input_class_info_t *) (R + 1);
    i.rem = R->num_classes;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_open_device_reply_t *
xcb_input_open_device_reply (xcb_connection_t                *c,
                             xcb_input_open_device_cookie_t   cookie  /**< */,
                             xcb_generic_error_t            **e)
{
    return (xcb_input_open_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_close_device_checked (xcb_connection_t *c,
                                uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CLOSE_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_close_device_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_close_device (xcb_connection_t *c,
                        uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CLOSE_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_close_device_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_mode_cookie_t
xcb_input_set_device_mode (xcb_connection_t *c,
                           uint8_t           device_id,
                           uint8_t           mode)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_MODE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_set_device_mode_cookie_t xcb_ret;
    xcb_input_set_device_mode_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.mode = mode;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_mode_cookie_t
xcb_input_set_device_mode_unchecked (xcb_connection_t *c,
                                     uint8_t           device_id,
                                     uint8_t           mode)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_MODE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_set_device_mode_cookie_t xcb_ret;
    xcb_input_set_device_mode_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.mode = mode;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_mode_reply_t *
xcb_input_set_device_mode_reply (xcb_connection_t                    *c,
                                 xcb_input_set_device_mode_cookie_t   cookie  /**< */,
                                 xcb_generic_error_t                **e)
{
    return (xcb_input_set_device_mode_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_select_extension_event_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_select_extension_event_request_t *_aux = (xcb_input_select_extension_event_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_select_extension_event_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_select_extension_event_checked (xcb_connection_t              *c,
                                          xcb_window_t                   window,
                                          uint16_t                       num_classes,
                                          const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SELECT_EXTENSION_EVENT,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_select_extension_event_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.num_classes = num_classes;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_select_extension_event (xcb_connection_t              *c,
                                  xcb_window_t                   window,
                                  uint16_t                       num_classes,
                                  const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SELECT_EXTENSION_EVENT,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_select_extension_event_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.num_classes = num_classes;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_class_t *
xcb_input_select_extension_event_classes (const xcb_input_select_extension_event_request_t *R)
{
    return (xcb_input_event_class_t *) (R + 1);
}

int
xcb_input_select_extension_event_classes_length (const xcb_input_select_extension_event_request_t *R)
{
    return R->num_classes;
}

xcb_generic_iterator_t
xcb_input_select_extension_event_classes_end (const xcb_input_select_extension_event_request_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_get_selected_extension_events_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_selected_extension_events_reply_t *_aux = (xcb_input_get_selected_extension_events_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_selected_extension_events_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* this_classes */
    xcb_block_len += _aux->num_this_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* all_classes */
    xcb_block_len += _aux->num_all_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_selected_extension_events_cookie_t
xcb_input_get_selected_extension_events (xcb_connection_t *c,
                                         xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_SELECTED_EXTENSION_EVENTS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_selected_extension_events_cookie_t xcb_ret;
    xcb_input_get_selected_extension_events_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_selected_extension_events_cookie_t
xcb_input_get_selected_extension_events_unchecked (xcb_connection_t *c,
                                                   xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_SELECTED_EXTENSION_EVENTS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_selected_extension_events_cookie_t xcb_ret;
    xcb_input_get_selected_extension_events_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_class_t *
xcb_input_get_selected_extension_events_this_classes (const xcb_input_get_selected_extension_events_reply_t *R)
{
    return (xcb_input_event_class_t *) (R + 1);
}

int
xcb_input_get_selected_extension_events_this_classes_length (const xcb_input_get_selected_extension_events_reply_t *R)
{
    return R->num_this_classes;
}

xcb_generic_iterator_t
xcb_input_get_selected_extension_events_this_classes_end (const xcb_input_get_selected_extension_events_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_this_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_event_class_t *
xcb_input_get_selected_extension_events_all_classes (const xcb_input_get_selected_extension_events_reply_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_get_selected_extension_events_this_classes_end(R);
    return (xcb_input_event_class_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index) + 0);
}

int
xcb_input_get_selected_extension_events_all_classes_length (const xcb_input_get_selected_extension_events_reply_t *R)
{
    return R->num_all_classes;
}

xcb_generic_iterator_t
xcb_input_get_selected_extension_events_all_classes_end (const xcb_input_get_selected_extension_events_reply_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_get_selected_extension_events_this_classes_end(R);
    i.data = ((xcb_input_event_class_t *) ((char*) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index))) + (R->num_all_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_get_selected_extension_events_reply_t *
xcb_input_get_selected_extension_events_reply (xcb_connection_t                                  *c,
                                               xcb_input_get_selected_extension_events_cookie_t   cookie  /**< */,
                                               xcb_generic_error_t                              **e)
{
    return (xcb_input_get_selected_extension_events_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_change_device_dont_propagate_list_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_change_device_dont_propagate_list_request_t *_aux = (xcb_input_change_device_dont_propagate_list_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_change_device_dont_propagate_list_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_change_device_dont_propagate_list_checked (xcb_connection_t              *c,
                                                     xcb_window_t                   window,
                                                     uint16_t                       num_classes,
                                                     uint8_t                        mode,
                                                     const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_DONT_PROPAGATE_LIST,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_dont_propagate_list_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.num_classes = num_classes;
    xcb_out.mode = mode;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_change_device_dont_propagate_list (xcb_connection_t              *c,
                                             xcb_window_t                   window,
                                             uint16_t                       num_classes,
                                             uint8_t                        mode,
                                             const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_DONT_PROPAGATE_LIST,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_dont_propagate_list_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.num_classes = num_classes;
    xcb_out.mode = mode;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_class_t *
xcb_input_change_device_dont_propagate_list_classes (const xcb_input_change_device_dont_propagate_list_request_t *R)
{
    return (xcb_input_event_class_t *) (R + 1);
}

int
xcb_input_change_device_dont_propagate_list_classes_length (const xcb_input_change_device_dont_propagate_list_request_t *R)
{
    return R->num_classes;
}

xcb_generic_iterator_t
xcb_input_change_device_dont_propagate_list_classes_end (const xcb_input_change_device_dont_propagate_list_request_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_get_device_dont_propagate_list_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_device_dont_propagate_list_reply_t *_aux = (xcb_input_get_device_dont_propagate_list_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_device_dont_propagate_list_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_dont_propagate_list_cookie_t
xcb_input_get_device_dont_propagate_list (xcb_connection_t *c,
                                          xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_DONT_PROPAGATE_LIST,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_dont_propagate_list_cookie_t xcb_ret;
    xcb_input_get_device_dont_propagate_list_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_dont_propagate_list_cookie_t
xcb_input_get_device_dont_propagate_list_unchecked (xcb_connection_t *c,
                                                    xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_DONT_PROPAGATE_LIST,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_dont_propagate_list_cookie_t xcb_ret;
    xcb_input_get_device_dont_propagate_list_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_class_t *
xcb_input_get_device_dont_propagate_list_classes (const xcb_input_get_device_dont_propagate_list_reply_t *R)
{
    return (xcb_input_event_class_t *) (R + 1);
}

int
xcb_input_get_device_dont_propagate_list_classes_length (const xcb_input_get_device_dont_propagate_list_reply_t *R)
{
    return R->num_classes;
}

xcb_generic_iterator_t
xcb_input_get_device_dont_propagate_list_classes_end (const xcb_input_get_device_dont_propagate_list_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_get_device_dont_propagate_list_reply_t *
xcb_input_get_device_dont_propagate_list_reply (xcb_connection_t                                   *c,
                                                xcb_input_get_device_dont_propagate_list_cookie_t   cookie  /**< */,
                                                xcb_generic_error_t                               **e)
{
    return (xcb_input_get_device_dont_propagate_list_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_device_time_coord_sizeof (const void  *_buffer,
                                    uint8_t      num_axes)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_time_coord_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* axisvalues */
    xcb_block_len += num_axes * sizeof(int32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(int32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

int32_t *
xcb_input_device_time_coord_axisvalues (const xcb_input_device_time_coord_t *R)
{
    return (int32_t *) (R + 1);
}

int
xcb_input_device_time_coord_axisvalues_length (const xcb_input_device_time_coord_t *R,
                                               uint8_t num_axes)
{
    return num_axes;
}

xcb_generic_iterator_t
xcb_input_device_time_coord_axisvalues_end (const xcb_input_device_time_coord_t *R,
                                            uint8_t num_axes)
{
    xcb_generic_iterator_t i;
    i.data = ((int32_t *) (R + 1)) + (num_axes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_device_time_coord_next (xcb_input_device_time_coord_iterator_t *i)
{
    xcb_input_device_time_coord_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_time_coord_t *)(((char *)R) + xcb_input_device_time_coord_sizeof(R, i->num_axes));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_time_coord_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_time_coord_end (xcb_input_device_time_coord_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_time_coord_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_get_device_motion_events_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_device_motion_events_reply_t *_aux = (xcb_input_get_device_motion_events_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_get_device_motion_events_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* events */
    for(i=0; i<_aux->num_events; i++) {
        xcb_tmp_len = xcb_input_device_time_coord_sizeof(xcb_tmp, _aux->num_axes);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_device_time_coord_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_motion_events_cookie_t
xcb_input_get_device_motion_events (xcb_connection_t *c,
                                    xcb_timestamp_t   start,
                                    xcb_timestamp_t   stop,
                                    uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_MOTION_EVENTS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_motion_events_cookie_t xcb_ret;
    xcb_input_get_device_motion_events_request_t xcb_out;

    xcb_out.start = start;
    xcb_out.stop = stop;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_motion_events_cookie_t
xcb_input_get_device_motion_events_unchecked (xcb_connection_t *c,
                                              xcb_timestamp_t   start,
                                              xcb_timestamp_t   stop,
                                              uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_MOTION_EVENTS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_motion_events_cookie_t xcb_ret;
    xcb_input_get_device_motion_events_request_t xcb_out;

    xcb_out.start = start;
    xcb_out.stop = stop;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_get_device_motion_events_events_length (const xcb_input_get_device_motion_events_reply_t *R)
{
    return R->num_events;
}

xcb_input_device_time_coord_iterator_t
xcb_input_get_device_motion_events_events_iterator (const xcb_input_get_device_motion_events_reply_t *R)
{
    xcb_input_device_time_coord_iterator_t i;
    i.data = (xcb_input_device_time_coord_t *) (R + 1);
    i.rem = R->num_events;
    i.index = (char *) i.data - (char *) R;
    i.num_axes = R->num_axes;
    return i;
}

xcb_input_get_device_motion_events_reply_t *
xcb_input_get_device_motion_events_reply (xcb_connection_t                             *c,
                                          xcb_input_get_device_motion_events_cookie_t   cookie  /**< */,
                                          xcb_generic_error_t                         **e)
{
    return (xcb_input_get_device_motion_events_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_input_change_keyboard_device_cookie_t
xcb_input_change_keyboard_device (xcb_connection_t *c,
                                  uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_KEYBOARD_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_change_keyboard_device_cookie_t xcb_ret;
    xcb_input_change_keyboard_device_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_change_keyboard_device_cookie_t
xcb_input_change_keyboard_device_unchecked (xcb_connection_t *c,
                                            uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_KEYBOARD_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_change_keyboard_device_cookie_t xcb_ret;
    xcb_input_change_keyboard_device_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_change_keyboard_device_reply_t *
xcb_input_change_keyboard_device_reply (xcb_connection_t                           *c,
                                        xcb_input_change_keyboard_device_cookie_t   cookie  /**< */,
                                        xcb_generic_error_t                       **e)
{
    return (xcb_input_change_keyboard_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_input_change_pointer_device_cookie_t
xcb_input_change_pointer_device (xcb_connection_t *c,
                                 uint8_t           x_axis,
                                 uint8_t           y_axis,
                                 uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_POINTER_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_change_pointer_device_cookie_t xcb_ret;
    xcb_input_change_pointer_device_request_t xcb_out;

    xcb_out.x_axis = x_axis;
    xcb_out.y_axis = y_axis;
    xcb_out.device_id = device_id;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_change_pointer_device_cookie_t
xcb_input_change_pointer_device_unchecked (xcb_connection_t *c,
                                           uint8_t           x_axis,
                                           uint8_t           y_axis,
                                           uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_POINTER_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_change_pointer_device_cookie_t xcb_ret;
    xcb_input_change_pointer_device_request_t xcb_out;

    xcb_out.x_axis = x_axis;
    xcb_out.y_axis = y_axis;
    xcb_out.device_id = device_id;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_change_pointer_device_reply_t *
xcb_input_change_pointer_device_reply (xcb_connection_t                          *c,
                                       xcb_input_change_pointer_device_cookie_t   cookie  /**< */,
                                       xcb_generic_error_t                      **e)
{
    return (xcb_input_change_pointer_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_grab_device_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_grab_device_request_t *_aux = (xcb_input_grab_device_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_grab_device_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_grab_device_cookie_t
xcb_input_grab_device (xcb_connection_t              *c,
                       xcb_window_t                   grab_window,
                       xcb_timestamp_t                time,
                       uint16_t                       num_classes,
                       uint8_t                        this_device_mode,
                       uint8_t                        other_device_mode,
                       uint8_t                        owner_events,
                       uint8_t                        device_id,
                       const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GRAB_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_grab_device_cookie_t xcb_ret;
    xcb_input_grab_device_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.time = time;
    xcb_out.num_classes = num_classes;
    xcb_out.this_device_mode = this_device_mode;
    xcb_out.other_device_mode = other_device_mode;
    xcb_out.owner_events = owner_events;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_grab_device_cookie_t
xcb_input_grab_device_unchecked (xcb_connection_t              *c,
                                 xcb_window_t                   grab_window,
                                 xcb_timestamp_t                time,
                                 uint16_t                       num_classes,
                                 uint8_t                        this_device_mode,
                                 uint8_t                        other_device_mode,
                                 uint8_t                        owner_events,
                                 uint8_t                        device_id,
                                 const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GRAB_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_grab_device_cookie_t xcb_ret;
    xcb_input_grab_device_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.time = time;
    xcb_out.num_classes = num_classes;
    xcb_out.this_device_mode = this_device_mode;
    xcb_out.other_device_mode = other_device_mode;
    xcb_out.owner_events = owner_events;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_grab_device_reply_t *
xcb_input_grab_device_reply (xcb_connection_t                *c,
                             xcb_input_grab_device_cookie_t   cookie  /**< */,
                             xcb_generic_error_t            **e)
{
    return (xcb_input_grab_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_ungrab_device_checked (xcb_connection_t *c,
                                 xcb_timestamp_t   time,
                                 uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_UNGRAB_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_ungrab_device_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_ungrab_device (xcb_connection_t *c,
                         xcb_timestamp_t   time,
                         uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_UNGRAB_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_ungrab_device_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_grab_device_key_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_grab_device_key_request_t *_aux = (xcb_input_grab_device_key_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_grab_device_key_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_grab_device_key_checked (xcb_connection_t              *c,
                                   xcb_window_t                   grab_window,
                                   uint16_t                       num_classes,
                                   uint16_t                       modifiers,
                                   uint8_t                        modifier_device,
                                   uint8_t                        grabbed_device,
                                   uint8_t                        key,
                                   uint8_t                        this_device_mode,
                                   uint8_t                        other_device_mode,
                                   uint8_t                        owner_events,
                                   const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GRAB_DEVICE_KEY,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_grab_device_key_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.num_classes = num_classes;
    xcb_out.modifiers = modifiers;
    xcb_out.modifier_device = modifier_device;
    xcb_out.grabbed_device = grabbed_device;
    xcb_out.key = key;
    xcb_out.this_device_mode = this_device_mode;
    xcb_out.other_device_mode = other_device_mode;
    xcb_out.owner_events = owner_events;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_grab_device_key (xcb_connection_t              *c,
                           xcb_window_t                   grab_window,
                           uint16_t                       num_classes,
                           uint16_t                       modifiers,
                           uint8_t                        modifier_device,
                           uint8_t                        grabbed_device,
                           uint8_t                        key,
                           uint8_t                        this_device_mode,
                           uint8_t                        other_device_mode,
                           uint8_t                        owner_events,
                           const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GRAB_DEVICE_KEY,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_grab_device_key_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.num_classes = num_classes;
    xcb_out.modifiers = modifiers;
    xcb_out.modifier_device = modifier_device;
    xcb_out.grabbed_device = grabbed_device;
    xcb_out.key = key;
    xcb_out.this_device_mode = this_device_mode;
    xcb_out.other_device_mode = other_device_mode;
    xcb_out.owner_events = owner_events;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_class_t *
xcb_input_grab_device_key_classes (const xcb_input_grab_device_key_request_t *R)
{
    return (xcb_input_event_class_t *) (R + 1);
}

int
xcb_input_grab_device_key_classes_length (const xcb_input_grab_device_key_request_t *R)
{
    return R->num_classes;
}

xcb_generic_iterator_t
xcb_input_grab_device_key_classes_end (const xcb_input_grab_device_key_request_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_void_cookie_t
xcb_input_ungrab_device_key_checked (xcb_connection_t *c,
                                     xcb_window_t      grabWindow,
                                     uint16_t          modifiers,
                                     uint8_t           modifier_device,
                                     uint8_t           key,
                                     uint8_t           grabbed_device)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_UNGRAB_DEVICE_KEY,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_ungrab_device_key_request_t xcb_out;

    xcb_out.grabWindow = grabWindow;
    xcb_out.modifiers = modifiers;
    xcb_out.modifier_device = modifier_device;
    xcb_out.key = key;
    xcb_out.grabbed_device = grabbed_device;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_ungrab_device_key (xcb_connection_t *c,
                             xcb_window_t      grabWindow,
                             uint16_t          modifiers,
                             uint8_t           modifier_device,
                             uint8_t           key,
                             uint8_t           grabbed_device)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_UNGRAB_DEVICE_KEY,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_ungrab_device_key_request_t xcb_out;

    xcb_out.grabWindow = grabWindow;
    xcb_out.modifiers = modifiers;
    xcb_out.modifier_device = modifier_device;
    xcb_out.key = key;
    xcb_out.grabbed_device = grabbed_device;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_grab_device_button_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_grab_device_button_request_t *_aux = (xcb_input_grab_device_button_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_grab_device_button_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_grab_device_button_checked (xcb_connection_t              *c,
                                      xcb_window_t                   grab_window,
                                      uint8_t                        grabbed_device,
                                      uint8_t                        modifier_device,
                                      uint16_t                       num_classes,
                                      uint16_t                       modifiers,
                                      uint8_t                        this_device_mode,
                                      uint8_t                        other_device_mode,
                                      uint8_t                        button,
                                      uint8_t                        owner_events,
                                      const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GRAB_DEVICE_BUTTON,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_grab_device_button_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.grabbed_device = grabbed_device;
    xcb_out.modifier_device = modifier_device;
    xcb_out.num_classes = num_classes;
    xcb_out.modifiers = modifiers;
    xcb_out.this_device_mode = this_device_mode;
    xcb_out.other_device_mode = other_device_mode;
    xcb_out.button = button;
    xcb_out.owner_events = owner_events;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_grab_device_button (xcb_connection_t              *c,
                              xcb_window_t                   grab_window,
                              uint8_t                        grabbed_device,
                              uint8_t                        modifier_device,
                              uint16_t                       num_classes,
                              uint16_t                       modifiers,
                              uint8_t                        this_device_mode,
                              uint8_t                        other_device_mode,
                              uint8_t                        button,
                              uint8_t                        owner_events,
                              const xcb_input_event_class_t *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GRAB_DEVICE_BUTTON,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_grab_device_button_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.grabbed_device = grabbed_device;
    xcb_out.modifier_device = modifier_device;
    xcb_out.num_classes = num_classes;
    xcb_out.modifiers = modifiers;
    xcb_out.this_device_mode = this_device_mode;
    xcb_out.other_device_mode = other_device_mode;
    xcb_out.button = button;
    xcb_out.owner_events = owner_events;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[4].iov_base = (char *) classes;
    xcb_parts[4].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_class_t *
xcb_input_grab_device_button_classes (const xcb_input_grab_device_button_request_t *R)
{
    return (xcb_input_event_class_t *) (R + 1);
}

int
xcb_input_grab_device_button_classes_length (const xcb_input_grab_device_button_request_t *R)
{
    return R->num_classes;
}

xcb_generic_iterator_t
xcb_input_grab_device_button_classes_end (const xcb_input_grab_device_button_request_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_input_event_class_t *) (R + 1)) + (R->num_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_void_cookie_t
xcb_input_ungrab_device_button_checked (xcb_connection_t *c,
                                        xcb_window_t      grab_window,
                                        uint16_t          modifiers,
                                        uint8_t           modifier_device,
                                        uint8_t           button,
                                        uint8_t           grabbed_device)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_UNGRAB_DEVICE_BUTTON,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_ungrab_device_button_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.modifiers = modifiers;
    xcb_out.modifier_device = modifier_device;
    xcb_out.button = button;
    xcb_out.grabbed_device = grabbed_device;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_ungrab_device_button (xcb_connection_t *c,
                                xcb_window_t      grab_window,
                                uint16_t          modifiers,
                                uint8_t           modifier_device,
                                uint8_t           button,
                                uint8_t           grabbed_device)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_UNGRAB_DEVICE_BUTTON,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_ungrab_device_button_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.modifiers = modifiers;
    xcb_out.modifier_device = modifier_device;
    xcb_out.button = button;
    xcb_out.grabbed_device = grabbed_device;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_allow_device_events_checked (xcb_connection_t *c,
                                       xcb_timestamp_t   time,
                                       uint8_t           mode,
                                       uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_ALLOW_DEVICE_EVENTS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_allow_device_events_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.mode = mode;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_allow_device_events (xcb_connection_t *c,
                               xcb_timestamp_t   time,
                               uint8_t           mode,
                               uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_ALLOW_DEVICE_EVENTS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_allow_device_events_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.mode = mode;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_focus_cookie_t
xcb_input_get_device_focus (xcb_connection_t *c,
                            uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_FOCUS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_focus_cookie_t xcb_ret;
    xcb_input_get_device_focus_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_focus_cookie_t
xcb_input_get_device_focus_unchecked (xcb_connection_t *c,
                                      uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_FOCUS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_focus_cookie_t xcb_ret;
    xcb_input_get_device_focus_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_focus_reply_t *
xcb_input_get_device_focus_reply (xcb_connection_t                     *c,
                                  xcb_input_get_device_focus_cookie_t   cookie  /**< */,
                                  xcb_generic_error_t                 **e)
{
    return (xcb_input_get_device_focus_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_set_device_focus_checked (xcb_connection_t *c,
                                    xcb_window_t      focus,
                                    xcb_timestamp_t   time,
                                    uint8_t           revert_to,
                                    uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_FOCUS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_set_device_focus_request_t xcb_out;

    xcb_out.focus = focus;
    xcb_out.time = time;
    xcb_out.revert_to = revert_to;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_set_device_focus (xcb_connection_t *c,
                            xcb_window_t      focus,
                            xcb_timestamp_t   time,
                            uint8_t           revert_to,
                            uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_FOCUS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_set_device_focus_request_t xcb_out;

    xcb_out.focus = focus;
    xcb_out.time = time;
    xcb_out.revert_to = revert_to;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

void
xcb_input_kbd_feedback_state_next (xcb_input_kbd_feedback_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_kbd_feedback_state_t);
}

xcb_generic_iterator_t
xcb_input_kbd_feedback_state_end (xcb_input_kbd_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_ptr_feedback_state_next (xcb_input_ptr_feedback_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_ptr_feedback_state_t);
}

xcb_generic_iterator_t
xcb_input_ptr_feedback_state_end (xcb_input_ptr_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_integer_feedback_state_next (xcb_input_integer_feedback_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_integer_feedback_state_t);
}

xcb_generic_iterator_t
xcb_input_integer_feedback_state_end (xcb_input_integer_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_string_feedback_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_string_feedback_state_t *_aux = (xcb_input_string_feedback_state_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_string_feedback_state_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keysyms */
    xcb_block_len += _aux->num_keysyms * sizeof(xcb_keysym_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_keysym_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_keysym_t *
xcb_input_string_feedback_state_keysyms (const xcb_input_string_feedback_state_t *R)
{
    return (xcb_keysym_t *) (R + 1);
}

int
xcb_input_string_feedback_state_keysyms_length (const xcb_input_string_feedback_state_t *R)
{
    return R->num_keysyms;
}

xcb_generic_iterator_t
xcb_input_string_feedback_state_keysyms_end (const xcb_input_string_feedback_state_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_keysym_t *) (R + 1)) + (R->num_keysyms);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_string_feedback_state_next (xcb_input_string_feedback_state_iterator_t *i)
{
    xcb_input_string_feedback_state_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_string_feedback_state_t *)(((char *)R) + xcb_input_string_feedback_state_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_string_feedback_state_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_string_feedback_state_end (xcb_input_string_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_string_feedback_state_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

void
xcb_input_bell_feedback_state_next (xcb_input_bell_feedback_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_bell_feedback_state_t);
}

xcb_generic_iterator_t
xcb_input_bell_feedback_state_end (xcb_input_bell_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_led_feedback_state_next (xcb_input_led_feedback_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_led_feedback_state_t);
}

xcb_generic_iterator_t
xcb_input_led_feedback_state_end (xcb_input_led_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

xcb_keysym_t *
xcb_input_feedback_state_data_string_keysyms (const xcb_input_feedback_state_data_t *S)
{
    return S->string.keysyms;
}

int
xcb_input_feedback_state_data_string_keysyms_length (const xcb_input_feedback_state_t *R,
                                                     const xcb_input_feedback_state_data_t *S)
{
    return S->string.num_keysyms;
}

xcb_generic_iterator_t
xcb_input_feedback_state_data_string_keysyms_end (const xcb_input_feedback_state_t *R,
                                                  const xcb_input_feedback_state_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->string.keysyms + S->string.num_keysyms;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_feedback_state_data_serialize (void                                  **_buffer,
                                         uint8_t                                 class_id,
                                         const xcb_input_feedback_state_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[27];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
        /* xcb_input_feedback_state_data_t.keyboard.pitch */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.pitch;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.keyboard.duration */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.duration;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.keyboard.led_mask */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_mask;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.keyboard.led_values */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_values;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.keyboard.global_auto_repeat */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.global_auto_repeat;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.click */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.click;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.percent */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.percent;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.auto_repeats */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->keyboard.auto_repeats;
        xcb_block_len += 32;
        xcb_parts[xcb_parts_idx].iov_len = 32;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
        /* xcb_input_feedback_state_data_t.pointer.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.pointer.accel_num */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.accel_num;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.pointer.accel_denom */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.accel_denom;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.pointer.threshold */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.threshold;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
        /* xcb_input_feedback_state_data_t.string.max_symbols */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->string.max_symbols;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.string.num_keysyms */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->string.num_keysyms;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* keysyms */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->string.keysyms;
        xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->string.num_keysyms * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_keysym_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
        /* xcb_input_feedback_state_data_t.integer.resolution */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.resolution;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.integer.min_value */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.min_value;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_feedback_state_data_t.integer.max_value */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.max_value;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
        /* xcb_input_feedback_state_data_t.led.led_mask */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_mask;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.led.led_values */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_values;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
        /* xcb_input_feedback_state_data_t.bell.percent */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.percent;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.bell.pad2 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*3;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.bell.pitch */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.pitch;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.bell.duration */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.duration;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_feedback_state_data_unpack (const void                       *_buffer,
                                      uint8_t                           class_id,
                                      xcb_input_feedback_state_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
        /* xcb_input_feedback_state_data_t.keyboard.pitch */
        _aux->keyboard.pitch = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.keyboard.duration */
        _aux->keyboard.duration = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.keyboard.led_mask */
        _aux->keyboard.led_mask = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.keyboard.led_values */
        _aux->keyboard.led_values = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.keyboard.global_auto_repeat */
        _aux->keyboard.global_auto_repeat = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.click */
        _aux->keyboard.click = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.percent */
        _aux->keyboard.percent = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.pad0 */
        _aux->keyboard.pad0 = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.keyboard.auto_repeats */
        memcpy(_aux->keyboard.auto_repeats, xcb_tmp, sizeof(uint8_t) * 32);
        xcb_block_len += sizeof(uint8_t) * 32;
        xcb_tmp += sizeof(uint8_t) * 32;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
        /* xcb_input_feedback_state_data_t.pointer.pad1 */
        _aux->pointer.pad1[0] = *(uint8_t *)xcb_tmp;
        _aux->pointer.pad1[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.pointer.accel_num */
        _aux->pointer.accel_num = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.pointer.accel_denom */
        _aux->pointer.accel_denom = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.pointer.threshold */
        _aux->pointer.threshold = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
        /* xcb_input_feedback_state_data_t.string.max_symbols */
        _aux->string.max_symbols = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.string.num_keysyms */
        _aux->string.num_keysyms = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* keysyms */
        _aux->string.keysyms = (xcb_keysym_t *)xcb_tmp;
        xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(xcb_keysym_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
        /* xcb_input_feedback_state_data_t.integer.resolution */
        _aux->integer.resolution = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.integer.min_value */
        _aux->integer.min_value = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_feedback_state_data_t.integer.max_value */
        _aux->integer.max_value = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
        /* xcb_input_feedback_state_data_t.led.led_mask */
        _aux->led.led_mask = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_state_data_t.led.led_values */
        _aux->led.led_values = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
        /* xcb_input_feedback_state_data_t.bell.percent */
        _aux->bell.percent = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.bell.pad2 */
        _aux->bell.pad2[0] = *(uint8_t *)xcb_tmp;
        _aux->bell.pad2[1] = *(uint8_t *)xcb_tmp;
        _aux->bell.pad2[2] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 3;
        xcb_tmp += sizeof(uint8_t) * 3;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_state_data_t.bell.pitch */
        _aux->bell.pitch = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_feedback_state_data_t.bell.duration */
        _aux->bell.duration = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_feedback_state_data_sizeof (const void  *_buffer,
                                      uint8_t      class_id)
{
    xcb_input_feedback_state_data_t _aux;
    return xcb_input_feedback_state_data_unpack(_buffer, class_id, &_aux);
}

int
xcb_input_feedback_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_feedback_state_t *_aux = (xcb_input_feedback_state_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_feedback_state_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_feedback_state_data_sizeof(xcb_tmp, _aux->class_id);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_feedback_state_data (const xcb_input_feedback_state_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_feedback_state_next (xcb_input_feedback_state_iterator_t *i)
{
    xcb_input_feedback_state_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_feedback_state_t *)(((char *)R) + xcb_input_feedback_state_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_feedback_state_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_feedback_state_end (xcb_input_feedback_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_feedback_state_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_get_feedback_control_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_feedback_control_reply_t *_aux = (xcb_input_get_feedback_control_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_get_feedback_control_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* feedbacks */
    for(i=0; i<_aux->num_feedbacks; i++) {
        xcb_tmp_len = xcb_input_feedback_state_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_feedback_state_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_feedback_control_cookie_t
xcb_input_get_feedback_control (xcb_connection_t *c,
                                uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_FEEDBACK_CONTROL,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_feedback_control_cookie_t xcb_ret;
    xcb_input_get_feedback_control_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_feedback_control_cookie_t
xcb_input_get_feedback_control_unchecked (xcb_connection_t *c,
                                          uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_FEEDBACK_CONTROL,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_feedback_control_cookie_t xcb_ret;
    xcb_input_get_feedback_control_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_get_feedback_control_feedbacks_length (const xcb_input_get_feedback_control_reply_t *R)
{
    return R->num_feedbacks;
}

xcb_input_feedback_state_iterator_t
xcb_input_get_feedback_control_feedbacks_iterator (const xcb_input_get_feedback_control_reply_t *R)
{
    xcb_input_feedback_state_iterator_t i;
    i.data = (xcb_input_feedback_state_t *) (R + 1);
    i.rem = R->num_feedbacks;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_get_feedback_control_reply_t *
xcb_input_get_feedback_control_reply (xcb_connection_t                         *c,
                                      xcb_input_get_feedback_control_cookie_t   cookie  /**< */,
                                      xcb_generic_error_t                     **e)
{
    return (xcb_input_get_feedback_control_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

void
xcb_input_kbd_feedback_ctl_next (xcb_input_kbd_feedback_ctl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_kbd_feedback_ctl_t);
}

xcb_generic_iterator_t
xcb_input_kbd_feedback_ctl_end (xcb_input_kbd_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_ptr_feedback_ctl_next (xcb_input_ptr_feedback_ctl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_ptr_feedback_ctl_t);
}

xcb_generic_iterator_t
xcb_input_ptr_feedback_ctl_end (xcb_input_ptr_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_integer_feedback_ctl_next (xcb_input_integer_feedback_ctl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_integer_feedback_ctl_t);
}

xcb_generic_iterator_t
xcb_input_integer_feedback_ctl_end (xcb_input_integer_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_string_feedback_ctl_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_string_feedback_ctl_t *_aux = (xcb_input_string_feedback_ctl_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_string_feedback_ctl_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keysyms */
    xcb_block_len += _aux->num_keysyms * sizeof(xcb_keysym_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_keysym_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_keysym_t *
xcb_input_string_feedback_ctl_keysyms (const xcb_input_string_feedback_ctl_t *R)
{
    return (xcb_keysym_t *) (R + 1);
}

int
xcb_input_string_feedback_ctl_keysyms_length (const xcb_input_string_feedback_ctl_t *R)
{
    return R->num_keysyms;
}

xcb_generic_iterator_t
xcb_input_string_feedback_ctl_keysyms_end (const xcb_input_string_feedback_ctl_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_keysym_t *) (R + 1)) + (R->num_keysyms);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_string_feedback_ctl_next (xcb_input_string_feedback_ctl_iterator_t *i)
{
    xcb_input_string_feedback_ctl_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_string_feedback_ctl_t *)(((char *)R) + xcb_input_string_feedback_ctl_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_string_feedback_ctl_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_string_feedback_ctl_end (xcb_input_string_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_string_feedback_ctl_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

void
xcb_input_bell_feedback_ctl_next (xcb_input_bell_feedback_ctl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_bell_feedback_ctl_t);
}

xcb_generic_iterator_t
xcb_input_bell_feedback_ctl_end (xcb_input_bell_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_led_feedback_ctl_next (xcb_input_led_feedback_ctl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_led_feedback_ctl_t);
}

xcb_generic_iterator_t
xcb_input_led_feedback_ctl_end (xcb_input_led_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

xcb_keysym_t *
xcb_input_feedback_ctl_data_string_keysyms (const xcb_input_feedback_ctl_data_t *S)
{
    return S->string.keysyms;
}

int
xcb_input_feedback_ctl_data_string_keysyms_length (const xcb_input_feedback_ctl_t *R,
                                                   const xcb_input_feedback_ctl_data_t *S)
{
    return S->string.num_keysyms;
}

xcb_generic_iterator_t
xcb_input_feedback_ctl_data_string_keysyms_end (const xcb_input_feedback_ctl_t *R,
                                                const xcb_input_feedback_ctl_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->string.keysyms + S->string.num_keysyms;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_feedback_ctl_data_serialize (void                                **_buffer,
                                       uint8_t                               class_id,
                                       const xcb_input_feedback_ctl_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[24];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
        /* xcb_input_feedback_ctl_data_t.keyboard.key */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.key;
        xcb_block_len += sizeof(xcb_input_key_code_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_key_code_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_key_code_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.auto_repeat_mode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.auto_repeat_mode;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.key_click_percent */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.key_click_percent;
        xcb_block_len += sizeof(int8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int8_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.bell_percent */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.bell_percent;
        xcb_block_len += sizeof(int8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int8_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.bell_pitch */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.bell_pitch;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.bell_duration */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.bell_duration;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.led_mask */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_mask;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.led_values */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->keyboard.led_values;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
        /* xcb_input_feedback_ctl_data_t.pointer.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.pointer.num */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.num;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.pointer.denom */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.denom;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.pointer.threshold */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->pointer.threshold;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
        /* xcb_input_feedback_ctl_data_t.string.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.string.num_keysyms */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->string.num_keysyms;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* keysyms */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->string.keysyms;
        xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->string.num_keysyms * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_keysym_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
        /* xcb_input_feedback_ctl_data_t.integer.int_to_display */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->integer.int_to_display;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
        /* xcb_input_feedback_ctl_data_t.led.led_mask */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_mask;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_ctl_data_t.led.led_values */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->led.led_values;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
        /* xcb_input_feedback_ctl_data_t.bell.percent */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.percent;
        xcb_block_len += sizeof(int8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int8_t);
        /* xcb_input_feedback_ctl_data_t.bell.pad2 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*3;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.bell.pitch */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.pitch;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.bell.duration */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->bell.duration;
        xcb_block_len += sizeof(int16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int16_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_feedback_ctl_data_unpack (const void                     *_buffer,
                                    uint8_t                         class_id,
                                    xcb_input_feedback_ctl_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(class_id == XCB_INPUT_FEEDBACK_CLASS_KEYBOARD) {
        /* xcb_input_feedback_ctl_data_t.keyboard.key */
        _aux->keyboard.key = *(xcb_input_key_code_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_key_code_t);
        xcb_tmp += sizeof(xcb_input_key_code_t);
        xcb_align_to = ALIGNOF(xcb_input_key_code_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.auto_repeat_mode */
        _aux->keyboard.auto_repeat_mode = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.key_click_percent */
        _aux->keyboard.key_click_percent = *(int8_t *)xcb_tmp;
        xcb_block_len += sizeof(int8_t);
        xcb_tmp += sizeof(int8_t);
        xcb_align_to = ALIGNOF(int8_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.bell_percent */
        _aux->keyboard.bell_percent = *(int8_t *)xcb_tmp;
        xcb_block_len += sizeof(int8_t);
        xcb_tmp += sizeof(int8_t);
        xcb_align_to = ALIGNOF(int8_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.bell_pitch */
        _aux->keyboard.bell_pitch = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.bell_duration */
        _aux->keyboard.bell_duration = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.led_mask */
        _aux->keyboard.led_mask = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_ctl_data_t.keyboard.led_values */
        _aux->keyboard.led_values = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_POINTER) {
        /* xcb_input_feedback_ctl_data_t.pointer.pad0 */
        _aux->pointer.pad0[0] = *(uint8_t *)xcb_tmp;
        _aux->pointer.pad0[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.pointer.num */
        _aux->pointer.num = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.pointer.denom */
        _aux->pointer.denom = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.pointer.threshold */
        _aux->pointer.threshold = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_STRING) {
        /* xcb_input_feedback_ctl_data_t.string.pad1 */
        _aux->string.pad1[0] = *(uint8_t *)xcb_tmp;
        _aux->string.pad1[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.string.num_keysyms */
        _aux->string.num_keysyms = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* keysyms */
        _aux->string.keysyms = (xcb_keysym_t *)xcb_tmp;
        xcb_block_len += _aux->string.num_keysyms * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(xcb_keysym_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_INTEGER) {
        /* xcb_input_feedback_ctl_data_t.integer.int_to_display */
        _aux->integer.int_to_display = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_LED) {
        /* xcb_input_feedback_ctl_data_t.led.led_mask */
        _aux->led.led_mask = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_feedback_ctl_data_t.led.led_values */
        _aux->led.led_values = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(class_id == XCB_INPUT_FEEDBACK_CLASS_BELL) {
        /* xcb_input_feedback_ctl_data_t.bell.percent */
        _aux->bell.percent = *(int8_t *)xcb_tmp;
        xcb_block_len += sizeof(int8_t);
        xcb_tmp += sizeof(int8_t);
        xcb_align_to = ALIGNOF(int8_t);
        /* xcb_input_feedback_ctl_data_t.bell.pad2 */
        _aux->bell.pad2[0] = *(uint8_t *)xcb_tmp;
        _aux->bell.pad2[1] = *(uint8_t *)xcb_tmp;
        _aux->bell.pad2[2] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 3;
        xcb_tmp += sizeof(uint8_t) * 3;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_feedback_ctl_data_t.bell.pitch */
        _aux->bell.pitch = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
        /* xcb_input_feedback_ctl_data_t.bell.duration */
        _aux->bell.duration = *(int16_t *)xcb_tmp;
        xcb_block_len += sizeof(int16_t);
        xcb_tmp += sizeof(int16_t);
        xcb_align_to = ALIGNOF(int16_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_feedback_ctl_data_sizeof (const void  *_buffer,
                                    uint8_t      class_id)
{
    xcb_input_feedback_ctl_data_t _aux;
    return xcb_input_feedback_ctl_data_unpack(_buffer, class_id, &_aux);
}

int
xcb_input_feedback_ctl_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_feedback_ctl_t *_aux = (xcb_input_feedback_ctl_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_feedback_ctl_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_feedback_ctl_data_sizeof(xcb_tmp, _aux->class_id);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_feedback_ctl_data (const xcb_input_feedback_ctl_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_feedback_ctl_next (xcb_input_feedback_ctl_iterator_t *i)
{
    xcb_input_feedback_ctl_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_feedback_ctl_t *)(((char *)R) + xcb_input_feedback_ctl_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_feedback_ctl_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_feedback_ctl_end (xcb_input_feedback_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_feedback_ctl_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_change_feedback_control_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_change_feedback_control_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* feedback */
    xcb_block_len += xcb_input_feedback_ctl_sizeof(xcb_tmp);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_feedback_ctl_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_change_feedback_control_checked (xcb_connection_t         *c,
                                           uint32_t                  mask,
                                           uint8_t                   device_id,
                                           uint8_t                   feedback_id,
                                           xcb_input_feedback_ctl_t *feedback)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_FEEDBACK_CONTROL,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_feedback_control_request_t xcb_out;

    xcb_out.mask = mask;
    xcb_out.device_id = device_id;
    xcb_out.feedback_id = feedback_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_feedback_ctl_t feedback */
    xcb_parts[4].iov_base = (char *) feedback;
    xcb_parts[4].iov_len =
      xcb_input_feedback_ctl_sizeof (feedback);

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_change_feedback_control (xcb_connection_t         *c,
                                   uint32_t                  mask,
                                   uint8_t                   device_id,
                                   uint8_t                   feedback_id,
                                   xcb_input_feedback_ctl_t *feedback)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_FEEDBACK_CONTROL,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_feedback_control_request_t xcb_out;

    xcb_out.mask = mask;
    xcb_out.device_id = device_id;
    xcb_out.feedback_id = feedback_id;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_feedback_ctl_t feedback */
    xcb_parts[4].iov_base = (char *) feedback;
    xcb_parts[4].iov_len =
      xcb_input_feedback_ctl_sizeof (feedback);

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_feedback_ctl_t *
xcb_input_change_feedback_control_feedback (const xcb_input_change_feedback_control_request_t *R)
{
    return (xcb_input_feedback_ctl_t *) (R + 1);
}

int
xcb_input_get_device_key_mapping_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_device_key_mapping_reply_t *_aux = (xcb_input_get_device_key_mapping_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_device_key_mapping_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keysyms */
    xcb_block_len += _aux->length * sizeof(xcb_keysym_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_keysym_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_key_mapping_cookie_t
xcb_input_get_device_key_mapping (xcb_connection_t     *c,
                                  uint8_t               device_id,
                                  xcb_input_key_code_t  first_keycode,
                                  uint8_t               count)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_KEY_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_key_mapping_cookie_t xcb_ret;
    xcb_input_get_device_key_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.first_keycode = first_keycode;
    xcb_out.count = count;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_key_mapping_cookie_t
xcb_input_get_device_key_mapping_unchecked (xcb_connection_t     *c,
                                            uint8_t               device_id,
                                            xcb_input_key_code_t  first_keycode,
                                            uint8_t               count)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_KEY_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_key_mapping_cookie_t xcb_ret;
    xcb_input_get_device_key_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.first_keycode = first_keycode;
    xcb_out.count = count;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_keysym_t *
xcb_input_get_device_key_mapping_keysyms (const xcb_input_get_device_key_mapping_reply_t *R)
{
    return (xcb_keysym_t *) (R + 1);
}

int
xcb_input_get_device_key_mapping_keysyms_length (const xcb_input_get_device_key_mapping_reply_t *R)
{
    return R->length;
}

xcb_generic_iterator_t
xcb_input_get_device_key_mapping_keysyms_end (const xcb_input_get_device_key_mapping_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_keysym_t *) (R + 1)) + (R->length);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_get_device_key_mapping_reply_t *
xcb_input_get_device_key_mapping_reply (xcb_connection_t                           *c,
                                        xcb_input_get_device_key_mapping_cookie_t   cookie  /**< */,
                                        xcb_generic_error_t                       **e)
{
    return (xcb_input_get_device_key_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_change_device_key_mapping_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_change_device_key_mapping_request_t *_aux = (xcb_input_change_device_key_mapping_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_change_device_key_mapping_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keysyms */
    xcb_block_len += (_aux->keycode_count * _aux->keysyms_per_keycode) * sizeof(xcb_keysym_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_keysym_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_change_device_key_mapping_checked (xcb_connection_t     *c,
                                             uint8_t               device_id,
                                             xcb_input_key_code_t  first_keycode,
                                             uint8_t               keysyms_per_keycode,
                                             uint8_t               keycode_count,
                                             const xcb_keysym_t   *keysyms)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_KEY_MAPPING,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_key_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.first_keycode = first_keycode;
    xcb_out.keysyms_per_keycode = keysyms_per_keycode;
    xcb_out.keycode_count = keycode_count;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_keysym_t keysyms */
    xcb_parts[4].iov_base = (char *) keysyms;
    xcb_parts[4].iov_len = (keycode_count * keysyms_per_keycode) * sizeof(xcb_keysym_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_change_device_key_mapping (xcb_connection_t     *c,
                                     uint8_t               device_id,
                                     xcb_input_key_code_t  first_keycode,
                                     uint8_t               keysyms_per_keycode,
                                     uint8_t               keycode_count,
                                     const xcb_keysym_t   *keysyms)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_KEY_MAPPING,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_key_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.first_keycode = first_keycode;
    xcb_out.keysyms_per_keycode = keysyms_per_keycode;
    xcb_out.keycode_count = keycode_count;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_keysym_t keysyms */
    xcb_parts[4].iov_base = (char *) keysyms;
    xcb_parts[4].iov_len = (keycode_count * keysyms_per_keycode) * sizeof(xcb_keysym_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_keysym_t *
xcb_input_change_device_key_mapping_keysyms (const xcb_input_change_device_key_mapping_request_t *R)
{
    return (xcb_keysym_t *) (R + 1);
}

int
xcb_input_change_device_key_mapping_keysyms_length (const xcb_input_change_device_key_mapping_request_t *R)
{
    return (R->keycode_count * R->keysyms_per_keycode);
}

xcb_generic_iterator_t
xcb_input_change_device_key_mapping_keysyms_end (const xcb_input_change_device_key_mapping_request_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_keysym_t *) (R + 1)) + ((R->keycode_count * R->keysyms_per_keycode));
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_get_device_modifier_mapping_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_device_modifier_mapping_reply_t *_aux = (xcb_input_get_device_modifier_mapping_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_device_modifier_mapping_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keymaps */
    xcb_block_len += (_aux->keycodes_per_modifier * 8) * sizeof(uint8_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint8_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_modifier_mapping_cookie_t
xcb_input_get_device_modifier_mapping (xcb_connection_t *c,
                                       uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_MODIFIER_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_modifier_mapping_cookie_t xcb_ret;
    xcb_input_get_device_modifier_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_modifier_mapping_cookie_t
xcb_input_get_device_modifier_mapping_unchecked (xcb_connection_t *c,
                                                 uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_MODIFIER_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_modifier_mapping_cookie_t xcb_ret;
    xcb_input_get_device_modifier_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

uint8_t *
xcb_input_get_device_modifier_mapping_keymaps (const xcb_input_get_device_modifier_mapping_reply_t *R)
{
    return (uint8_t *) (R + 1);
}

int
xcb_input_get_device_modifier_mapping_keymaps_length (const xcb_input_get_device_modifier_mapping_reply_t *R)
{
    return (R->keycodes_per_modifier * 8);
}

xcb_generic_iterator_t
xcb_input_get_device_modifier_mapping_keymaps_end (const xcb_input_get_device_modifier_mapping_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint8_t *) (R + 1)) + ((R->keycodes_per_modifier * 8));
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_get_device_modifier_mapping_reply_t *
xcb_input_get_device_modifier_mapping_reply (xcb_connection_t                                *c,
                                             xcb_input_get_device_modifier_mapping_cookie_t   cookie  /**< */,
                                             xcb_generic_error_t                            **e)
{
    return (xcb_input_get_device_modifier_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_set_device_modifier_mapping_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_set_device_modifier_mapping_request_t *_aux = (xcb_input_set_device_modifier_mapping_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_set_device_modifier_mapping_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keymaps */
    xcb_block_len += (_aux->keycodes_per_modifier * 8) * sizeof(uint8_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint8_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_set_device_modifier_mapping_cookie_t
xcb_input_set_device_modifier_mapping (xcb_connection_t *c,
                                       uint8_t           device_id,
                                       uint8_t           keycodes_per_modifier,
                                       const uint8_t    *keymaps)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_MODIFIER_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_set_device_modifier_mapping_cookie_t xcb_ret;
    xcb_input_set_device_modifier_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.keycodes_per_modifier = keycodes_per_modifier;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint8_t keymaps */
    xcb_parts[4].iov_base = (char *) keymaps;
    xcb_parts[4].iov_len = (keycodes_per_modifier * 8) * sizeof(uint8_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_modifier_mapping_cookie_t
xcb_input_set_device_modifier_mapping_unchecked (xcb_connection_t *c,
                                                 uint8_t           device_id,
                                                 uint8_t           keycodes_per_modifier,
                                                 const uint8_t    *keymaps)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_MODIFIER_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_set_device_modifier_mapping_cookie_t xcb_ret;
    xcb_input_set_device_modifier_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.keycodes_per_modifier = keycodes_per_modifier;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint8_t keymaps */
    xcb_parts[4].iov_base = (char *) keymaps;
    xcb_parts[4].iov_len = (keycodes_per_modifier * 8) * sizeof(uint8_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_modifier_mapping_reply_t *
xcb_input_set_device_modifier_mapping_reply (xcb_connection_t                                *c,
                                             xcb_input_set_device_modifier_mapping_cookie_t   cookie  /**< */,
                                             xcb_generic_error_t                            **e)
{
    return (xcb_input_set_device_modifier_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_get_device_button_mapping_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_device_button_mapping_reply_t *_aux = (xcb_input_get_device_button_mapping_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_device_button_mapping_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* map */
    xcb_block_len += _aux->map_size * sizeof(uint8_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint8_t);
    xcb_align_to = 4;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_button_mapping_cookie_t
xcb_input_get_device_button_mapping (xcb_connection_t *c,
                                     uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_BUTTON_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_button_mapping_cookie_t xcb_ret;
    xcb_input_get_device_button_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_button_mapping_cookie_t
xcb_input_get_device_button_mapping_unchecked (xcb_connection_t *c,
                                               uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_BUTTON_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_button_mapping_cookie_t xcb_ret;
    xcb_input_get_device_button_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

uint8_t *
xcb_input_get_device_button_mapping_map (const xcb_input_get_device_button_mapping_reply_t *R)
{
    return (uint8_t *) (R + 1);
}

int
xcb_input_get_device_button_mapping_map_length (const xcb_input_get_device_button_mapping_reply_t *R)
{
    return R->map_size;
}

xcb_generic_iterator_t
xcb_input_get_device_button_mapping_map_end (const xcb_input_get_device_button_mapping_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint8_t *) (R + 1)) + (R->map_size);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_get_device_button_mapping_reply_t *
xcb_input_get_device_button_mapping_reply (xcb_connection_t                              *c,
                                           xcb_input_get_device_button_mapping_cookie_t   cookie  /**< */,
                                           xcb_generic_error_t                          **e)
{
    return (xcb_input_get_device_button_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_set_device_button_mapping_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_set_device_button_mapping_request_t *_aux = (xcb_input_set_device_button_mapping_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_set_device_button_mapping_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* map */
    xcb_block_len += _aux->map_size * sizeof(uint8_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint8_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_set_device_button_mapping_cookie_t
xcb_input_set_device_button_mapping (xcb_connection_t *c,
                                     uint8_t           device_id,
                                     uint8_t           map_size,
                                     const uint8_t    *map)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_BUTTON_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_set_device_button_mapping_cookie_t xcb_ret;
    xcb_input_set_device_button_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.map_size = map_size;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint8_t map */
    xcb_parts[4].iov_base = (char *) map;
    xcb_parts[4].iov_len = map_size * sizeof(uint8_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_button_mapping_cookie_t
xcb_input_set_device_button_mapping_unchecked (xcb_connection_t *c,
                                               uint8_t           device_id,
                                               uint8_t           map_size,
                                               const uint8_t    *map)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_BUTTON_MAPPING,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_set_device_button_mapping_cookie_t xcb_ret;
    xcb_input_set_device_button_mapping_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.map_size = map_size;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint8_t map */
    xcb_parts[4].iov_base = (char *) map;
    xcb_parts[4].iov_len = map_size * sizeof(uint8_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_button_mapping_reply_t *
xcb_input_set_device_button_mapping_reply (xcb_connection_t                              *c,
                                           xcb_input_set_device_button_mapping_cookie_t   cookie  /**< */,
                                           xcb_generic_error_t                          **e)
{
    return (xcb_input_set_device_button_mapping_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

void
xcb_input_key_state_next (xcb_input_key_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_key_state_t);
}

xcb_generic_iterator_t
xcb_input_key_state_end (xcb_input_key_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_button_state_next (xcb_input_button_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_button_state_t);
}

xcb_generic_iterator_t
xcb_input_button_state_end (xcb_input_button_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_valuator_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_valuator_state_t *_aux = (xcb_input_valuator_state_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_valuator_state_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* valuators */
    xcb_block_len += _aux->num_valuators * sizeof(int32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(int32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

int32_t *
xcb_input_valuator_state_valuators (const xcb_input_valuator_state_t *R)
{
    return (int32_t *) (R + 1);
}

int
xcb_input_valuator_state_valuators_length (const xcb_input_valuator_state_t *R)
{
    return R->num_valuators;
}

xcb_generic_iterator_t
xcb_input_valuator_state_valuators_end (const xcb_input_valuator_state_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((int32_t *) (R + 1)) + (R->num_valuators);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_valuator_state_next (xcb_input_valuator_state_iterator_t *i)
{
    xcb_input_valuator_state_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_valuator_state_t *)(((char *)R) + xcb_input_valuator_state_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_valuator_state_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_valuator_state_end (xcb_input_valuator_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_valuator_state_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int32_t *
xcb_input_input_state_data_valuator_valuators (const xcb_input_input_state_data_t *S)
{
    return S->valuator.valuators;
}

int
xcb_input_input_state_data_valuator_valuators_length (const xcb_input_input_state_t *R,
                                                      const xcb_input_input_state_data_t *S)
{
    return S->valuator.num_valuators;
}

xcb_generic_iterator_t
xcb_input_input_state_data_valuator_valuators_end (const xcb_input_input_state_t *R,
                                                   const xcb_input_input_state_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->valuator.valuators + S->valuator.num_valuators;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_input_state_data_serialize (void                               **_buffer,
                                      uint8_t                              class_id,
                                      const xcb_input_input_state_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 2;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[11];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
        /* xcb_input_input_state_data_t.key.num_keys */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.num_keys;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.key.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.key.keys */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->key.keys;
        xcb_block_len += 32;
        xcb_parts[xcb_parts_idx].iov_len = 32;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
        /* xcb_input_input_state_data_t.button.num_buttons */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->button.num_buttons;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.button.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.button.buttons */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->button.buttons;
        xcb_block_len += 32;
        xcb_parts[xcb_parts_idx].iov_len = 32;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
        /* xcb_input_input_state_data_t.valuator.num_valuators */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.num_valuators;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.valuator.mode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.mode;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* valuators */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->valuator.valuators;
        xcb_block_len += _aux->valuator.num_valuators * sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->valuator.num_valuators * sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_input_state_data_unpack (const void                    *_buffer,
                                   uint8_t                        class_id,
                                   xcb_input_input_state_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 2;


    if(class_id == XCB_INPUT_INPUT_CLASS_KEY) {
        /* xcb_input_input_state_data_t.key.num_keys */
        _aux->key.num_keys = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.key.pad0 */
        _aux->key.pad0 = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.key.keys */
        memcpy(_aux->key.keys, xcb_tmp, sizeof(uint8_t) * 32);
        xcb_block_len += sizeof(uint8_t) * 32;
        xcb_tmp += sizeof(uint8_t) * 32;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_BUTTON) {
        /* xcb_input_input_state_data_t.button.num_buttons */
        _aux->button.num_buttons = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.button.pad1 */
        _aux->button.pad1 = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.button.buttons */
        memcpy(_aux->button.buttons, xcb_tmp, sizeof(uint8_t) * 32);
        xcb_block_len += sizeof(uint8_t) * 32;
        xcb_tmp += sizeof(uint8_t) * 32;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(class_id == XCB_INPUT_INPUT_CLASS_VALUATOR) {
        /* xcb_input_input_state_data_t.valuator.num_valuators */
        _aux->valuator.num_valuators = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_input_state_data_t.valuator.mode */
        _aux->valuator.mode = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* valuators */
        _aux->valuator.valuators = (int32_t *)xcb_tmp;
        xcb_block_len += _aux->valuator.num_valuators * sizeof(int32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(int32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_input_state_data_sizeof (const void  *_buffer,
                                   uint8_t      class_id)
{
    xcb_input_input_state_data_t _aux;
    return xcb_input_input_state_data_unpack(_buffer, class_id, &_aux);
}

int
xcb_input_input_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_input_state_t *_aux = (xcb_input_input_state_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_input_state_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_input_state_data_sizeof(xcb_tmp, _aux->class_id);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_input_state_data (const xcb_input_input_state_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_input_state_next (xcb_input_input_state_iterator_t *i)
{
    xcb_input_input_state_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_input_state_t *)(((char *)R) + xcb_input_input_state_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_input_state_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_input_state_end (xcb_input_input_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_input_state_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_query_device_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_query_device_state_reply_t *_aux = (xcb_input_query_device_state_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_query_device_state_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    for(i=0; i<_aux->num_classes; i++) {
        xcb_tmp_len = xcb_input_input_state_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_input_state_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_query_device_state_cookie_t
xcb_input_query_device_state (xcb_connection_t *c,
                              uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_QUERY_DEVICE_STATE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_query_device_state_cookie_t xcb_ret;
    xcb_input_query_device_state_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_query_device_state_cookie_t
xcb_input_query_device_state_unchecked (xcb_connection_t *c,
                                        uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_QUERY_DEVICE_STATE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_query_device_state_cookie_t xcb_ret;
    xcb_input_query_device_state_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_query_device_state_classes_length (const xcb_input_query_device_state_reply_t *R)
{
    return R->num_classes;
}

xcb_input_input_state_iterator_t
xcb_input_query_device_state_classes_iterator (const xcb_input_query_device_state_reply_t *R)
{
    xcb_input_input_state_iterator_t i;
    i.data = (xcb_input_input_state_t *) (R + 1);
    i.rem = R->num_classes;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_query_device_state_reply_t *
xcb_input_query_device_state_reply (xcb_connection_t                       *c,
                                    xcb_input_query_device_state_cookie_t   cookie  /**< */,
                                    xcb_generic_error_t                   **e)
{
    return (xcb_input_query_device_state_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_device_bell_checked (xcb_connection_t *c,
                               uint8_t           device_id,
                               uint8_t           feedback_id,
                               uint8_t           feedback_class,
                               int8_t            percent)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_DEVICE_BELL,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_device_bell_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.feedback_id = feedback_id;
    xcb_out.feedback_class = feedback_class;
    xcb_out.percent = percent;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_device_bell (xcb_connection_t *c,
                       uint8_t           device_id,
                       uint8_t           feedback_id,
                       uint8_t           feedback_class,
                       int8_t            percent)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_DEVICE_BELL,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_device_bell_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.feedback_id = feedback_id;
    xcb_out.feedback_class = feedback_class;
    xcb_out.percent = percent;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_set_device_valuators_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_set_device_valuators_request_t *_aux = (xcb_input_set_device_valuators_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_set_device_valuators_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* valuators */
    xcb_block_len += _aux->num_valuators * sizeof(int32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(int32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_set_device_valuators_cookie_t
xcb_input_set_device_valuators (xcb_connection_t *c,
                                uint8_t           device_id,
                                uint8_t           first_valuator,
                                uint8_t           num_valuators,
                                const int32_t    *valuators)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_VALUATORS,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_set_device_valuators_cookie_t xcb_ret;
    xcb_input_set_device_valuators_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.first_valuator = first_valuator;
    xcb_out.num_valuators = num_valuators;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* int32_t valuators */
    xcb_parts[4].iov_base = (char *) valuators;
    xcb_parts[4].iov_len = num_valuators * sizeof(int32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_valuators_cookie_t
xcb_input_set_device_valuators_unchecked (xcb_connection_t *c,
                                          uint8_t           device_id,
                                          uint8_t           first_valuator,
                                          uint8_t           num_valuators,
                                          const int32_t    *valuators)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SET_DEVICE_VALUATORS,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_set_device_valuators_cookie_t xcb_ret;
    xcb_input_set_device_valuators_request_t xcb_out;

    xcb_out.device_id = device_id;
    xcb_out.first_valuator = first_valuator;
    xcb_out.num_valuators = num_valuators;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* int32_t valuators */
    xcb_parts[4].iov_base = (char *) valuators;
    xcb_parts[4].iov_len = num_valuators * sizeof(int32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_set_device_valuators_reply_t *
xcb_input_set_device_valuators_reply (xcb_connection_t                         *c,
                                      xcb_input_set_device_valuators_cookie_t   cookie  /**< */,
                                      xcb_generic_error_t                     **e)
{
    return (xcb_input_set_device_valuators_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_device_resolution_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_resolution_state_t *_aux = (xcb_input_device_resolution_state_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_resolution_state_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* resolution_values */
    xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* resolution_min */
    xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* resolution_max */
    xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_device_resolution_state_resolution_values (const xcb_input_device_resolution_state_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_device_resolution_state_resolution_values_length (const xcb_input_device_resolution_state_t *R)
{
    return R->num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_resolution_state_resolution_values_end (const xcb_input_device_resolution_state_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->num_valuators);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

uint32_t *
xcb_input_device_resolution_state_resolution_min (const xcb_input_device_resolution_state_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_values_end(R);
    return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
}

int
xcb_input_device_resolution_state_resolution_min_length (const xcb_input_device_resolution_state_t *R)
{
    return R->num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_resolution_state_resolution_min_end (const xcb_input_device_resolution_state_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_values_end(R);
    i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->num_valuators);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

uint32_t *
xcb_input_device_resolution_state_resolution_max (const xcb_input_device_resolution_state_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_min_end(R);
    return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
}

int
xcb_input_device_resolution_state_resolution_max_length (const xcb_input_device_resolution_state_t *R)
{
    return R->num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_resolution_state_resolution_max_end (const xcb_input_device_resolution_state_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_device_resolution_state_resolution_min_end(R);
    i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->num_valuators);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_device_resolution_state_next (xcb_input_device_resolution_state_iterator_t *i)
{
    xcb_input_device_resolution_state_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_resolution_state_t *)(((char *)R) + xcb_input_device_resolution_state_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_resolution_state_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_resolution_state_end (xcb_input_device_resolution_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_resolution_state_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

void
xcb_input_device_abs_calib_state_next (xcb_input_device_abs_calib_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_abs_calib_state_t);
}

xcb_generic_iterator_t
xcb_input_device_abs_calib_state_end (xcb_input_device_abs_calib_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_abs_area_state_next (xcb_input_device_abs_area_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_abs_area_state_t);
}

xcb_generic_iterator_t
xcb_input_device_abs_area_state_end (xcb_input_device_abs_area_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_core_state_next (xcb_input_device_core_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_core_state_t);
}

xcb_generic_iterator_t
xcb_input_device_core_state_end (xcb_input_device_core_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_enable_state_next (xcb_input_device_enable_state_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_enable_state_t);
}

xcb_generic_iterator_t
xcb_input_device_enable_state_end (xcb_input_device_enable_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

uint32_t *
xcb_input_device_state_data_resolution_resolution_values (const xcb_input_device_state_data_t *S)
{
    return S->resolution.resolution_values;
}

int
xcb_input_device_state_data_resolution_resolution_values_length (const xcb_input_device_state_t *R,
                                                                 const xcb_input_device_state_data_t *S)
{
    return S->resolution.num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_state_data_resolution_resolution_values_end (const xcb_input_device_state_t *R,
                                                              const xcb_input_device_state_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->resolution.resolution_values + S->resolution.num_valuators;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_device_state_data_resolution_resolution_min (const xcb_input_device_state_data_t *S)
{
    return S->resolution.resolution_min;
}

int
xcb_input_device_state_data_resolution_resolution_min_length (const xcb_input_device_state_t *R,
                                                              const xcb_input_device_state_data_t *S)
{
    return S->resolution.num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_state_data_resolution_resolution_min_end (const xcb_input_device_state_t *R,
                                                           const xcb_input_device_state_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->resolution.resolution_min + S->resolution.num_valuators;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_device_state_data_resolution_resolution_max (const xcb_input_device_state_data_t *S)
{
    return S->resolution.resolution_max;
}

int
xcb_input_device_state_data_resolution_resolution_max_length (const xcb_input_device_state_t *R,
                                                              const xcb_input_device_state_data_t *S)
{
    return S->resolution.num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_state_data_resolution_resolution_max_end (const xcb_input_device_state_t *R,
                                                           const xcb_input_device_state_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->resolution.resolution_max + S->resolution.num_valuators;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_device_state_data_serialize (void                                **_buffer,
                                       uint16_t                              control_id,
                                       const xcb_input_device_state_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[27];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
        /* xcb_input_device_state_data_t.resolution.num_valuators */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->resolution.num_valuators;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_values */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_values;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_min */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_min;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_max */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_max;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
        /* xcb_input_device_state_data_t.abs_calib.min_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_x;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.max_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_x;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.min_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_y;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.max_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_y;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.flip_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_x;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_calib.flip_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_y;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_calib.rotation */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.rotation;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_calib.button_threshold */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.button_threshold;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
        /* xcb_input_device_state_data_t.core.status */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->core.status;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_state_data_t.core.iscore */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->core.iscore;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_state_data_t.core.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
        /* xcb_input_device_state_data_t.enable.enable */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->enable.enable;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_state_data_t.enable.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*3;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
        /* xcb_input_device_state_data_t.abs_area.offset_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_x;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.offset_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_y;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.width */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.width;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.height */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.height;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.screen */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.screen;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.following */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.following;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_device_state_data_unpack (const void                     *_buffer,
                                    uint16_t                        control_id,
                                    xcb_input_device_state_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
        /* xcb_input_device_state_data_t.resolution.num_valuators */
        _aux->resolution.num_valuators = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_values */
        _aux->resolution.resolution_values = (uint32_t *)xcb_tmp;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_min */
        _aux->resolution.resolution_min = (uint32_t *)xcb_tmp;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_max */
        _aux->resolution.resolution_max = (uint32_t *)xcb_tmp;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
        /* xcb_input_device_state_data_t.abs_calib.min_x */
        _aux->abs_calib.min_x = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.max_x */
        _aux->abs_calib.max_x = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.min_y */
        _aux->abs_calib.min_y = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.max_y */
        _aux->abs_calib.max_y = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_state_data_t.abs_calib.flip_x */
        _aux->abs_calib.flip_x = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_calib.flip_y */
        _aux->abs_calib.flip_y = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_calib.rotation */
        _aux->abs_calib.rotation = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_calib.button_threshold */
        _aux->abs_calib.button_threshold = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
        /* xcb_input_device_state_data_t.core.status */
        _aux->core.status = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_state_data_t.core.iscore */
        _aux->core.iscore = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_state_data_t.core.pad0 */
        _aux->core.pad0[0] = *(uint8_t *)xcb_tmp;
        _aux->core.pad0[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
        /* xcb_input_device_state_data_t.enable.enable */
        _aux->enable.enable = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_state_data_t.enable.pad1 */
        _aux->enable.pad1[0] = *(uint8_t *)xcb_tmp;
        _aux->enable.pad1[1] = *(uint8_t *)xcb_tmp;
        _aux->enable.pad1[2] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 3;
        xcb_tmp += sizeof(uint8_t) * 3;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
        /* xcb_input_device_state_data_t.abs_area.offset_x */
        _aux->abs_area.offset_x = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.offset_y */
        _aux->abs_area.offset_y = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.width */
        _aux->abs_area.width = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.height */
        _aux->abs_area.height = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.screen */
        _aux->abs_area.screen = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_state_data_t.abs_area.following */
        _aux->abs_area.following = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_device_state_data_sizeof (const void  *_buffer,
                                    uint16_t     control_id)
{
    xcb_input_device_state_data_t _aux;
    return xcb_input_device_state_data_unpack(_buffer, control_id, &_aux);
}

int
xcb_input_device_state_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_state_t *_aux = (xcb_input_device_state_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_state_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_device_state_data_sizeof(xcb_tmp, _aux->control_id);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_device_state_data (const xcb_input_device_state_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_device_state_next (xcb_input_device_state_iterator_t *i)
{
    xcb_input_device_state_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_state_t *)(((char *)R) + xcb_input_device_state_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_state_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_state_end (xcb_input_device_state_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_state_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_get_device_control_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_device_control_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* control */
    xcb_block_len += xcb_input_device_state_sizeof(xcb_tmp);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_device_state_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_control_cookie_t
xcb_input_get_device_control (xcb_connection_t *c,
                              uint16_t          control_id,
                              uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_CONTROL,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_control_cookie_t xcb_ret;
    xcb_input_get_device_control_request_t xcb_out;

    xcb_out.control_id = control_id;
    xcb_out.device_id = device_id;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_control_cookie_t
xcb_input_get_device_control_unchecked (xcb_connection_t *c,
                                        uint16_t          control_id,
                                        uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_CONTROL,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_control_cookie_t xcb_ret;
    xcb_input_get_device_control_request_t xcb_out;

    xcb_out.control_id = control_id;
    xcb_out.device_id = device_id;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_device_state_t *
xcb_input_get_device_control_control (const xcb_input_get_device_control_reply_t *R)
{
    return (xcb_input_device_state_t *) (R + 1);
}

xcb_input_get_device_control_reply_t *
xcb_input_get_device_control_reply (xcb_connection_t                       *c,
                                    xcb_input_get_device_control_cookie_t   cookie  /**< */,
                                    xcb_generic_error_t                   **e)
{
    return (xcb_input_get_device_control_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_device_resolution_ctl_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_resolution_ctl_t *_aux = (xcb_input_device_resolution_ctl_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_resolution_ctl_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* resolution_values */
    xcb_block_len += _aux->num_valuators * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_device_resolution_ctl_resolution_values (const xcb_input_device_resolution_ctl_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_device_resolution_ctl_resolution_values_length (const xcb_input_device_resolution_ctl_t *R)
{
    return R->num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_resolution_ctl_resolution_values_end (const xcb_input_device_resolution_ctl_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->num_valuators);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_device_resolution_ctl_next (xcb_input_device_resolution_ctl_iterator_t *i)
{
    xcb_input_device_resolution_ctl_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_resolution_ctl_t *)(((char *)R) + xcb_input_device_resolution_ctl_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_resolution_ctl_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_resolution_ctl_end (xcb_input_device_resolution_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_resolution_ctl_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

void
xcb_input_device_abs_calib_ctl_next (xcb_input_device_abs_calib_ctl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_abs_calib_ctl_t);
}

xcb_generic_iterator_t
xcb_input_device_abs_calib_ctl_end (xcb_input_device_abs_calib_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_abs_area_ctrl_next (xcb_input_device_abs_area_ctrl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_abs_area_ctrl_t);
}

xcb_generic_iterator_t
xcb_input_device_abs_area_ctrl_end (xcb_input_device_abs_area_ctrl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_core_ctrl_next (xcb_input_device_core_ctrl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_core_ctrl_t);
}

xcb_generic_iterator_t
xcb_input_device_core_ctrl_end (xcb_input_device_core_ctrl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_device_enable_ctrl_next (xcb_input_device_enable_ctrl_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_device_enable_ctrl_t);
}

xcb_generic_iterator_t
xcb_input_device_enable_ctrl_end (xcb_input_device_enable_ctrl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

uint32_t *
xcb_input_device_ctl_data_resolution_resolution_values (const xcb_input_device_ctl_data_t *S)
{
    return S->resolution.resolution_values;
}

int
xcb_input_device_ctl_data_resolution_resolution_values_length (const xcb_input_device_ctl_t *R,
                                                               const xcb_input_device_ctl_data_t *S)
{
    return S->resolution.num_valuators;
}

xcb_generic_iterator_t
xcb_input_device_ctl_data_resolution_resolution_values_end (const xcb_input_device_ctl_t *R,
                                                            const xcb_input_device_ctl_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->resolution.resolution_values + S->resolution.num_valuators;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_device_ctl_data_serialize (void                              **_buffer,
                                     uint16_t                            control_id,
                                     const xcb_input_device_ctl_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[24];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
        /* xcb_input_device_ctl_data_t.resolution.first_valuator */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->resolution.first_valuator;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.resolution.num_valuators */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->resolution.num_valuators;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.resolution.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_values */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->resolution.resolution_values;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
        /* xcb_input_device_ctl_data_t.abs_calib.min_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_x;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.max_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_x;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.min_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.min_y;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.max_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.max_y;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.flip_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_x;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.flip_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.flip_y;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.rotation */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.rotation;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.button_threshold */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_calib.button_threshold;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
        /* xcb_input_device_ctl_data_t.core.status */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->core.status;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.core.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*3;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
        /* xcb_input_device_ctl_data_t.enable.enable */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->enable.enable;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.enable.pad2 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*3;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
        /* xcb_input_device_ctl_data_t.abs_area.offset_x */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_x;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_area.offset_y */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.offset_y;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_area.width */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.width;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_area.height */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.height;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_area.screen */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.screen;
        xcb_block_len += sizeof(int32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(int32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_area.following */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->abs_area.following;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_device_ctl_data_unpack (const void                   *_buffer,
                                  uint16_t                      control_id,
                                  xcb_input_device_ctl_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(control_id == XCB_INPUT_DEVICE_CONTROL_RESOLUTION) {
        /* xcb_input_device_ctl_data_t.resolution.first_valuator */
        _aux->resolution.first_valuator = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.resolution.num_valuators */
        _aux->resolution.num_valuators = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.resolution.pad0 */
        _aux->resolution.pad0[0] = *(uint8_t *)xcb_tmp;
        _aux->resolution.pad0[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* resolution_values */
        _aux->resolution.resolution_values = (uint32_t *)xcb_tmp;
        xcb_block_len += _aux->resolution.num_valuators * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_CALIB) {
        /* xcb_input_device_ctl_data_t.abs_calib.min_x */
        _aux->abs_calib.min_x = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.max_x */
        _aux->abs_calib.max_x = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.min_y */
        _aux->abs_calib.min_y = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.max_y */
        _aux->abs_calib.max_y = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.flip_x */
        _aux->abs_calib.flip_x = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.flip_y */
        _aux->abs_calib.flip_y = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.rotation */
        _aux->abs_calib.rotation = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_calib.button_threshold */
        _aux->abs_calib.button_threshold = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_CORE) {
        /* xcb_input_device_ctl_data_t.core.status */
        _aux->core.status = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.core.pad1 */
        _aux->core.pad1[0] = *(uint8_t *)xcb_tmp;
        _aux->core.pad1[1] = *(uint8_t *)xcb_tmp;
        _aux->core.pad1[2] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 3;
        xcb_tmp += sizeof(uint8_t) * 3;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ENABLE) {
        /* xcb_input_device_ctl_data_t.enable.enable */
        _aux->enable.enable = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_ctl_data_t.enable.pad2 */
        _aux->enable.pad2[0] = *(uint8_t *)xcb_tmp;
        _aux->enable.pad2[1] = *(uint8_t *)xcb_tmp;
        _aux->enable.pad2[2] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 3;
        xcb_tmp += sizeof(uint8_t) * 3;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(control_id == XCB_INPUT_DEVICE_CONTROL_ABS_AREA) {
        /* xcb_input_device_ctl_data_t.abs_area.offset_x */
        _aux->abs_area.offset_x = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_area.offset_y */
        _aux->abs_area.offset_y = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_ctl_data_t.abs_area.width */
        _aux->abs_area.width = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_area.height */
        _aux->abs_area.height = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_area.screen */
        _aux->abs_area.screen = *(int32_t *)xcb_tmp;
        xcb_block_len += sizeof(int32_t);
        xcb_tmp += sizeof(int32_t);
        xcb_align_to = ALIGNOF(int32_t);
        /* xcb_input_device_ctl_data_t.abs_area.following */
        _aux->abs_area.following = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_device_ctl_data_sizeof (const void  *_buffer,
                                  uint16_t     control_id)
{
    xcb_input_device_ctl_data_t _aux;
    return xcb_input_device_ctl_data_unpack(_buffer, control_id, &_aux);
}

int
xcb_input_device_ctl_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_ctl_t *_aux = (xcb_input_device_ctl_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_ctl_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_device_ctl_data_sizeof(xcb_tmp, _aux->control_id);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_device_ctl_data (const xcb_input_device_ctl_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_device_ctl_next (xcb_input_device_ctl_iterator_t *i)
{
    xcb_input_device_ctl_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_ctl_t *)(((char *)R) + xcb_input_device_ctl_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_ctl_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_ctl_end (xcb_input_device_ctl_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_ctl_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_change_device_control_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_change_device_control_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* control */
    xcb_block_len += xcb_input_device_ctl_sizeof(xcb_tmp);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_device_ctl_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_change_device_control_cookie_t
xcb_input_change_device_control (xcb_connection_t       *c,
                                 uint16_t                control_id,
                                 uint8_t                 device_id,
                                 xcb_input_device_ctl_t *control)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_CONTROL,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_change_device_control_cookie_t xcb_ret;
    xcb_input_change_device_control_request_t xcb_out;

    xcb_out.control_id = control_id;
    xcb_out.device_id = device_id;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_device_ctl_t control */
    xcb_parts[4].iov_base = (char *) control;
    xcb_parts[4].iov_len =
      xcb_input_device_ctl_sizeof (control);

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_change_device_control_cookie_t
xcb_input_change_device_control_unchecked (xcb_connection_t       *c,
                                           uint16_t                control_id,
                                           uint8_t                 device_id,
                                           xcb_input_device_ctl_t *control)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_CONTROL,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_change_device_control_cookie_t xcb_ret;
    xcb_input_change_device_control_request_t xcb_out;

    xcb_out.control_id = control_id;
    xcb_out.device_id = device_id;
    xcb_out.pad0 = 0;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_device_ctl_t control */
    xcb_parts[4].iov_base = (char *) control;
    xcb_parts[4].iov_len =
      xcb_input_device_ctl_sizeof (control);

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_change_device_control_reply_t *
xcb_input_change_device_control_reply (xcb_connection_t                          *c,
                                       xcb_input_change_device_control_cookie_t   cookie  /**< */,
                                       xcb_generic_error_t                      **e)
{
    return (xcb_input_change_device_control_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_list_device_properties_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_list_device_properties_reply_t *_aux = (xcb_input_list_device_properties_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_list_device_properties_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* atoms */
    xcb_block_len += _aux->num_atoms * sizeof(xcb_atom_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_atom_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_list_device_properties_cookie_t
xcb_input_list_device_properties (xcb_connection_t *c,
                                  uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_LIST_DEVICE_PROPERTIES,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_list_device_properties_cookie_t xcb_ret;
    xcb_input_list_device_properties_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_list_device_properties_cookie_t
xcb_input_list_device_properties_unchecked (xcb_connection_t *c,
                                            uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_LIST_DEVICE_PROPERTIES,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_list_device_properties_cookie_t xcb_ret;
    xcb_input_list_device_properties_request_t xcb_out;

    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_atom_t *
xcb_input_list_device_properties_atoms (const xcb_input_list_device_properties_reply_t *R)
{
    return (xcb_atom_t *) (R + 1);
}

int
xcb_input_list_device_properties_atoms_length (const xcb_input_list_device_properties_reply_t *R)
{
    return R->num_atoms;
}

xcb_generic_iterator_t
xcb_input_list_device_properties_atoms_end (const xcb_input_list_device_properties_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_atom_t *) (R + 1)) + (R->num_atoms);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_list_device_properties_reply_t *
xcb_input_list_device_properties_reply (xcb_connection_t                           *c,
                                        xcb_input_list_device_properties_cookie_t   cookie  /**< */,
                                        xcb_generic_error_t                       **e)
{
    return (xcb_input_list_device_properties_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

uint8_t *
xcb_input_change_device_property_items_data_8 (const xcb_input_change_device_property_items_t *S)
{
    return S->data8;
}

int
xcb_input_change_device_property_items_data_8_length (const xcb_input_change_device_property_request_t *R,
                                                      const xcb_input_change_device_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_change_device_property_items_data_8_end (const xcb_input_change_device_property_request_t *R,
                                                   const xcb_input_change_device_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data8 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint16_t *
xcb_input_change_device_property_items_data_16 (const xcb_input_change_device_property_items_t *S)
{
    return S->data16;
}

int
xcb_input_change_device_property_items_data_16_length (const xcb_input_change_device_property_request_t *R,
                                                       const xcb_input_change_device_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_change_device_property_items_data_16_end (const xcb_input_change_device_property_request_t *R,
                                                    const xcb_input_change_device_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data16 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_change_device_property_items_data_32 (const xcb_input_change_device_property_items_t *S)
{
    return S->data32;
}

int
xcb_input_change_device_property_items_data_32_length (const xcb_input_change_device_property_request_t *R,
                                                       const xcb_input_change_device_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_change_device_property_items_data_32_end (const xcb_input_change_device_property_request_t *R,
                                                    const xcb_input_change_device_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data32 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_change_device_property_items_serialize (void                                           **_buffer,
                                                  uint32_t                                         num_items,
                                                  uint8_t                                          format,
                                                  const xcb_input_change_device_property_items_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[9];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_change_device_property_items_unpack (const void                                *_buffer,
                                               uint32_t                                   num_items,
                                               uint8_t                                    format,
                                               xcb_input_change_device_property_items_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        _aux->data8 = (uint8_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        _aux->data16 = (uint16_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        _aux->data32 = (uint32_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_change_device_property_items_sizeof (const void  *_buffer,
                                               uint32_t     num_items,
                                               uint8_t      format)
{
    xcb_input_change_device_property_items_t _aux;
    return xcb_input_change_device_property_items_unpack(_buffer, num_items, format, &_aux);
}

int
xcb_input_change_device_property_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_change_device_property_request_t *_aux = (xcb_input_change_device_property_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_change_device_property_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* items */
    xcb_block_len += xcb_input_change_device_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_change_device_property_checked (xcb_connection_t *c,
                                          xcb_atom_t        property,
                                          xcb_atom_t        type,
                                          uint8_t           device_id,
                                          uint8_t           format,
                                          uint8_t           mode,
                                          uint32_t          num_items,
                                          const void       *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_property_request_t xcb_out;

    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.device_id = device_id;
    xcb_out.format = format;
    xcb_out.mode = mode;
    xcb_out.pad0 = 0;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_change_device_property_items_t items */
    xcb_parts[4].iov_base = (char *) items;
    xcb_parts[4].iov_len =
      xcb_input_change_device_property_items_sizeof (items, num_items, format);

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_change_device_property (xcb_connection_t *c,
                                  xcb_atom_t        property,
                                  xcb_atom_t        type,
                                  uint8_t           device_id,
                                  uint8_t           format,
                                  uint8_t           mode,
                                  uint32_t          num_items,
                                  const void       *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_property_request_t xcb_out;

    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.device_id = device_id;
    xcb_out.format = format;
    xcb_out.mode = mode;
    xcb_out.pad0 = 0;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_change_device_property_items_t items */
    xcb_parts[4].iov_base = (char *) items;
    xcb_parts[4].iov_len =
      xcb_input_change_device_property_items_sizeof (items, num_items, format);

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_change_device_property_aux_checked (xcb_connection_t                               *c,
                                              xcb_atom_t                                      property,
                                              xcb_atom_t                                      type,
                                              uint8_t                                         device_id,
                                              uint8_t                                         format,
                                              uint8_t                                         mode,
                                              uint32_t                                        num_items,
                                              const xcb_input_change_device_property_items_t *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_property_request_t xcb_out;
    void *xcb_aux0 = 0;

    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.device_id = device_id;
    xcb_out.format = format;
    xcb_out.mode = mode;
    xcb_out.pad0 = 0;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_change_device_property_items_t items */
    xcb_parts[4].iov_len =
      xcb_input_change_device_property_items_serialize (&xcb_aux0, num_items, format, items);
    xcb_parts[4].iov_base = xcb_aux0;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    free(xcb_aux0);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_change_device_property_aux (xcb_connection_t                               *c,
                                      xcb_atom_t                                      property,
                                      xcb_atom_t                                      type,
                                      uint8_t                                         device_id,
                                      uint8_t                                         format,
                                      uint8_t                                         mode,
                                      uint32_t                                        num_items,
                                      const xcb_input_change_device_property_items_t *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_CHANGE_DEVICE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_change_device_property_request_t xcb_out;
    void *xcb_aux0 = 0;

    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.device_id = device_id;
    xcb_out.format = format;
    xcb_out.mode = mode;
    xcb_out.pad0 = 0;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_change_device_property_items_t items */
    xcb_parts[4].iov_len =
      xcb_input_change_device_property_items_serialize (&xcb_aux0, num_items, format, items);
    xcb_parts[4].iov_base = xcb_aux0;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    free(xcb_aux0);
    return xcb_ret;
}

void *
xcb_input_change_device_property_items (const xcb_input_change_device_property_request_t *R)
{
    return (void *) (R + 1);
}

xcb_void_cookie_t
xcb_input_delete_device_property_checked (xcb_connection_t *c,
                                          xcb_atom_t        property,
                                          uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_DELETE_DEVICE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_delete_device_property_request_t xcb_out;

    xcb_out.property = property;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_delete_device_property (xcb_connection_t *c,
                                  xcb_atom_t        property,
                                  uint8_t           device_id)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_DELETE_DEVICE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_delete_device_property_request_t xcb_out;

    xcb_out.property = property;
    xcb_out.device_id = device_id;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

uint8_t *
xcb_input_get_device_property_items_data_8 (const xcb_input_get_device_property_items_t *S)
{
    return S->data8;
}

int
xcb_input_get_device_property_items_data_8_length (const xcb_input_get_device_property_reply_t *R,
                                                   const xcb_input_get_device_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_get_device_property_items_data_8_end (const xcb_input_get_device_property_reply_t *R,
                                                const xcb_input_get_device_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data8 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint16_t *
xcb_input_get_device_property_items_data_16 (const xcb_input_get_device_property_items_t *S)
{
    return S->data16;
}

int
xcb_input_get_device_property_items_data_16_length (const xcb_input_get_device_property_reply_t *R,
                                                    const xcb_input_get_device_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_get_device_property_items_data_16_end (const xcb_input_get_device_property_reply_t *R,
                                                 const xcb_input_get_device_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data16 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_get_device_property_items_data_32 (const xcb_input_get_device_property_items_t *S)
{
    return S->data32;
}

int
xcb_input_get_device_property_items_data_32_length (const xcb_input_get_device_property_reply_t *R,
                                                    const xcb_input_get_device_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_get_device_property_items_data_32_end (const xcb_input_get_device_property_reply_t *R,
                                                 const xcb_input_get_device_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data32 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_get_device_property_items_serialize (void                                        **_buffer,
                                               uint32_t                                      num_items,
                                               uint8_t                                       format,
                                               const xcb_input_get_device_property_items_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[9];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_get_device_property_items_unpack (const void                             *_buffer,
                                            uint32_t                                num_items,
                                            uint8_t                                 format,
                                            xcb_input_get_device_property_items_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        _aux->data8 = (uint8_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        _aux->data16 = (uint16_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        _aux->data32 = (uint32_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_get_device_property_items_sizeof (const void  *_buffer,
                                            uint32_t     num_items,
                                            uint8_t      format)
{
    xcb_input_get_device_property_items_t _aux;
    return xcb_input_get_device_property_items_unpack(_buffer, num_items, format, &_aux);
}

int
xcb_input_get_device_property_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_get_device_property_reply_t *_aux = (xcb_input_get_device_property_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_get_device_property_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* items */
    xcb_block_len += xcb_input_get_device_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_get_device_property_cookie_t
xcb_input_get_device_property (xcb_connection_t *c,
                               xcb_atom_t        property,
                               xcb_atom_t        type,
                               uint32_t          offset,
                               uint32_t          len,
                               uint8_t           device_id,
                               uint8_t           _delete)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_PROPERTY,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_property_cookie_t xcb_ret;
    xcb_input_get_device_property_request_t xcb_out;

    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.offset = offset;
    xcb_out.len = len;
    xcb_out.device_id = device_id;
    xcb_out._delete = _delete;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_get_device_property_cookie_t
xcb_input_get_device_property_unchecked (xcb_connection_t *c,
                                         xcb_atom_t        property,
                                         xcb_atom_t        type,
                                         uint32_t          offset,
                                         uint32_t          len,
                                         uint8_t           device_id,
                                         uint8_t           _delete)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_GET_DEVICE_PROPERTY,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_get_device_property_cookie_t xcb_ret;
    xcb_input_get_device_property_request_t xcb_out;

    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.offset = offset;
    xcb_out.len = len;
    xcb_out.device_id = device_id;
    xcb_out._delete = _delete;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

void *
xcb_input_get_device_property_items (const xcb_input_get_device_property_reply_t *R)
{
    return (void *) (R + 1);
}

xcb_input_get_device_property_reply_t *
xcb_input_get_device_property_reply (xcb_connection_t                        *c,
                                     xcb_input_get_device_property_cookie_t   cookie  /**< */,
                                     xcb_generic_error_t                    **e)
{
    return (xcb_input_get_device_property_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

void
xcb_input_group_info_next (xcb_input_group_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_group_info_t);
}

xcb_generic_iterator_t
xcb_input_group_info_end (xcb_input_group_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_modifier_info_next (xcb_input_modifier_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_modifier_info_t);
}

xcb_generic_iterator_t
xcb_input_modifier_info_end (xcb_input_modifier_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_xi_query_pointer_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_query_pointer_reply_t *_aux = (xcb_input_xi_query_pointer_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_query_pointer_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* buttons */
    xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_query_pointer_cookie_t
xcb_input_xi_query_pointer (xcb_connection_t      *c,
                            xcb_window_t           window,
                            xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_QUERY_POINTER,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_query_pointer_cookie_t xcb_ret;
    xcb_input_xi_query_pointer_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_query_pointer_cookie_t
xcb_input_xi_query_pointer_unchecked (xcb_connection_t      *c,
                                      xcb_window_t           window,
                                      xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_QUERY_POINTER,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_query_pointer_cookie_t xcb_ret;
    xcb_input_xi_query_pointer_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

uint32_t *
xcb_input_xi_query_pointer_buttons (const xcb_input_xi_query_pointer_reply_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_xi_query_pointer_buttons_length (const xcb_input_xi_query_pointer_reply_t *R)
{
    return R->buttons_len;
}

xcb_generic_iterator_t
xcb_input_xi_query_pointer_buttons_end (const xcb_input_xi_query_pointer_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_xi_query_pointer_reply_t *
xcb_input_xi_query_pointer_reply (xcb_connection_t                     *c,
                                  xcb_input_xi_query_pointer_cookie_t   cookie  /**< */,
                                  xcb_generic_error_t                 **e)
{
    return (xcb_input_xi_query_pointer_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_xi_warp_pointer_checked (xcb_connection_t      *c,
                                   xcb_window_t           src_win,
                                   xcb_window_t           dst_win,
                                   xcb_input_fp1616_t     src_x,
                                   xcb_input_fp1616_t     src_y,
                                   uint16_t               src_width,
                                   uint16_t               src_height,
                                   xcb_input_fp1616_t     dst_x,
                                   xcb_input_fp1616_t     dst_y,
                                   xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_WARP_POINTER,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_warp_pointer_request_t xcb_out;

    xcb_out.src_win = src_win;
    xcb_out.dst_win = dst_win;
    xcb_out.src_x = src_x;
    xcb_out.src_y = src_y;
    xcb_out.src_width = src_width;
    xcb_out.src_height = src_height;
    xcb_out.dst_x = dst_x;
    xcb_out.dst_y = dst_y;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_warp_pointer (xcb_connection_t      *c,
                           xcb_window_t           src_win,
                           xcb_window_t           dst_win,
                           xcb_input_fp1616_t     src_x,
                           xcb_input_fp1616_t     src_y,
                           uint16_t               src_width,
                           uint16_t               src_height,
                           xcb_input_fp1616_t     dst_x,
                           xcb_input_fp1616_t     dst_y,
                           xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_WARP_POINTER,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_warp_pointer_request_t xcb_out;

    xcb_out.src_win = src_win;
    xcb_out.dst_win = dst_win;
    xcb_out.src_x = src_x;
    xcb_out.src_y = src_y;
    xcb_out.src_width = src_width;
    xcb_out.src_height = src_height;
    xcb_out.dst_x = dst_x;
    xcb_out.dst_y = dst_y;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_change_cursor_checked (xcb_connection_t      *c,
                                    xcb_window_t           window,
                                    xcb_cursor_t           cursor,
                                    xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_CURSOR,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_cursor_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.cursor = cursor;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_change_cursor (xcb_connection_t      *c,
                            xcb_window_t           window,
                            xcb_cursor_t           cursor,
                            xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_CURSOR,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_cursor_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.cursor = cursor;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_add_master_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_add_master_t *_aux = (xcb_input_add_master_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_add_master_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* name */
    xcb_block_len += _aux->name_len * sizeof(char);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    xcb_align_to = 4;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

char *
xcb_input_add_master_name (const xcb_input_add_master_t *R)
{
    return (char *) (R + 1);
}

int
xcb_input_add_master_name_length (const xcb_input_add_master_t *R)
{
    return R->name_len;
}

xcb_generic_iterator_t
xcb_input_add_master_name_end (const xcb_input_add_master_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((char *) (R + 1)) + (R->name_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_add_master_next (xcb_input_add_master_iterator_t *i)
{
    xcb_input_add_master_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_add_master_t *)(((char *)R) + xcb_input_add_master_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_add_master_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_add_master_end (xcb_input_add_master_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_add_master_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

void
xcb_input_remove_master_next (xcb_input_remove_master_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_remove_master_t);
}

xcb_generic_iterator_t
xcb_input_remove_master_end (xcb_input_remove_master_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_attach_slave_next (xcb_input_attach_slave_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_attach_slave_t);
}

xcb_generic_iterator_t
xcb_input_attach_slave_end (xcb_input_attach_slave_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_detach_slave_next (xcb_input_detach_slave_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_detach_slave_t);
}

xcb_generic_iterator_t
xcb_input_detach_slave_end (xcb_input_detach_slave_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

char *
xcb_input_hierarchy_change_data_add_master_name (const xcb_input_hierarchy_change_data_t *S)
{
    return S->add_master.name;
}

int
xcb_input_hierarchy_change_data_add_master_name_length (const xcb_input_hierarchy_change_t *R,
                                                        const xcb_input_hierarchy_change_data_t *S)
{
    return S->add_master.name_len;
}

xcb_generic_iterator_t
xcb_input_hierarchy_change_data_add_master_name_end (const xcb_input_hierarchy_change_t *R,
                                                     const xcb_input_hierarchy_change_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->add_master.name + S->add_master.name_len;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_hierarchy_change_data_serialize (void                                    **_buffer,
                                           uint16_t                                  type,
                                           const xcb_input_hierarchy_change_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[16];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ADD_MASTER) {
        /* xcb_input_hierarchy_change_data_t.add_master.name_len */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->add_master.name_len;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_hierarchy_change_data_t.add_master.send_core */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->add_master.send_core;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_hierarchy_change_data_t.add_master.enable */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->add_master.enable;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* name */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->add_master.name;
        xcb_block_len += _aux->add_master.name_len * sizeof(char);
        xcb_parts[xcb_parts_idx].iov_len = _aux->add_master.name_len * sizeof(char);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(char);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_REMOVE_MASTER) {
        /* xcb_input_hierarchy_change_data_t.remove_master.deviceid */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.deviceid;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.return_mode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.return_mode;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &xcb_pad;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.return_pointer */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.return_pointer;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.return_keyboard */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->remove_master.return_keyboard;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
    }
    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ATTACH_SLAVE) {
        /* xcb_input_hierarchy_change_data_t.attach_slave.deviceid */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->attach_slave.deviceid;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.attach_slave.master */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->attach_slave.master;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
    }
    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_DETACH_SLAVE) {
        /* xcb_input_hierarchy_change_data_t.detach_slave.deviceid */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->detach_slave.deviceid;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_device_id_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.detach_slave.pad2 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_hierarchy_change_data_unpack (const void                         *_buffer,
                                        uint16_t                            type,
                                        xcb_input_hierarchy_change_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ADD_MASTER) {
        /* xcb_input_hierarchy_change_data_t.add_master.name_len */
        _aux->add_master.name_len = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_hierarchy_change_data_t.add_master.send_core */
        _aux->add_master.send_core = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_hierarchy_change_data_t.add_master.enable */
        _aux->add_master.enable = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* name */
        _aux->add_master.name = (char *)xcb_tmp;
        xcb_block_len += _aux->add_master.name_len * sizeof(char);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(char);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_REMOVE_MASTER) {
        /* xcb_input_hierarchy_change_data_t.remove_master.deviceid */
        _aux->remove_master.deviceid = *(xcb_input_device_id_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_tmp += sizeof(xcb_input_device_id_t);
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.return_mode */
        _aux->remove_master.return_mode = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.pad1 */
        _aux->remove_master.pad1 = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.return_pointer */
        _aux->remove_master.return_pointer = *(xcb_input_device_id_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_tmp += sizeof(xcb_input_device_id_t);
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.remove_master.return_keyboard */
        _aux->remove_master.return_keyboard = *(xcb_input_device_id_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_tmp += sizeof(xcb_input_device_id_t);
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
    }
    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_ATTACH_SLAVE) {
        /* xcb_input_hierarchy_change_data_t.attach_slave.deviceid */
        _aux->attach_slave.deviceid = *(xcb_input_device_id_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_tmp += sizeof(xcb_input_device_id_t);
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.attach_slave.master */
        _aux->attach_slave.master = *(xcb_input_device_id_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_tmp += sizeof(xcb_input_device_id_t);
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
    }
    if(type == XCB_INPUT_HIERARCHY_CHANGE_TYPE_DETACH_SLAVE) {
        /* xcb_input_hierarchy_change_data_t.detach_slave.deviceid */
        _aux->detach_slave.deviceid = *(xcb_input_device_id_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_device_id_t);
        xcb_tmp += sizeof(xcb_input_device_id_t);
        xcb_align_to = ALIGNOF(xcb_input_device_id_t);
        /* xcb_input_hierarchy_change_data_t.detach_slave.pad2 */
        _aux->detach_slave.pad2[0] = *(uint8_t *)xcb_tmp;
        _aux->detach_slave.pad2[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_hierarchy_change_data_sizeof (const void  *_buffer,
                                        uint16_t     type)
{
    xcb_input_hierarchy_change_data_t _aux;
    return xcb_input_hierarchy_change_data_unpack(_buffer, type, &_aux);
}

int
xcb_input_hierarchy_change_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_hierarchy_change_t *_aux = (xcb_input_hierarchy_change_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_hierarchy_change_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_hierarchy_change_data_sizeof(xcb_tmp, _aux->type);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_hierarchy_change_data (const xcb_input_hierarchy_change_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_hierarchy_change_next (xcb_input_hierarchy_change_iterator_t *i)
{
    xcb_input_hierarchy_change_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_hierarchy_change_t *)(((char *)R) + xcb_input_hierarchy_change_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_hierarchy_change_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_hierarchy_change_end (xcb_input_hierarchy_change_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_hierarchy_change_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_xi_change_hierarchy_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_change_hierarchy_request_t *_aux = (xcb_input_xi_change_hierarchy_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_xi_change_hierarchy_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* changes */
    for(i=0; i<_aux->num_changes; i++) {
        xcb_tmp_len = xcb_input_hierarchy_change_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_hierarchy_change_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_xi_change_hierarchy_checked (xcb_connection_t                   *c,
                                       uint8_t                             num_changes,
                                       const xcb_input_hierarchy_change_t *changes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_HIERARCHY,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_hierarchy_request_t xcb_out;
    unsigned int xcb_tmp_len;
    char *xcb_tmp;
    unsigned int i;

    xcb_out.num_changes = num_changes;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_hierarchy_change_t changes */
    xcb_parts[4].iov_base = (char *) changes;
    xcb_parts[4].iov_len = 0;
    xcb_tmp = (char *)changes;
    for(i=0; i<num_changes; i++) {
        xcb_tmp_len = xcb_input_hierarchy_change_sizeof(xcb_tmp);
        xcb_parts[4].iov_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_change_hierarchy (xcb_connection_t                   *c,
                               uint8_t                             num_changes,
                               const xcb_input_hierarchy_change_t *changes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_HIERARCHY,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_hierarchy_request_t xcb_out;
    unsigned int xcb_tmp_len;
    char *xcb_tmp;
    unsigned int i;

    xcb_out.num_changes = num_changes;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_hierarchy_change_t changes */
    xcb_parts[4].iov_base = (char *) changes;
    xcb_parts[4].iov_len = 0;
    xcb_tmp = (char *)changes;
    for(i=0; i<num_changes; i++) {
        xcb_tmp_len = xcb_input_hierarchy_change_sizeof(xcb_tmp);
        xcb_parts[4].iov_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_xi_change_hierarchy_changes_length (const xcb_input_xi_change_hierarchy_request_t *R)
{
    return R->num_changes;
}

xcb_input_hierarchy_change_iterator_t
xcb_input_xi_change_hierarchy_changes_iterator (const xcb_input_xi_change_hierarchy_request_t *R)
{
    xcb_input_hierarchy_change_iterator_t i;
    i.data = (xcb_input_hierarchy_change_t *) (R + 1);
    i.rem = R->num_changes;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_void_cookie_t
xcb_input_xi_set_client_pointer_checked (xcb_connection_t      *c,
                                         xcb_window_t           window,
                                         xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_SET_CLIENT_POINTER,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_set_client_pointer_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_set_client_pointer (xcb_connection_t      *c,
                                 xcb_window_t           window,
                                 xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_SET_CLIENT_POINTER,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_set_client_pointer_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_client_pointer_cookie_t
xcb_input_xi_get_client_pointer (xcb_connection_t *c,
                                 xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_CLIENT_POINTER,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_client_pointer_cookie_t xcb_ret;
    xcb_input_xi_get_client_pointer_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_client_pointer_cookie_t
xcb_input_xi_get_client_pointer_unchecked (xcb_connection_t *c,
                                           xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_CLIENT_POINTER,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_client_pointer_cookie_t xcb_ret;
    xcb_input_xi_get_client_pointer_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_client_pointer_reply_t *
xcb_input_xi_get_client_pointer_reply (xcb_connection_t                          *c,
                                       xcb_input_xi_get_client_pointer_cookie_t   cookie  /**< */,
                                       xcb_generic_error_t                      **e)
{
    return (xcb_input_xi_get_client_pointer_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_event_mask_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_event_mask_t *_aux = (xcb_input_event_mask_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_event_mask_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* mask */
    xcb_block_len += _aux->mask_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_event_mask_mask (const xcb_input_event_mask_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_event_mask_mask_length (const xcb_input_event_mask_t *R)
{
    return R->mask_len;
}

xcb_generic_iterator_t
xcb_input_event_mask_mask_end (const xcb_input_event_mask_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->mask_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_event_mask_next (xcb_input_event_mask_iterator_t *i)
{
    xcb_input_event_mask_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_event_mask_t *)(((char *)R) + xcb_input_event_mask_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_event_mask_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_event_mask_end (xcb_input_event_mask_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_event_mask_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_xi_select_events_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_select_events_request_t *_aux = (xcb_input_xi_select_events_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_xi_select_events_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* masks */
    for(i=0; i<_aux->num_mask; i++) {
        xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_event_mask_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_xi_select_events_checked (xcb_connection_t             *c,
                                    xcb_window_t                  window,
                                    uint16_t                      num_mask,
                                    const xcb_input_event_mask_t *masks)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_SELECT_EVENTS,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_select_events_request_t xcb_out;
    unsigned int xcb_tmp_len;
    char *xcb_tmp;
    unsigned int i;

    xcb_out.window = window;
    xcb_out.num_mask = num_mask;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_mask_t masks */
    xcb_parts[4].iov_base = (char *) masks;
    xcb_parts[4].iov_len = 0;
    xcb_tmp = (char *)masks;
    for(i=0; i<num_mask; i++) {
        xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
        xcb_parts[4].iov_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_select_events (xcb_connection_t             *c,
                            xcb_window_t                  window,
                            uint16_t                      num_mask,
                            const xcb_input_event_mask_t *masks)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_SELECT_EVENTS,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_select_events_request_t xcb_out;
    unsigned int xcb_tmp_len;
    char *xcb_tmp;
    unsigned int i;

    xcb_out.window = window;
    xcb_out.num_mask = num_mask;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_mask_t masks */
    xcb_parts[4].iov_base = (char *) masks;
    xcb_parts[4].iov_len = 0;
    xcb_tmp = (char *)masks;
    for(i=0; i<num_mask; i++) {
        xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
        xcb_parts[4].iov_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_xi_select_events_masks_length (const xcb_input_xi_select_events_request_t *R)
{
    return R->num_mask;
}

xcb_input_event_mask_iterator_t
xcb_input_xi_select_events_masks_iterator (const xcb_input_xi_select_events_request_t *R)
{
    xcb_input_event_mask_iterator_t i;
    i.data = (xcb_input_event_mask_t *) (R + 1);
    i.rem = R->num_mask;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_xi_query_version_cookie_t
xcb_input_xi_query_version (xcb_connection_t *c,
                            uint16_t          major_version,
                            uint16_t          minor_version)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_QUERY_VERSION,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_query_version_cookie_t xcb_ret;
    xcb_input_xi_query_version_request_t xcb_out;

    xcb_out.major_version = major_version;
    xcb_out.minor_version = minor_version;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_query_version_cookie_t
xcb_input_xi_query_version_unchecked (xcb_connection_t *c,
                                      uint16_t          major_version,
                                      uint16_t          minor_version)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_QUERY_VERSION,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_query_version_cookie_t xcb_ret;
    xcb_input_xi_query_version_request_t xcb_out;

    xcb_out.major_version = major_version;
    xcb_out.minor_version = minor_version;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_query_version_reply_t *
xcb_input_xi_query_version_reply (xcb_connection_t                     *c,
                                  xcb_input_xi_query_version_cookie_t   cookie  /**< */,
                                  xcb_generic_error_t                 **e)
{
    return (xcb_input_xi_query_version_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_button_class_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_button_class_t *_aux = (xcb_input_button_class_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_button_class_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* state */
    xcb_block_len += ((_aux->num_buttons + 31) / 32) * sizeof(xcb_atom_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* labels */
    xcb_block_len += _aux->num_buttons * sizeof(xcb_atom_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_atom_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_button_class_state (const xcb_input_button_class_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_button_class_state_length (const xcb_input_button_class_t *R)
{
    return ((R->num_buttons + 31) / 32);
}

xcb_generic_iterator_t
xcb_input_button_class_state_end (const xcb_input_button_class_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (((R->num_buttons + 31) / 32));
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_atom_t *
xcb_input_button_class_labels (const xcb_input_button_class_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_button_class_state_end(R);
    return (xcb_atom_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_atom_t, prev.index) + 0);
}

int
xcb_input_button_class_labels_length (const xcb_input_button_class_t *R)
{
    return R->num_buttons;
}

xcb_generic_iterator_t
xcb_input_button_class_labels_end (const xcb_input_button_class_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_button_class_state_end(R);
    i.data = ((xcb_atom_t *) ((char*) prev.data + XCB_TYPE_PAD(xcb_atom_t, prev.index))) + (R->num_buttons);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_button_class_next (xcb_input_button_class_iterator_t *i)
{
    xcb_input_button_class_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_button_class_t *)(((char *)R) + xcb_input_button_class_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_button_class_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_button_class_end (xcb_input_button_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_button_class_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_key_class_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_key_class_t *_aux = (xcb_input_key_class_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_key_class_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* keys */
    xcb_block_len += _aux->num_keys * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_key_class_keys (const xcb_input_key_class_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_key_class_keys_length (const xcb_input_key_class_t *R)
{
    return R->num_keys;
}

xcb_generic_iterator_t
xcb_input_key_class_keys_end (const xcb_input_key_class_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->num_keys);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_key_class_next (xcb_input_key_class_iterator_t *i)
{
    xcb_input_key_class_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_key_class_t *)(((char *)R) + xcb_input_key_class_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_key_class_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_key_class_end (xcb_input_key_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_key_class_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

void
xcb_input_scroll_class_next (xcb_input_scroll_class_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_scroll_class_t);
}

xcb_generic_iterator_t
xcb_input_scroll_class_end (xcb_input_scroll_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_touch_class_next (xcb_input_touch_class_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_touch_class_t);
}

xcb_generic_iterator_t
xcb_input_touch_class_end (xcb_input_touch_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

void
xcb_input_valuator_class_next (xcb_input_valuator_class_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_valuator_class_t);
}

xcb_generic_iterator_t
xcb_input_valuator_class_end (xcb_input_valuator_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

uint32_t *
xcb_input_device_class_data_key_keys (const xcb_input_device_class_data_t *S)
{
    return S->key.keys;
}

int
xcb_input_device_class_data_key_keys_length (const xcb_input_device_class_t *R,
                                             const xcb_input_device_class_data_t *S)
{
    return S->key.num_keys;
}

xcb_generic_iterator_t
xcb_input_device_class_data_key_keys_end (const xcb_input_device_class_t *R,
                                          const xcb_input_device_class_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->key.keys + S->key.num_keys;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_device_class_data_button_state (const xcb_input_device_class_data_t *S)
{
    return S->button.state;
}

int
xcb_input_device_class_data_button_state_length (const xcb_input_device_class_t *R,
                                                 const xcb_input_device_class_data_t *S)
{
    return ((S->button.num_buttons + 31) / 32);
}

xcb_generic_iterator_t
xcb_input_device_class_data_button_state_end (const xcb_input_device_class_t *R,
                                              const xcb_input_device_class_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->button.state + ((S->button.num_buttons + 31) / 32);
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

xcb_atom_t *
xcb_input_device_class_data_button_labels (const xcb_input_device_class_data_t *S)
{
    return S->button.labels;
}

int
xcb_input_device_class_data_button_labels_length (const xcb_input_device_class_t *R,
                                                  const xcb_input_device_class_data_t *S)
{
    return S->button.num_buttons;
}

xcb_generic_iterator_t
xcb_input_device_class_data_button_labels_end (const xcb_input_device_class_t *R,
                                               const xcb_input_device_class_data_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->button.labels + S->button.num_buttons;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_device_class_data_serialize (void                                **_buffer,
                                       uint16_t                              type,
                                       const xcb_input_device_class_data_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 2;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[24];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_KEY) {
        /* xcb_input_device_class_data_t.key.num_keys */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->key.num_keys;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* keys */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->key.keys;
        xcb_block_len += _aux->key.num_keys * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->key.num_keys * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_BUTTON) {
        /* xcb_input_device_class_data_t.button.num_buttons */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->button.num_buttons;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* state */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->button.state;
        xcb_block_len += ((_aux->button.num_buttons + 31) / 32) * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = ((_aux->button.num_buttons + 31) / 32) * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* labels */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->button.labels;
        xcb_block_len += _aux->button.num_buttons * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = _aux->button.num_buttons * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_atom_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_VALUATOR) {
        /* xcb_input_device_class_data_t.valuator.number */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.number;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_device_class_data_t.valuator.label */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.label;
        xcb_block_len += sizeof(xcb_atom_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_atom_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_atom_t);
        /* xcb_input_device_class_data_t.valuator.min */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.min;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
        /* xcb_input_device_class_data_t.valuator.max */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.max;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
        /* xcb_input_device_class_data_t.valuator.value */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.value;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
        /* xcb_input_device_class_data_t.valuator.resolution */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.resolution;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_class_data_t.valuator.mode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->valuator.mode;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_class_data_t.valuator.pad0 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*3;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*3;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_SCROLL) {
        /* xcb_input_device_class_data_t.scroll.number */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.number;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_device_class_data_t.scroll.scroll_type */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.scroll_type;
        xcb_block_len += sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_device_class_data_t.scroll.pad1 */
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_block_len += sizeof(uint8_t)*2;
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t)*2;
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_class_data_t.scroll.flags */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.flags;
        xcb_block_len += sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_class_data_t.scroll.increment */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->scroll.increment;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(xcb_input_fp3232_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_TOUCH) {
        /* xcb_input_device_class_data_t.touch.mode */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->touch.mode;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_class_data_t.touch.num_touches */
        xcb_parts[xcb_parts_idx].iov_base = (char *) &_aux->touch.num_touches;
        xcb_block_len += sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_device_class_data_unpack (const void                     *_buffer,
                                    uint16_t                        type,
                                    xcb_input_device_class_data_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 2;


    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_KEY) {
        /* xcb_input_device_class_data_t.key.num_keys */
        _aux->key.num_keys = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* keys */
        _aux->key.keys = (uint32_t *)xcb_tmp;
        xcb_block_len += _aux->key.num_keys * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_BUTTON) {
        /* xcb_input_device_class_data_t.button.num_buttons */
        _aux->button.num_buttons = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* state */
        _aux->button.state = (uint32_t *)xcb_tmp;
        xcb_block_len += ((_aux->button.num_buttons + 31) / 32) * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* labels */
        _aux->button.labels = (xcb_atom_t *)xcb_tmp;
        xcb_block_len += _aux->button.num_buttons * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(xcb_atom_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_VALUATOR) {
        /* xcb_input_device_class_data_t.valuator.number */
        _aux->valuator.number = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_device_class_data_t.valuator.label */
        _aux->valuator.label = *(xcb_atom_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_atom_t);
        xcb_tmp += sizeof(xcb_atom_t);
        xcb_align_to = ALIGNOF(xcb_atom_t);
        /* xcb_input_device_class_data_t.valuator.min */
        _aux->valuator.min = *(xcb_input_fp3232_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_tmp += sizeof(xcb_input_fp3232_t);
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
        /* xcb_input_device_class_data_t.valuator.max */
        _aux->valuator.max = *(xcb_input_fp3232_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_tmp += sizeof(xcb_input_fp3232_t);
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
        /* xcb_input_device_class_data_t.valuator.value */
        _aux->valuator.value = *(xcb_input_fp3232_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_tmp += sizeof(xcb_input_fp3232_t);
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
        /* xcb_input_device_class_data_t.valuator.resolution */
        _aux->valuator.resolution = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_class_data_t.valuator.mode */
        _aux->valuator.mode = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_class_data_t.valuator.pad0 */
        _aux->valuator.pad0[0] = *(uint8_t *)xcb_tmp;
        _aux->valuator.pad0[1] = *(uint8_t *)xcb_tmp;
        _aux->valuator.pad0[2] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 3;
        xcb_tmp += sizeof(uint8_t) * 3;
        xcb_align_to = ALIGNOF(uint8_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_SCROLL) {
        /* xcb_input_device_class_data_t.scroll.number */
        _aux->scroll.number = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_device_class_data_t.scroll.scroll_type */
        _aux->scroll.scroll_type = *(uint16_t *)xcb_tmp;
        xcb_block_len += sizeof(uint16_t);
        xcb_tmp += sizeof(uint16_t);
        xcb_align_to = ALIGNOF(uint16_t);
        /* xcb_input_device_class_data_t.scroll.pad1 */
        _aux->scroll.pad1[0] = *(uint8_t *)xcb_tmp;
        _aux->scroll.pad1[1] = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t) * 2;
        xcb_tmp += sizeof(uint8_t) * 2;
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_class_data_t.scroll.flags */
        _aux->scroll.flags = *(uint32_t *)xcb_tmp;
        xcb_block_len += sizeof(uint32_t);
        xcb_tmp += sizeof(uint32_t);
        xcb_align_to = ALIGNOF(uint32_t);
        /* xcb_input_device_class_data_t.scroll.increment */
        _aux->scroll.increment = *(xcb_input_fp3232_t *)xcb_tmp;
        xcb_block_len += sizeof(xcb_input_fp3232_t);
        xcb_tmp += sizeof(xcb_input_fp3232_t);
        xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    }
    if(type == XCB_INPUT_DEVICE_CLASS_TYPE_TOUCH) {
        /* xcb_input_device_class_data_t.touch.mode */
        _aux->touch.mode = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
        /* xcb_input_device_class_data_t.touch.num_touches */
        _aux->touch.num_touches = *(uint8_t *)xcb_tmp;
        xcb_block_len += sizeof(uint8_t);
        xcb_tmp += sizeof(uint8_t);
        xcb_align_to = ALIGNOF(uint8_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_device_class_data_sizeof (const void  *_buffer,
                                    uint16_t     type)
{
    xcb_input_device_class_data_t _aux;
    return xcb_input_device_class_data_unpack(_buffer, type, &_aux);
}

int
xcb_input_device_class_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_class_t *_aux = (xcb_input_device_class_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_device_class_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* data */
    xcb_block_len += xcb_input_device_class_data_sizeof(xcb_tmp, _aux->type);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

void *
xcb_input_device_class_data (const xcb_input_device_class_t *R)
{
    return (void *) (R + 1);
}

void
xcb_input_device_class_next (xcb_input_device_class_iterator_t *i)
{
    xcb_input_device_class_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_device_class_t *)(((char *)R) + xcb_input_device_class_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_device_class_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_device_class_end (xcb_input_device_class_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_device_class_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_xi_device_info_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_device_info_t *_aux = (xcb_input_xi_device_info_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_xi_device_info_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* name */
    xcb_block_len += _aux->name_len * sizeof(char);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    xcb_align_to = 4;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* classes */
    for(i=0; i<_aux->num_classes; i++) {
        xcb_tmp_len = xcb_input_device_class_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_device_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

char *
xcb_input_xi_device_info_name (const xcb_input_xi_device_info_t *R)
{
    return (char *) (R + 1);
}

int
xcb_input_xi_device_info_name_length (const xcb_input_xi_device_info_t *R)
{
    return R->name_len;
}

xcb_generic_iterator_t
xcb_input_xi_device_info_name_end (const xcb_input_xi_device_info_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((char *) (R + 1)) + (R->name_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_xi_device_info_classes_length (const xcb_input_xi_device_info_t *R)
{
    return R->num_classes;
}

xcb_input_device_class_iterator_t
xcb_input_xi_device_info_classes_iterator (const xcb_input_xi_device_info_t *R)
{
    xcb_input_device_class_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_xi_device_info_name_end(R);
    i.data = (xcb_input_device_class_t *) ((char *) prev.data + ((-prev.index) & (4 - 1)));
    i.rem = R->num_classes;
    i.index = (char *) i.data - (char *) R;
    return i;
}

void
xcb_input_xi_device_info_next (xcb_input_xi_device_info_iterator_t *i)
{
    xcb_input_xi_device_info_t *R = i->data;
    xcb_generic_iterator_t child;
    child.data = (xcb_input_xi_device_info_t *)(((char *)R) + xcb_input_xi_device_info_sizeof(R));
    i->index = (char *) child.data - (char *) i->data;
    --i->rem;
    i->data = (xcb_input_xi_device_info_t *) child.data;
}

xcb_generic_iterator_t
xcb_input_xi_device_info_end (xcb_input_xi_device_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    while(i.rem > 0)
        xcb_input_xi_device_info_next(&i);
    ret.data = i.data;
    ret.rem = i.rem;
    ret.index = i.index;
    return ret;
}

int
xcb_input_xi_query_device_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_query_device_reply_t *_aux = (xcb_input_xi_query_device_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_xi_query_device_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* infos */
    for(i=0; i<_aux->num_infos; i++) {
        xcb_tmp_len = xcb_input_xi_device_info_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_xi_device_info_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_query_device_cookie_t
xcb_input_xi_query_device (xcb_connection_t      *c,
                           xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_QUERY_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_query_device_cookie_t xcb_ret;
    xcb_input_xi_query_device_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_query_device_cookie_t
xcb_input_xi_query_device_unchecked (xcb_connection_t      *c,
                                     xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_QUERY_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_query_device_cookie_t xcb_ret;
    xcb_input_xi_query_device_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_xi_query_device_infos_length (const xcb_input_xi_query_device_reply_t *R)
{
    return R->num_infos;
}

xcb_input_xi_device_info_iterator_t
xcb_input_xi_query_device_infos_iterator (const xcb_input_xi_query_device_reply_t *R)
{
    xcb_input_xi_device_info_iterator_t i;
    i.data = (xcb_input_xi_device_info_t *) (R + 1);
    i.rem = R->num_infos;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_xi_query_device_reply_t *
xcb_input_xi_query_device_reply (xcb_connection_t                    *c,
                                 xcb_input_xi_query_device_cookie_t   cookie  /**< */,
                                 xcb_generic_error_t                **e)
{
    return (xcb_input_xi_query_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_xi_set_focus_checked (xcb_connection_t      *c,
                                xcb_window_t           window,
                                xcb_timestamp_t        time,
                                xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_SET_FOCUS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_set_focus_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.time = time;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_set_focus (xcb_connection_t      *c,
                        xcb_window_t           window,
                        xcb_timestamp_t        time,
                        xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_SET_FOCUS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_set_focus_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.time = time;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_focus_cookie_t
xcb_input_xi_get_focus (xcb_connection_t      *c,
                        xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_FOCUS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_focus_cookie_t xcb_ret;
    xcb_input_xi_get_focus_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_focus_cookie_t
xcb_input_xi_get_focus_unchecked (xcb_connection_t      *c,
                                  xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_FOCUS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_focus_cookie_t xcb_ret;
    xcb_input_xi_get_focus_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_focus_reply_t *
xcb_input_xi_get_focus_reply (xcb_connection_t                 *c,
                              xcb_input_xi_get_focus_cookie_t   cookie  /**< */,
                              xcb_generic_error_t             **e)
{
    return (xcb_input_xi_get_focus_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_xi_grab_device_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_grab_device_request_t *_aux = (xcb_input_xi_grab_device_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_grab_device_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* mask */
    xcb_block_len += _aux->mask_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_grab_device_cookie_t
xcb_input_xi_grab_device (xcb_connection_t      *c,
                          xcb_window_t           window,
                          xcb_timestamp_t        time,
                          xcb_cursor_t           cursor,
                          xcb_input_device_id_t  deviceid,
                          uint8_t                mode,
                          uint8_t                paired_device_mode,
                          uint8_t                owner_events,
                          uint16_t               mask_len,
                          const uint32_t        *mask)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GRAB_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_xi_grab_device_cookie_t xcb_ret;
    xcb_input_xi_grab_device_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.time = time;
    xcb_out.cursor = cursor;
    xcb_out.deviceid = deviceid;
    xcb_out.mode = mode;
    xcb_out.paired_device_mode = paired_device_mode;
    xcb_out.owner_events = owner_events;
    xcb_out.pad0 = 0;
    xcb_out.mask_len = mask_len;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint32_t mask */
    xcb_parts[4].iov_base = (char *) mask;
    xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_grab_device_cookie_t
xcb_input_xi_grab_device_unchecked (xcb_connection_t      *c,
                                    xcb_window_t           window,
                                    xcb_timestamp_t        time,
                                    xcb_cursor_t           cursor,
                                    xcb_input_device_id_t  deviceid,
                                    uint8_t                mode,
                                    uint8_t                paired_device_mode,
                                    uint8_t                owner_events,
                                    uint16_t               mask_len,
                                    const uint32_t        *mask)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GRAB_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[6];
    xcb_input_xi_grab_device_cookie_t xcb_ret;
    xcb_input_xi_grab_device_request_t xcb_out;

    xcb_out.window = window;
    xcb_out.time = time;
    xcb_out.cursor = cursor;
    xcb_out.deviceid = deviceid;
    xcb_out.mode = mode;
    xcb_out.paired_device_mode = paired_device_mode;
    xcb_out.owner_events = owner_events;
    xcb_out.pad0 = 0;
    xcb_out.mask_len = mask_len;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint32_t mask */
    xcb_parts[4].iov_base = (char *) mask;
    xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_grab_device_reply_t *
xcb_input_xi_grab_device_reply (xcb_connection_t                   *c,
                                xcb_input_xi_grab_device_cookie_t   cookie  /**< */,
                                xcb_generic_error_t               **e)
{
    return (xcb_input_xi_grab_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

xcb_void_cookie_t
xcb_input_xi_ungrab_device_checked (xcb_connection_t      *c,
                                    xcb_timestamp_t        time,
                                    xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_UNGRAB_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_ungrab_device_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_ungrab_device (xcb_connection_t      *c,
                            xcb_timestamp_t        time,
                            xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_UNGRAB_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_ungrab_device_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_allow_events_checked (xcb_connection_t      *c,
                                   xcb_timestamp_t        time,
                                   xcb_input_device_id_t  deviceid,
                                   uint8_t                event_mode,
                                   uint32_t               touchid,
                                   xcb_window_t           grab_window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_ALLOW_EVENTS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_allow_events_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.deviceid = deviceid;
    xcb_out.event_mode = event_mode;
    xcb_out.pad0 = 0;
    xcb_out.touchid = touchid;
    xcb_out.grab_window = grab_window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_allow_events (xcb_connection_t      *c,
                           xcb_timestamp_t        time,
                           xcb_input_device_id_t  deviceid,
                           uint8_t                event_mode,
                           uint32_t               touchid,
                           xcb_window_t           grab_window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_ALLOW_EVENTS,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_allow_events_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.deviceid = deviceid;
    xcb_out.event_mode = event_mode;
    xcb_out.pad0 = 0;
    xcb_out.touchid = touchid;
    xcb_out.grab_window = grab_window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

void
xcb_input_grab_modifier_info_next (xcb_input_grab_modifier_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_grab_modifier_info_t);
}

xcb_generic_iterator_t
xcb_input_grab_modifier_info_end (xcb_input_grab_modifier_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_xi_passive_grab_device_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_passive_grab_device_request_t *_aux = (xcb_input_xi_passive_grab_device_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_passive_grab_device_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* mask */
    xcb_block_len += _aux->mask_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* modifiers */
    xcb_block_len += _aux->num_modifiers * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_passive_grab_device_cookie_t
xcb_input_xi_passive_grab_device (xcb_connection_t      *c,
                                  xcb_timestamp_t        time,
                                  xcb_window_t           grab_window,
                                  xcb_cursor_t           cursor,
                                  uint32_t               detail,
                                  xcb_input_device_id_t  deviceid,
                                  uint16_t               num_modifiers,
                                  uint16_t               mask_len,
                                  uint8_t                grab_type,
                                  uint8_t                grab_mode,
                                  uint8_t                paired_device_mode,
                                  uint8_t                owner_events,
                                  const uint32_t        *mask,
                                  const uint32_t        *modifiers)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 6,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_PASSIVE_GRAB_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[8];
    xcb_input_xi_passive_grab_device_cookie_t xcb_ret;
    xcb_input_xi_passive_grab_device_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.grab_window = grab_window;
    xcb_out.cursor = cursor;
    xcb_out.detail = detail;
    xcb_out.deviceid = deviceid;
    xcb_out.num_modifiers = num_modifiers;
    xcb_out.mask_len = mask_len;
    xcb_out.grab_type = grab_type;
    xcb_out.grab_mode = grab_mode;
    xcb_out.paired_device_mode = paired_device_mode;
    xcb_out.owner_events = owner_events;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint32_t mask */
    xcb_parts[4].iov_base = (char *) mask;
    xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
    /* uint32_t modifiers */
    xcb_parts[6].iov_base = (char *) modifiers;
    xcb_parts[6].iov_len = num_modifiers * sizeof(uint32_t);
    xcb_parts[7].iov_base = 0;
    xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_passive_grab_device_cookie_t
xcb_input_xi_passive_grab_device_unchecked (xcb_connection_t      *c,
                                            xcb_timestamp_t        time,
                                            xcb_window_t           grab_window,
                                            xcb_cursor_t           cursor,
                                            uint32_t               detail,
                                            xcb_input_device_id_t  deviceid,
                                            uint16_t               num_modifiers,
                                            uint16_t               mask_len,
                                            uint8_t                grab_type,
                                            uint8_t                grab_mode,
                                            uint8_t                paired_device_mode,
                                            uint8_t                owner_events,
                                            const uint32_t        *mask,
                                            const uint32_t        *modifiers)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 6,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_PASSIVE_GRAB_DEVICE,
        .isvoid = 0
    };

    struct iovec xcb_parts[8];
    xcb_input_xi_passive_grab_device_cookie_t xcb_ret;
    xcb_input_xi_passive_grab_device_request_t xcb_out;

    xcb_out.time = time;
    xcb_out.grab_window = grab_window;
    xcb_out.cursor = cursor;
    xcb_out.detail = detail;
    xcb_out.deviceid = deviceid;
    xcb_out.num_modifiers = num_modifiers;
    xcb_out.mask_len = mask_len;
    xcb_out.grab_type = grab_type;
    xcb_out.grab_mode = grab_mode;
    xcb_out.paired_device_mode = paired_device_mode;
    xcb_out.owner_events = owner_events;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint32_t mask */
    xcb_parts[4].iov_base = (char *) mask;
    xcb_parts[4].iov_len = mask_len * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
    /* uint32_t modifiers */
    xcb_parts[6].iov_base = (char *) modifiers;
    xcb_parts[6].iov_len = num_modifiers * sizeof(uint32_t);
    xcb_parts[7].iov_base = 0;
    xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_grab_modifier_info_t *
xcb_input_xi_passive_grab_device_modifiers (const xcb_input_xi_passive_grab_device_reply_t *R)
{
    return (xcb_input_grab_modifier_info_t *) (R + 1);
}

int
xcb_input_xi_passive_grab_device_modifiers_length (const xcb_input_xi_passive_grab_device_reply_t *R)
{
    return R->num_modifiers;
}

xcb_input_grab_modifier_info_iterator_t
xcb_input_xi_passive_grab_device_modifiers_iterator (const xcb_input_xi_passive_grab_device_reply_t *R)
{
    xcb_input_grab_modifier_info_iterator_t i;
    i.data = (xcb_input_grab_modifier_info_t *) (R + 1);
    i.rem = R->num_modifiers;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_xi_passive_grab_device_reply_t *
xcb_input_xi_passive_grab_device_reply (xcb_connection_t                           *c,
                                        xcb_input_xi_passive_grab_device_cookie_t   cookie  /**< */,
                                        xcb_generic_error_t                       **e)
{
    return (xcb_input_xi_passive_grab_device_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_xi_passive_ungrab_device_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_passive_ungrab_device_request_t *_aux = (xcb_input_xi_passive_ungrab_device_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_passive_ungrab_device_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* modifiers */
    xcb_block_len += _aux->num_modifiers * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_xi_passive_ungrab_device_checked (xcb_connection_t      *c,
                                            xcb_window_t           grab_window,
                                            uint32_t               detail,
                                            xcb_input_device_id_t  deviceid,
                                            uint16_t               num_modifiers,
                                            uint8_t                grab_type,
                                            const uint32_t        *modifiers)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_PASSIVE_UNGRAB_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_passive_ungrab_device_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.detail = detail;
    xcb_out.deviceid = deviceid;
    xcb_out.num_modifiers = num_modifiers;
    xcb_out.grab_type = grab_type;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint32_t modifiers */
    xcb_parts[4].iov_base = (char *) modifiers;
    xcb_parts[4].iov_len = num_modifiers * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_passive_ungrab_device (xcb_connection_t      *c,
                                    xcb_window_t           grab_window,
                                    uint32_t               detail,
                                    xcb_input_device_id_t  deviceid,
                                    uint16_t               num_modifiers,
                                    uint8_t                grab_type,
                                    const uint32_t        *modifiers)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_PASSIVE_UNGRAB_DEVICE,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_passive_ungrab_device_request_t xcb_out;

    xcb_out.grab_window = grab_window;
    xcb_out.detail = detail;
    xcb_out.deviceid = deviceid;
    xcb_out.num_modifiers = num_modifiers;
    xcb_out.grab_type = grab_type;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* uint32_t modifiers */
    xcb_parts[4].iov_base = (char *) modifiers;
    xcb_parts[4].iov_len = num_modifiers * sizeof(uint32_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

uint32_t *
xcb_input_xi_passive_ungrab_device_modifiers (const xcb_input_xi_passive_ungrab_device_request_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_xi_passive_ungrab_device_modifiers_length (const xcb_input_xi_passive_ungrab_device_request_t *R)
{
    return R->num_modifiers;
}

xcb_generic_iterator_t
xcb_input_xi_passive_ungrab_device_modifiers_end (const xcb_input_xi_passive_ungrab_device_request_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->num_modifiers);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_xi_list_properties_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_list_properties_reply_t *_aux = (xcb_input_xi_list_properties_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_list_properties_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* properties */
    xcb_block_len += _aux->num_properties * sizeof(xcb_atom_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_atom_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_list_properties_cookie_t
xcb_input_xi_list_properties (xcb_connection_t      *c,
                              xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_LIST_PROPERTIES,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_list_properties_cookie_t xcb_ret;
    xcb_input_xi_list_properties_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_list_properties_cookie_t
xcb_input_xi_list_properties_unchecked (xcb_connection_t      *c,
                                        xcb_input_device_id_t  deviceid)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_LIST_PROPERTIES,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_list_properties_cookie_t xcb_ret;
    xcb_input_xi_list_properties_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_atom_t *
xcb_input_xi_list_properties_properties (const xcb_input_xi_list_properties_reply_t *R)
{
    return (xcb_atom_t *) (R + 1);
}

int
xcb_input_xi_list_properties_properties_length (const xcb_input_xi_list_properties_reply_t *R)
{
    return R->num_properties;
}

xcb_generic_iterator_t
xcb_input_xi_list_properties_properties_end (const xcb_input_xi_list_properties_reply_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((xcb_atom_t *) (R + 1)) + (R->num_properties);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_xi_list_properties_reply_t *
xcb_input_xi_list_properties_reply (xcb_connection_t                       *c,
                                    xcb_input_xi_list_properties_cookie_t   cookie  /**< */,
                                    xcb_generic_error_t                   **e)
{
    return (xcb_input_xi_list_properties_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

uint8_t *
xcb_input_xi_change_property_items_data_8 (const xcb_input_xi_change_property_items_t *S)
{
    return S->data8;
}

int
xcb_input_xi_change_property_items_data_8_length (const xcb_input_xi_change_property_request_t *R,
                                                  const xcb_input_xi_change_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_xi_change_property_items_data_8_end (const xcb_input_xi_change_property_request_t *R,
                                               const xcb_input_xi_change_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data8 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint16_t *
xcb_input_xi_change_property_items_data_16 (const xcb_input_xi_change_property_items_t *S)
{
    return S->data16;
}

int
xcb_input_xi_change_property_items_data_16_length (const xcb_input_xi_change_property_request_t *R,
                                                   const xcb_input_xi_change_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_xi_change_property_items_data_16_end (const xcb_input_xi_change_property_request_t *R,
                                                const xcb_input_xi_change_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data16 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_xi_change_property_items_data_32 (const xcb_input_xi_change_property_items_t *S)
{
    return S->data32;
}

int
xcb_input_xi_change_property_items_data_32_length (const xcb_input_xi_change_property_request_t *R,
                                                   const xcb_input_xi_change_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_xi_change_property_items_data_32_end (const xcb_input_xi_change_property_request_t *R,
                                                const xcb_input_xi_change_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data32 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_xi_change_property_items_serialize (void                                       **_buffer,
                                              uint32_t                                     num_items,
                                              uint8_t                                      format,
                                              const xcb_input_xi_change_property_items_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[9];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_xi_change_property_items_unpack (const void                            *_buffer,
                                           uint32_t                               num_items,
                                           uint8_t                                format,
                                           xcb_input_xi_change_property_items_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        _aux->data8 = (uint8_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        _aux->data16 = (uint16_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        _aux->data32 = (uint32_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_xi_change_property_items_sizeof (const void  *_buffer,
                                           uint32_t     num_items,
                                           uint8_t      format)
{
    xcb_input_xi_change_property_items_t _aux;
    return xcb_input_xi_change_property_items_unpack(_buffer, num_items, format, &_aux);
}

int
xcb_input_xi_change_property_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_change_property_request_t *_aux = (xcb_input_xi_change_property_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_change_property_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* items */
    xcb_block_len += xcb_input_xi_change_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_xi_change_property_checked (xcb_connection_t      *c,
                                      xcb_input_device_id_t  deviceid,
                                      uint8_t                mode,
                                      uint8_t                format,
                                      xcb_atom_t             property,
                                      xcb_atom_t             type,
                                      uint32_t               num_items,
                                      const void            *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_property_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    xcb_out.mode = mode;
    xcb_out.format = format;
    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_xi_change_property_items_t items */
    xcb_parts[4].iov_base = (char *) items;
    xcb_parts[4].iov_len =
      xcb_input_xi_change_property_items_sizeof (items, num_items, format);

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_change_property (xcb_connection_t      *c,
                              xcb_input_device_id_t  deviceid,
                              uint8_t                mode,
                              uint8_t                format,
                              xcb_atom_t             property,
                              xcb_atom_t             type,
                              uint32_t               num_items,
                              const void            *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_property_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    xcb_out.mode = mode;
    xcb_out.format = format;
    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_xi_change_property_items_t items */
    xcb_parts[4].iov_base = (char *) items;
    xcb_parts[4].iov_len =
      xcb_input_xi_change_property_items_sizeof (items, num_items, format);

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_change_property_aux_checked (xcb_connection_t                           *c,
                                          xcb_input_device_id_t                       deviceid,
                                          uint8_t                                     mode,
                                          uint8_t                                     format,
                                          xcb_atom_t                                  property,
                                          xcb_atom_t                                  type,
                                          uint32_t                                    num_items,
                                          const xcb_input_xi_change_property_items_t *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_property_request_t xcb_out;
    void *xcb_aux0 = 0;

    xcb_out.deviceid = deviceid;
    xcb_out.mode = mode;
    xcb_out.format = format;
    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_xi_change_property_items_t items */
    xcb_parts[4].iov_len =
      xcb_input_xi_change_property_items_serialize (&xcb_aux0, num_items, format, items);
    xcb_parts[4].iov_base = xcb_aux0;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    free(xcb_aux0);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_change_property_aux (xcb_connection_t                           *c,
                                  xcb_input_device_id_t                       deviceid,
                                  uint8_t                                     mode,
                                  uint8_t                                     format,
                                  xcb_atom_t                                  property,
                                  xcb_atom_t                                  type,
                                  uint32_t                                    num_items,
                                  const xcb_input_xi_change_property_items_t *items)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 3,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_CHANGE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[5];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_change_property_request_t xcb_out;
    void *xcb_aux0 = 0;

    xcb_out.deviceid = deviceid;
    xcb_out.mode = mode;
    xcb_out.format = format;
    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.num_items = num_items;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_xi_change_property_items_t items */
    xcb_parts[4].iov_len =
      xcb_input_xi_change_property_items_serialize (&xcb_aux0, num_items, format, items);
    xcb_parts[4].iov_base = xcb_aux0;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    free(xcb_aux0);
    return xcb_ret;
}

void *
xcb_input_xi_change_property_items (const xcb_input_xi_change_property_request_t *R)
{
    return (void *) (R + 1);
}

xcb_void_cookie_t
xcb_input_xi_delete_property_checked (xcb_connection_t      *c,
                                      xcb_input_device_id_t  deviceid,
                                      xcb_atom_t             property)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_DELETE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_delete_property_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);
    xcb_out.property = property;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_delete_property (xcb_connection_t      *c,
                              xcb_input_device_id_t  deviceid,
                              xcb_atom_t             property)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_DELETE_PROPERTY,
        .isvoid = 1
    };

    struct iovec xcb_parts[4];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_delete_property_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    memset(xcb_out.pad0, 0, 2);
    xcb_out.property = property;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

uint8_t *
xcb_input_xi_get_property_items_data_8 (const xcb_input_xi_get_property_items_t *S)
{
    return S->data8;
}

int
xcb_input_xi_get_property_items_data_8_length (const xcb_input_xi_get_property_reply_t *R,
                                               const xcb_input_xi_get_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_xi_get_property_items_data_8_end (const xcb_input_xi_get_property_reply_t *R,
                                            const xcb_input_xi_get_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data8 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint16_t *
xcb_input_xi_get_property_items_data_16 (const xcb_input_xi_get_property_items_t *S)
{
    return S->data16;
}

int
xcb_input_xi_get_property_items_data_16_length (const xcb_input_xi_get_property_reply_t *R,
                                                const xcb_input_xi_get_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_xi_get_property_items_data_16_end (const xcb_input_xi_get_property_reply_t *R,
                                             const xcb_input_xi_get_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data16 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

uint32_t *
xcb_input_xi_get_property_items_data_32 (const xcb_input_xi_get_property_items_t *S)
{
    return S->data32;
}

int
xcb_input_xi_get_property_items_data_32_length (const xcb_input_xi_get_property_reply_t *R,
                                                const xcb_input_xi_get_property_items_t *S)
{
    return R->num_items;
}

xcb_generic_iterator_t
xcb_input_xi_get_property_items_data_32_end (const xcb_input_xi_get_property_reply_t *R,
                                             const xcb_input_xi_get_property_items_t *S)
{
    xcb_generic_iterator_t i;
    i.data = S->data32 + R->num_items;
    i.rem = 0;
    i.index = (char *) i.data - (char *) S;
    return i;
}

int
xcb_input_xi_get_property_items_serialize (void                                    **_buffer,
                                           uint32_t                                  num_items,
                                           uint8_t                                   format,
                                           const xcb_input_xi_get_property_items_t  *_aux)
{
    char *xcb_out = *_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;

    unsigned int xcb_pad = 0;
    char xcb_pad0[3] = {0, 0, 0};
    struct iovec xcb_parts[9];
    unsigned int xcb_parts_idx = 0;
    unsigned int xcb_block_len = 0;
    unsigned int i;
    char *xcb_tmp;

    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data8;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint8_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data16;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint16_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
            xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
            xcb_parts_idx++;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        xcb_parts[xcb_parts_idx].iov_base = (char *) _aux->data32;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_parts[xcb_parts_idx].iov_len = num_items * sizeof(uint32_t);
        xcb_parts_idx++;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_parts[xcb_parts_idx].iov_base = xcb_pad0;
        xcb_parts[xcb_parts_idx].iov_len = xcb_pad;
        xcb_parts_idx++;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    if (NULL == xcb_out) {
        /* allocate memory */
        xcb_out = malloc(xcb_buffer_len);
        *_buffer = xcb_out;
    }

    xcb_tmp = xcb_out;
    for(i=0; i<xcb_parts_idx; i++) {
        if (0 != xcb_parts[i].iov_base && 0 != xcb_parts[i].iov_len)
            memcpy(xcb_tmp, xcb_parts[i].iov_base, xcb_parts[i].iov_len);
        if (0 != xcb_parts[i].iov_len)
            xcb_tmp += xcb_parts[i].iov_len;
    }

    return xcb_buffer_len;
}

int
xcb_input_xi_get_property_items_unpack (const void                         *_buffer,
                                        uint32_t                            num_items,
                                        uint8_t                             format,
                                        xcb_input_xi_get_property_items_t  *_aux)
{
    char *xcb_tmp = (char *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;
    unsigned int xcb_padding_offset = 0;


    if(format == XCB_INPUT_PROPERTY_FORMAT_8_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data8 */
        _aux->data8 = (uint8_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint8_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint8_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_16_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data16 */
        _aux->data16 = (uint16_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint16_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint16_t);
        xcb_align_to = 4;
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
    }
    if(format == XCB_INPUT_PROPERTY_FORMAT_32_BITS) {
        /* insert padding */
        xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
        xcb_buffer_len += xcb_block_len + xcb_pad;
        if (0 != xcb_pad) {
            xcb_tmp += xcb_pad;
            xcb_pad = 0;
        }
        xcb_block_len = 0;
        xcb_padding_offset = 0;
        /* data32 */
        _aux->data32 = (uint32_t *)xcb_tmp;
        xcb_block_len += num_items * sizeof(uint32_t);
        xcb_tmp += xcb_block_len;
        xcb_align_to = ALIGNOF(uint32_t);
    }
    /* insert padding */
    xcb_pad = -(xcb_block_len + xcb_padding_offset) & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    xcb_padding_offset = 0;

    return xcb_buffer_len;
}

int
xcb_input_xi_get_property_items_sizeof (const void  *_buffer,
                                        uint32_t     num_items,
                                        uint8_t      format)
{
    xcb_input_xi_get_property_items_t _aux;
    return xcb_input_xi_get_property_items_unpack(_buffer, num_items, format, &_aux);
}

int
xcb_input_xi_get_property_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_get_property_reply_t *_aux = (xcb_input_xi_get_property_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_get_property_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* items */
    xcb_block_len += xcb_input_xi_get_property_items_sizeof(xcb_tmp, _aux->num_items, _aux->format);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(char);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_get_property_cookie_t
xcb_input_xi_get_property (xcb_connection_t      *c,
                           xcb_input_device_id_t  deviceid,
                           uint8_t                _delete,
                           xcb_atom_t             property,
                           xcb_atom_t             type,
                           uint32_t               offset,
                           uint32_t               len)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_PROPERTY,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_property_cookie_t xcb_ret;
    xcb_input_xi_get_property_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    xcb_out._delete = _delete;
    xcb_out.pad0 = 0;
    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.offset = offset;
    xcb_out.len = len;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_property_cookie_t
xcb_input_xi_get_property_unchecked (xcb_connection_t      *c,
                                     xcb_input_device_id_t  deviceid,
                                     uint8_t                _delete,
                                     xcb_atom_t             property,
                                     xcb_atom_t             type,
                                     uint32_t               offset,
                                     uint32_t               len)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_PROPERTY,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_property_cookie_t xcb_ret;
    xcb_input_xi_get_property_request_t xcb_out;

    xcb_out.deviceid = deviceid;
    xcb_out._delete = _delete;
    xcb_out.pad0 = 0;
    xcb_out.property = property;
    xcb_out.type = type;
    xcb_out.offset = offset;
    xcb_out.len = len;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

void *
xcb_input_xi_get_property_items (const xcb_input_xi_get_property_reply_t *R)
{
    return (void *) (R + 1);
}

xcb_input_xi_get_property_reply_t *
xcb_input_xi_get_property_reply (xcb_connection_t                    *c,
                                 xcb_input_xi_get_property_cookie_t   cookie  /**< */,
                                 xcb_generic_error_t                **e)
{
    return (xcb_input_xi_get_property_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

int
xcb_input_xi_get_selected_events_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_get_selected_events_reply_t *_aux = (xcb_input_xi_get_selected_events_reply_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_xi_get_selected_events_reply_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* masks */
    for(i=0; i<_aux->num_masks; i++) {
        xcb_tmp_len = xcb_input_event_mask_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_event_mask_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_xi_get_selected_events_cookie_t
xcb_input_xi_get_selected_events (xcb_connection_t *c,
                                  xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_SELECTED_EVENTS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_selected_events_cookie_t xcb_ret;
    xcb_input_xi_get_selected_events_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_xi_get_selected_events_cookie_t
xcb_input_xi_get_selected_events_unchecked (xcb_connection_t *c,
                                            xcb_window_t      window)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 2,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_GET_SELECTED_EVENTS,
        .isvoid = 0
    };

    struct iovec xcb_parts[4];
    xcb_input_xi_get_selected_events_cookie_t xcb_ret;
    xcb_input_xi_get_selected_events_request_t xcb_out;

    xcb_out.window = window;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

int
xcb_input_xi_get_selected_events_masks_length (const xcb_input_xi_get_selected_events_reply_t *R)
{
    return R->num_masks;
}

xcb_input_event_mask_iterator_t
xcb_input_xi_get_selected_events_masks_iterator (const xcb_input_xi_get_selected_events_reply_t *R)
{
    xcb_input_event_mask_iterator_t i;
    i.data = (xcb_input_event_mask_t *) (R + 1);
    i.rem = R->num_masks;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_xi_get_selected_events_reply_t *
xcb_input_xi_get_selected_events_reply (xcb_connection_t                           *c,
                                        xcb_input_xi_get_selected_events_cookie_t   cookie  /**< */,
                                        xcb_generic_error_t                       **e)
{
    return (xcb_input_xi_get_selected_events_reply_t *) xcb_wait_for_reply(c, cookie.sequence, e);
}

void
xcb_input_barrier_release_pointer_info_next (xcb_input_barrier_release_pointer_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_barrier_release_pointer_info_t);
}

xcb_generic_iterator_t
xcb_input_barrier_release_pointer_info_end (xcb_input_barrier_release_pointer_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_xi_barrier_release_pointer_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_xi_barrier_release_pointer_request_t *_aux = (xcb_input_xi_barrier_release_pointer_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_xi_barrier_release_pointer_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* barriers */
    xcb_block_len += _aux->num_barriers * sizeof(xcb_input_barrier_release_pointer_info_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_barrier_release_pointer_info_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_xi_barrier_release_pointer_checked (xcb_connection_t                               *c,
                                              uint32_t                                        num_barriers,
                                              const xcb_input_barrier_release_pointer_info_t *barriers)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_BARRIER_RELEASE_POINTER,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_barrier_release_pointer_request_t xcb_out;

    xcb_out.num_barriers = num_barriers;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_barrier_release_pointer_info_t barriers */
    xcb_parts[4].iov_base = (char *) barriers;
    xcb_parts[4].iov_len = num_barriers * sizeof(xcb_input_barrier_release_pointer_info_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_xi_barrier_release_pointer (xcb_connection_t                               *c,
                                      uint32_t                                        num_barriers,
                                      const xcb_input_barrier_release_pointer_info_t *barriers)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 4,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_XI_BARRIER_RELEASE_POINTER,
        .isvoid = 1
    };

    struct iovec xcb_parts[6];
    xcb_void_cookie_t xcb_ret;
    xcb_input_xi_barrier_release_pointer_request_t xcb_out;

    xcb_out.num_barriers = num_barriers;

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_barrier_release_pointer_info_t barriers */
    xcb_parts[4].iov_base = (char *) barriers;
    xcb_parts[4].iov_len = num_barriers * sizeof(xcb_input_barrier_release_pointer_info_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_barrier_release_pointer_info_t *
xcb_input_xi_barrier_release_pointer_barriers (const xcb_input_xi_barrier_release_pointer_request_t *R)
{
    return (xcb_input_barrier_release_pointer_info_t *) (R + 1);
}

int
xcb_input_xi_barrier_release_pointer_barriers_length (const xcb_input_xi_barrier_release_pointer_request_t *R)
{
    return R->num_barriers;
}

xcb_input_barrier_release_pointer_info_iterator_t
xcb_input_xi_barrier_release_pointer_barriers_iterator (const xcb_input_xi_barrier_release_pointer_request_t *R)
{
    xcb_input_barrier_release_pointer_info_iterator_t i;
    i.data = (xcb_input_barrier_release_pointer_info_t *) (R + 1);
    i.rem = R->num_barriers;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_device_changed_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_device_changed_event_t *_aux = (xcb_input_device_changed_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    unsigned int i;
    unsigned int xcb_tmp_len;

    xcb_block_len += sizeof(xcb_input_device_changed_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* classes */
    for(i=0; i<_aux->num_classes; i++) {
        xcb_tmp_len = xcb_input_device_class_sizeof(xcb_tmp);
        xcb_block_len += xcb_tmp_len;
        xcb_tmp += xcb_tmp_len;
    }
    xcb_align_to = ALIGNOF(xcb_input_device_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

int
xcb_input_device_changed_classes_length (const xcb_input_device_changed_event_t *R)
{
    return R->num_classes;
}

xcb_input_device_class_iterator_t
xcb_input_device_changed_classes_iterator (const xcb_input_device_changed_event_t *R)
{
    xcb_input_device_class_iterator_t i;
    i.data = (xcb_input_device_class_t *) (R + 1);
    i.rem = R->num_classes;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_key_press_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_key_press_event_t *_aux = (xcb_input_key_press_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */

    xcb_block_len += sizeof(xcb_input_key_press_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* button_mask */
    xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* valuator_mask */
    xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->valuators_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_key_press_valuator_mask(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_4;
        xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_key_press_button_mask (const xcb_input_key_press_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_key_press_button_mask_length (const xcb_input_key_press_event_t *R)
{
    return R->buttons_len;
}

xcb_generic_iterator_t
xcb_input_key_press_button_mask_end (const xcb_input_key_press_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

uint32_t *
xcb_input_key_press_valuator_mask (const xcb_input_key_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_key_press_button_mask_end(R);
    return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
}

int
xcb_input_key_press_valuator_mask_length (const xcb_input_key_press_event_t *R)
{
    return R->valuators_len;
}

xcb_generic_iterator_t
xcb_input_key_press_valuator_mask_end (const xcb_input_key_press_event_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_key_press_button_mask_end(R);
    i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->valuators_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_key_press_axisvalues (const xcb_input_key_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_key_press_valuator_mask_end(R);
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_key_press_axisvalues_length (const xcb_input_key_press_event_t *R)
{
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_5 = R->valuators_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_key_press_valuator_mask(R);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_8;
        xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    return xcb_pre_tmp_7;
}

xcb_input_fp3232_iterator_t
xcb_input_key_press_axisvalues_iterator (const xcb_input_key_press_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_key_press_valuator_mask_end(R);
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->valuators_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_key_press_valuator_mask(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_12;
        xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_11;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_key_release_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_key_press_sizeof(_buffer);
}

int
xcb_input_button_press_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_button_press_event_t *_aux = (xcb_input_button_press_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */

    xcb_block_len += sizeof(xcb_input_button_press_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* button_mask */
    xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* valuator_mask */
    xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->valuators_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_button_press_valuator_mask(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_4;
        xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_button_press_button_mask (const xcb_input_button_press_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_button_press_button_mask_length (const xcb_input_button_press_event_t *R)
{
    return R->buttons_len;
}

xcb_generic_iterator_t
xcb_input_button_press_button_mask_end (const xcb_input_button_press_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

uint32_t *
xcb_input_button_press_valuator_mask (const xcb_input_button_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_button_press_button_mask_end(R);
    return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
}

int
xcb_input_button_press_valuator_mask_length (const xcb_input_button_press_event_t *R)
{
    return R->valuators_len;
}

xcb_generic_iterator_t
xcb_input_button_press_valuator_mask_end (const xcb_input_button_press_event_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_button_press_button_mask_end(R);
    i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->valuators_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_button_press_axisvalues (const xcb_input_button_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_button_press_valuator_mask_end(R);
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_button_press_axisvalues_length (const xcb_input_button_press_event_t *R)
{
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_5 = R->valuators_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_button_press_valuator_mask(R);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_8;
        xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    return xcb_pre_tmp_7;
}

xcb_input_fp3232_iterator_t
xcb_input_button_press_axisvalues_iterator (const xcb_input_button_press_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_button_press_valuator_mask_end(R);
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->valuators_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_button_press_valuator_mask(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_12;
        xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_11;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_button_release_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_button_press_sizeof(_buffer);
}

int
xcb_input_motion_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_button_press_sizeof(_buffer);
}

int
xcb_input_enter_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_enter_event_t *_aux = (xcb_input_enter_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_enter_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* buttons */
    xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_enter_buttons (const xcb_input_enter_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_enter_buttons_length (const xcb_input_enter_event_t *R)
{
    return R->buttons_len;
}

xcb_generic_iterator_t
xcb_input_enter_buttons_end (const xcb_input_enter_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_leave_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_enter_sizeof(_buffer);
}

int
xcb_input_focus_in_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_enter_sizeof(_buffer);
}

int
xcb_input_focus_out_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_enter_sizeof(_buffer);
}

void
xcb_input_hierarchy_info_next (xcb_input_hierarchy_info_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_hierarchy_info_t);
}

xcb_generic_iterator_t
xcb_input_hierarchy_info_end (xcb_input_hierarchy_info_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_hierarchy_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_hierarchy_event_t *_aux = (xcb_input_hierarchy_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_hierarchy_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* infos */
    xcb_block_len += _aux->num_infos * sizeof(xcb_input_hierarchy_info_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_hierarchy_info_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_input_hierarchy_info_t *
xcb_input_hierarchy_infos (const xcb_input_hierarchy_event_t *R)
{
    return (xcb_input_hierarchy_info_t *) (R + 1);
}

int
xcb_input_hierarchy_infos_length (const xcb_input_hierarchy_event_t *R)
{
    return R->num_infos;
}

xcb_input_hierarchy_info_iterator_t
xcb_input_hierarchy_infos_iterator (const xcb_input_hierarchy_event_t *R)
{
    xcb_input_hierarchy_info_iterator_t i;
    i.data = (xcb_input_hierarchy_info_t *) (R + 1);
    i.rem = R->num_infos;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_raw_key_press_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_raw_key_press_event_t *_aux = (xcb_input_raw_key_press_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */

    xcb_block_len += sizeof(xcb_input_raw_key_press_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* valuator_mask */
    xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->valuators_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_raw_key_press_valuator_mask(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_4;
        xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues_raw */
    /* sumof start */
    xcb_pre_tmp_5 = _aux->valuators_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_raw_key_press_valuator_mask(_aux);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_8;
        xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    xcb_block_len += xcb_pre_tmp_7 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_raw_key_press_valuator_mask (const xcb_input_raw_key_press_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_raw_key_press_valuator_mask_length (const xcb_input_raw_key_press_event_t *R)
{
    return R->valuators_len;
}

xcb_generic_iterator_t
xcb_input_raw_key_press_valuator_mask_end (const xcb_input_raw_key_press_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->valuators_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_raw_key_press_axisvalues (const xcb_input_raw_key_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_raw_key_press_valuator_mask_end(R);
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_raw_key_press_axisvalues_length (const xcb_input_raw_key_press_event_t *R)
{
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->valuators_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_raw_key_press_valuator_mask(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_12;
        xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    return xcb_pre_tmp_11;
}

xcb_input_fp3232_iterator_t
xcb_input_raw_key_press_axisvalues_iterator (const xcb_input_raw_key_press_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_raw_key_press_valuator_mask_end(R);
    int xcb_pre_tmp_13; /* sumof length */
    int xcb_pre_tmp_14; /* sumof loop counter */
    int64_t xcb_pre_tmp_15; /* sumof sum */
    const uint32_t* xcb_pre_tmp_16; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_13 = R->valuators_len;
    xcb_pre_tmp_15 = 0;
    xcb_pre_tmp_16 = xcb_input_raw_key_press_valuator_mask(R);
    for (xcb_pre_tmp_14 = 0; xcb_pre_tmp_14 < xcb_pre_tmp_13; xcb_pre_tmp_14++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_16;
        xcb_pre_tmp_15 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_16++;
    }
    /* sumof end. Result is in xcb_pre_tmp_15 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_15;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_raw_key_press_axisvalues_raw (const xcb_input_raw_key_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_key_press_axisvalues_iterator(R));
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_raw_key_press_axisvalues_raw_length (const xcb_input_raw_key_press_event_t *R)
{
    int xcb_pre_tmp_17; /* sumof length */
    int xcb_pre_tmp_18; /* sumof loop counter */
    int64_t xcb_pre_tmp_19; /* sumof sum */
    const uint32_t* xcb_pre_tmp_20; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_17 = R->valuators_len;
    xcb_pre_tmp_19 = 0;
    xcb_pre_tmp_20 = xcb_input_raw_key_press_valuator_mask(R);
    for (xcb_pre_tmp_18 = 0; xcb_pre_tmp_18 < xcb_pre_tmp_17; xcb_pre_tmp_18++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_20;
        xcb_pre_tmp_19 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_20++;
    }
    /* sumof end. Result is in xcb_pre_tmp_19 */
    return xcb_pre_tmp_19;
}

xcb_input_fp3232_iterator_t
xcb_input_raw_key_press_axisvalues_raw_iterator (const xcb_input_raw_key_press_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_key_press_axisvalues_iterator(R));
    int xcb_pre_tmp_21; /* sumof length */
    int xcb_pre_tmp_22; /* sumof loop counter */
    int64_t xcb_pre_tmp_23; /* sumof sum */
    const uint32_t* xcb_pre_tmp_24; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_21 = R->valuators_len;
    xcb_pre_tmp_23 = 0;
    xcb_pre_tmp_24 = xcb_input_raw_key_press_valuator_mask(R);
    for (xcb_pre_tmp_22 = 0; xcb_pre_tmp_22 < xcb_pre_tmp_21; xcb_pre_tmp_22++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_24;
        xcb_pre_tmp_23 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_24++;
    }
    /* sumof end. Result is in xcb_pre_tmp_23 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_23;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_raw_key_release_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_raw_key_press_sizeof(_buffer);
}

int
xcb_input_raw_button_press_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_raw_button_press_event_t *_aux = (xcb_input_raw_button_press_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */

    xcb_block_len += sizeof(xcb_input_raw_button_press_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* valuator_mask */
    xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->valuators_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_raw_button_press_valuator_mask(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_4;
        xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues_raw */
    /* sumof start */
    xcb_pre_tmp_5 = _aux->valuators_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_raw_button_press_valuator_mask(_aux);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_8;
        xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    xcb_block_len += xcb_pre_tmp_7 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_raw_button_press_valuator_mask (const xcb_input_raw_button_press_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_raw_button_press_valuator_mask_length (const xcb_input_raw_button_press_event_t *R)
{
    return R->valuators_len;
}

xcb_generic_iterator_t
xcb_input_raw_button_press_valuator_mask_end (const xcb_input_raw_button_press_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->valuators_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_raw_button_press_axisvalues (const xcb_input_raw_button_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_raw_button_press_valuator_mask_end(R);
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_raw_button_press_axisvalues_length (const xcb_input_raw_button_press_event_t *R)
{
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->valuators_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_raw_button_press_valuator_mask(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_12;
        xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    return xcb_pre_tmp_11;
}

xcb_input_fp3232_iterator_t
xcb_input_raw_button_press_axisvalues_iterator (const xcb_input_raw_button_press_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_raw_button_press_valuator_mask_end(R);
    int xcb_pre_tmp_13; /* sumof length */
    int xcb_pre_tmp_14; /* sumof loop counter */
    int64_t xcb_pre_tmp_15; /* sumof sum */
    const uint32_t* xcb_pre_tmp_16; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_13 = R->valuators_len;
    xcb_pre_tmp_15 = 0;
    xcb_pre_tmp_16 = xcb_input_raw_button_press_valuator_mask(R);
    for (xcb_pre_tmp_14 = 0; xcb_pre_tmp_14 < xcb_pre_tmp_13; xcb_pre_tmp_14++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_16;
        xcb_pre_tmp_15 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_16++;
    }
    /* sumof end. Result is in xcb_pre_tmp_15 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_15;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_raw_button_press_axisvalues_raw (const xcb_input_raw_button_press_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_button_press_axisvalues_iterator(R));
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_raw_button_press_axisvalues_raw_length (const xcb_input_raw_button_press_event_t *R)
{
    int xcb_pre_tmp_17; /* sumof length */
    int xcb_pre_tmp_18; /* sumof loop counter */
    int64_t xcb_pre_tmp_19; /* sumof sum */
    const uint32_t* xcb_pre_tmp_20; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_17 = R->valuators_len;
    xcb_pre_tmp_19 = 0;
    xcb_pre_tmp_20 = xcb_input_raw_button_press_valuator_mask(R);
    for (xcb_pre_tmp_18 = 0; xcb_pre_tmp_18 < xcb_pre_tmp_17; xcb_pre_tmp_18++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_20;
        xcb_pre_tmp_19 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_20++;
    }
    /* sumof end. Result is in xcb_pre_tmp_19 */
    return xcb_pre_tmp_19;
}

xcb_input_fp3232_iterator_t
xcb_input_raw_button_press_axisvalues_raw_iterator (const xcb_input_raw_button_press_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_button_press_axisvalues_iterator(R));
    int xcb_pre_tmp_21; /* sumof length */
    int xcb_pre_tmp_22; /* sumof loop counter */
    int64_t xcb_pre_tmp_23; /* sumof sum */
    const uint32_t* xcb_pre_tmp_24; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_21 = R->valuators_len;
    xcb_pre_tmp_23 = 0;
    xcb_pre_tmp_24 = xcb_input_raw_button_press_valuator_mask(R);
    for (xcb_pre_tmp_22 = 0; xcb_pre_tmp_22 < xcb_pre_tmp_21; xcb_pre_tmp_22++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_24;
        xcb_pre_tmp_23 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_24++;
    }
    /* sumof end. Result is in xcb_pre_tmp_23 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_23;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_raw_button_release_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_raw_button_press_sizeof(_buffer);
}

int
xcb_input_raw_motion_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_raw_button_press_sizeof(_buffer);
}

int
xcb_input_touch_begin_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_touch_begin_event_t *_aux = (xcb_input_touch_begin_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */

    xcb_block_len += sizeof(xcb_input_touch_begin_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* button_mask */
    xcb_block_len += _aux->buttons_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* valuator_mask */
    xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->valuators_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_touch_begin_valuator_mask(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_4;
        xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_touch_begin_button_mask (const xcb_input_touch_begin_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_touch_begin_button_mask_length (const xcb_input_touch_begin_event_t *R)
{
    return R->buttons_len;
}

xcb_generic_iterator_t
xcb_input_touch_begin_button_mask_end (const xcb_input_touch_begin_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->buttons_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

uint32_t *
xcb_input_touch_begin_valuator_mask (const xcb_input_touch_begin_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_touch_begin_button_mask_end(R);
    return (uint32_t *) ((char *) prev.data + XCB_TYPE_PAD(uint32_t, prev.index) + 0);
}

int
xcb_input_touch_begin_valuator_mask_length (const xcb_input_touch_begin_event_t *R)
{
    return R->valuators_len;
}

xcb_generic_iterator_t
xcb_input_touch_begin_valuator_mask_end (const xcb_input_touch_begin_event_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_touch_begin_button_mask_end(R);
    i.data = ((uint32_t *) ((char*) prev.data + XCB_TYPE_PAD(uint32_t, prev.index))) + (R->valuators_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_touch_begin_axisvalues (const xcb_input_touch_begin_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_touch_begin_valuator_mask_end(R);
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_touch_begin_axisvalues_length (const xcb_input_touch_begin_event_t *R)
{
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_5 = R->valuators_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_touch_begin_valuator_mask(R);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_8;
        xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    return xcb_pre_tmp_7;
}

xcb_input_fp3232_iterator_t
xcb_input_touch_begin_axisvalues_iterator (const xcb_input_touch_begin_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_touch_begin_valuator_mask_end(R);
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->valuators_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_touch_begin_valuator_mask(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_12;
        xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_11;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_touch_update_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_touch_begin_sizeof(_buffer);
}

int
xcb_input_touch_end_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_touch_begin_sizeof(_buffer);
}

int
xcb_input_raw_touch_begin_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_raw_touch_begin_event_t *_aux = (xcb_input_raw_touch_begin_event_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;

    int xcb_pre_tmp_1; /* sumof length */
    int xcb_pre_tmp_2; /* sumof loop counter */
    int64_t xcb_pre_tmp_3; /* sumof sum */
    const uint32_t* xcb_pre_tmp_4; /* sumof list ptr */
    int xcb_pre_tmp_5; /* sumof length */
    int xcb_pre_tmp_6; /* sumof loop counter */
    int64_t xcb_pre_tmp_7; /* sumof sum */
    const uint32_t* xcb_pre_tmp_8; /* sumof list ptr */

    xcb_block_len += sizeof(xcb_input_raw_touch_begin_event_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* valuator_mask */
    xcb_block_len += _aux->valuators_len * sizeof(uint32_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(uint32_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues */
    /* sumof start */
    xcb_pre_tmp_1 = _aux->valuators_len;
    xcb_pre_tmp_3 = 0;
    xcb_pre_tmp_4 = xcb_input_raw_touch_begin_valuator_mask(_aux);
    for (xcb_pre_tmp_2 = 0; xcb_pre_tmp_2 < xcb_pre_tmp_1; xcb_pre_tmp_2++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_4;
        xcb_pre_tmp_3 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_4++;
    }
    /* sumof end. Result is in xcb_pre_tmp_3 */
    xcb_block_len += xcb_pre_tmp_3 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* axisvalues_raw */
    /* sumof start */
    xcb_pre_tmp_5 = _aux->valuators_len;
    xcb_pre_tmp_7 = 0;
    xcb_pre_tmp_8 = xcb_input_raw_touch_begin_valuator_mask(_aux);
    for (xcb_pre_tmp_6 = 0; xcb_pre_tmp_6 < xcb_pre_tmp_5; xcb_pre_tmp_6++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_8;
        xcb_pre_tmp_7 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_8++;
    }
    /* sumof end. Result is in xcb_pre_tmp_7 */
    xcb_block_len += xcb_pre_tmp_7 * sizeof(xcb_input_fp3232_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_fp3232_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

uint32_t *
xcb_input_raw_touch_begin_valuator_mask (const xcb_input_raw_touch_begin_event_t *R)
{
    return (uint32_t *) (R + 1);
}

int
xcb_input_raw_touch_begin_valuator_mask_length (const xcb_input_raw_touch_begin_event_t *R)
{
    return R->valuators_len;
}

xcb_generic_iterator_t
xcb_input_raw_touch_begin_valuator_mask_end (const xcb_input_raw_touch_begin_event_t *R)
{
    xcb_generic_iterator_t i;
    i.data = ((uint32_t *) (R + 1)) + (R->valuators_len);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_raw_touch_begin_axisvalues (const xcb_input_raw_touch_begin_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_raw_touch_begin_valuator_mask_end(R);
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_raw_touch_begin_axisvalues_length (const xcb_input_raw_touch_begin_event_t *R)
{
    int xcb_pre_tmp_9; /* sumof length */
    int xcb_pre_tmp_10; /* sumof loop counter */
    int64_t xcb_pre_tmp_11; /* sumof sum */
    const uint32_t* xcb_pre_tmp_12; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_9 = R->valuators_len;
    xcb_pre_tmp_11 = 0;
    xcb_pre_tmp_12 = xcb_input_raw_touch_begin_valuator_mask(R);
    for (xcb_pre_tmp_10 = 0; xcb_pre_tmp_10 < xcb_pre_tmp_9; xcb_pre_tmp_10++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_12;
        xcb_pre_tmp_11 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_12++;
    }
    /* sumof end. Result is in xcb_pre_tmp_11 */
    return xcb_pre_tmp_11;
}

xcb_input_fp3232_iterator_t
xcb_input_raw_touch_begin_axisvalues_iterator (const xcb_input_raw_touch_begin_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_raw_touch_begin_valuator_mask_end(R);
    int xcb_pre_tmp_13; /* sumof length */
    int xcb_pre_tmp_14; /* sumof loop counter */
    int64_t xcb_pre_tmp_15; /* sumof sum */
    const uint32_t* xcb_pre_tmp_16; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_13 = R->valuators_len;
    xcb_pre_tmp_15 = 0;
    xcb_pre_tmp_16 = xcb_input_raw_touch_begin_valuator_mask(R);
    for (xcb_pre_tmp_14 = 0; xcb_pre_tmp_14 < xcb_pre_tmp_13; xcb_pre_tmp_14++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_16;
        xcb_pre_tmp_15 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_16++;
    }
    /* sumof end. Result is in xcb_pre_tmp_15 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_15;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_fp3232_t *
xcb_input_raw_touch_begin_axisvalues_raw (const xcb_input_raw_touch_begin_event_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_touch_begin_axisvalues_iterator(R));
    return (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index) + 0);
}

int
xcb_input_raw_touch_begin_axisvalues_raw_length (const xcb_input_raw_touch_begin_event_t *R)
{
    int xcb_pre_tmp_17; /* sumof length */
    int xcb_pre_tmp_18; /* sumof loop counter */
    int64_t xcb_pre_tmp_19; /* sumof sum */
    const uint32_t* xcb_pre_tmp_20; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_17 = R->valuators_len;
    xcb_pre_tmp_19 = 0;
    xcb_pre_tmp_20 = xcb_input_raw_touch_begin_valuator_mask(R);
    for (xcb_pre_tmp_18 = 0; xcb_pre_tmp_18 < xcb_pre_tmp_17; xcb_pre_tmp_18++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_20;
        xcb_pre_tmp_19 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_20++;
    }
    /* sumof end. Result is in xcb_pre_tmp_19 */
    return xcb_pre_tmp_19;
}

xcb_input_fp3232_iterator_t
xcb_input_raw_touch_begin_axisvalues_raw_iterator (const xcb_input_raw_touch_begin_event_t *R)
{
    xcb_input_fp3232_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_fp3232_end(xcb_input_raw_touch_begin_axisvalues_iterator(R));
    int xcb_pre_tmp_21; /* sumof length */
    int xcb_pre_tmp_22; /* sumof loop counter */
    int64_t xcb_pre_tmp_23; /* sumof sum */
    const uint32_t* xcb_pre_tmp_24; /* sumof list ptr */
    /* sumof start */
    xcb_pre_tmp_21 = R->valuators_len;
    xcb_pre_tmp_23 = 0;
    xcb_pre_tmp_24 = xcb_input_raw_touch_begin_valuator_mask(R);
    for (xcb_pre_tmp_22 = 0; xcb_pre_tmp_22 < xcb_pre_tmp_21; xcb_pre_tmp_22++) {
        const uint32_t *xcb_listelement = xcb_pre_tmp_24;
        xcb_pre_tmp_23 += xcb_popcount((*xcb_listelement));
        xcb_pre_tmp_24++;
    }
    /* sumof end. Result is in xcb_pre_tmp_23 */
    i.data = (xcb_input_fp3232_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_fp3232_t, prev.index));
    i.rem = xcb_pre_tmp_23;
    i.index = (char *) i.data - (char *) R;
    return i;
}

int
xcb_input_raw_touch_update_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_raw_touch_begin_sizeof(_buffer);
}

int
xcb_input_raw_touch_end_sizeof (const void  *_buffer  /**< */)
{
    return xcb_input_raw_touch_begin_sizeof(_buffer);
}

void
xcb_input_event_for_send_next (xcb_input_event_for_send_iterator_t *i)
{
    --i->rem;
    ++i->data;
    i->index += sizeof(xcb_input_event_for_send_t);
}

xcb_generic_iterator_t
xcb_input_event_for_send_end (xcb_input_event_for_send_iterator_t i)
{
    xcb_generic_iterator_t ret;
    ret.data = i.data + i.rem;
    ret.index = i.index + ((char *) ret.data - (char *) i.data);
    ret.rem = 0;
    return ret;
}

int
xcb_input_send_extension_event_sizeof (const void  *_buffer)
{
    char *xcb_tmp = (char *)_buffer;
    const xcb_input_send_extension_event_request_t *_aux = (xcb_input_send_extension_event_request_t *)_buffer;
    unsigned int xcb_buffer_len = 0;
    unsigned int xcb_block_len = 0;
    unsigned int xcb_pad = 0;
    unsigned int xcb_align_to = 0;


    xcb_block_len += sizeof(xcb_input_send_extension_event_request_t);
    xcb_tmp += xcb_block_len;
    xcb_buffer_len += xcb_block_len;
    xcb_block_len = 0;
    /* events */
    xcb_block_len += _aux->num_events * sizeof(xcb_input_event_for_send_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_for_send_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;
    /* classes */
    xcb_block_len += _aux->num_classes * sizeof(xcb_input_event_class_t);
    xcb_tmp += xcb_block_len;
    xcb_align_to = ALIGNOF(xcb_input_event_class_t);
    /* insert padding */
    xcb_pad = -xcb_block_len & (xcb_align_to - 1);
    xcb_buffer_len += xcb_block_len + xcb_pad;
    if (0 != xcb_pad) {
        xcb_tmp += xcb_pad;
        xcb_pad = 0;
    }
    xcb_block_len = 0;

    return xcb_buffer_len;
}

xcb_void_cookie_t
xcb_input_send_extension_event_checked (xcb_connection_t                 *c,
                                        xcb_window_t                      destination,
                                        uint8_t                           device_id,
                                        uint8_t                           propagate,
                                        uint16_t                          num_classes,
                                        uint8_t                           num_events,
                                        const xcb_input_event_for_send_t *events,
                                        const xcb_input_event_class_t    *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 6,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SEND_EXTENSION_EVENT,
        .isvoid = 1
    };

    struct iovec xcb_parts[8];
    xcb_void_cookie_t xcb_ret;
    xcb_input_send_extension_event_request_t xcb_out;

    xcb_out.destination = destination;
    xcb_out.device_id = device_id;
    xcb_out.propagate = propagate;
    xcb_out.num_classes = num_classes;
    xcb_out.num_events = num_events;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_for_send_t events */
    xcb_parts[4].iov_base = (char *) events;
    xcb_parts[4].iov_len = num_events * sizeof(xcb_input_event_for_send_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[6].iov_base = (char *) classes;
    xcb_parts[6].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[7].iov_base = 0;
    xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, XCB_REQUEST_CHECKED, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_void_cookie_t
xcb_input_send_extension_event (xcb_connection_t                 *c,
                                xcb_window_t                      destination,
                                uint8_t                           device_id,
                                uint8_t                           propagate,
                                uint16_t                          num_classes,
                                uint8_t                           num_events,
                                const xcb_input_event_for_send_t *events,
                                const xcb_input_event_class_t    *classes)
{
    static const xcb_protocol_request_t xcb_req = {
        .count = 6,
        .ext = &xcb_input_id,
        .opcode = XCB_INPUT_SEND_EXTENSION_EVENT,
        .isvoid = 1
    };

    struct iovec xcb_parts[8];
    xcb_void_cookie_t xcb_ret;
    xcb_input_send_extension_event_request_t xcb_out;

    xcb_out.destination = destination;
    xcb_out.device_id = device_id;
    xcb_out.propagate = propagate;
    xcb_out.num_classes = num_classes;
    xcb_out.num_events = num_events;
    memset(xcb_out.pad0, 0, 3);

    xcb_parts[2].iov_base = (char *) &xcb_out;
    xcb_parts[2].iov_len = sizeof(xcb_out);
    xcb_parts[3].iov_base = 0;
    xcb_parts[3].iov_len = -xcb_parts[2].iov_len & 3;
    /* xcb_input_event_for_send_t events */
    xcb_parts[4].iov_base = (char *) events;
    xcb_parts[4].iov_len = num_events * sizeof(xcb_input_event_for_send_t);
    xcb_parts[5].iov_base = 0;
    xcb_parts[5].iov_len = -xcb_parts[4].iov_len & 3;
    /* xcb_input_event_class_t classes */
    xcb_parts[6].iov_base = (char *) classes;
    xcb_parts[6].iov_len = num_classes * sizeof(xcb_input_event_class_t);
    xcb_parts[7].iov_base = 0;
    xcb_parts[7].iov_len = -xcb_parts[6].iov_len & 3;

    xcb_ret.sequence = xcb_send_request(c, 0, xcb_parts + 2, &xcb_req);
    return xcb_ret;
}

xcb_input_event_for_send_t *
xcb_input_send_extension_event_events (const xcb_input_send_extension_event_request_t *R)
{
    return (xcb_input_event_for_send_t *) (R + 1);
}

int
xcb_input_send_extension_event_events_length (const xcb_input_send_extension_event_request_t *R)
{
    return R->num_events;
}

xcb_input_event_for_send_iterator_t
xcb_input_send_extension_event_events_iterator (const xcb_input_send_extension_event_request_t *R)
{
    xcb_input_event_for_send_iterator_t i;
    i.data = (xcb_input_event_for_send_t *) (R + 1);
    i.rem = R->num_events;
    i.index = (char *) i.data - (char *) R;
    return i;
}

xcb_input_event_class_t *
xcb_input_send_extension_event_classes (const xcb_input_send_extension_event_request_t *R)
{
    xcb_generic_iterator_t prev = xcb_input_event_for_send_end(xcb_input_send_extension_event_events_iterator(R));
    return (xcb_input_event_class_t *) ((char *) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index) + 0);
}

int
xcb_input_send_extension_event_classes_length (const xcb_input_send_extension_event_request_t *R)
{
    return R->num_classes;
}

xcb_generic_iterator_t
xcb_input_send_extension_event_classes_end (const xcb_input_send_extension_event_request_t *R)
{
    xcb_generic_iterator_t i;
    xcb_generic_iterator_t prev = xcb_input_event_for_send_end(xcb_input_send_extension_event_events_iterator(R));
    i.data = ((xcb_input_event_class_t *) ((char*) prev.data + XCB_TYPE_PAD(xcb_input_event_class_t, prev.index))) + (R->num_classes);
    i.rem = 0;
    i.index = (char *) i.data - (char *) R;
    return i;
}

