https://sourceware.org/git/gitweb.cgi?p=newlib-cygwin.git;h=2a35e0ca14e8cd9b1bc5a79ee341d10720269103

commit 2a35e0ca14e8cd9b1bc5a79ee341d10720269103
Author: Jeremy Drake <cyg...@jdrake.com>
Date:   Wed Mar 26 12:48:04 2025 -0700

    Cygwin: vendor libudis86 1.7.2/libudis86
    
    This does not include the source files responsible for generating AT&T-
    or Intel-syntax assembly output, or upstream's Makefile.{am,in}.
    
    Signed-off-by: Jeremy Drake <cyg...@jdrake.com>

Diff:
---
 winsup/cygwin/udis86/decode.c | 1112 ++++++
 winsup/cygwin/udis86/decode.h |  195 +
 winsup/cygwin/udis86/extern.h |  105 +
 winsup/cygwin/udis86/itab.c   | 8401 +++++++++++++++++++++++++++++++++++++++++
 winsup/cygwin/udis86/itab.h   |  678 ++++
 winsup/cygwin/udis86/types.h  |  250 ++
 winsup/cygwin/udis86/udint.h  |   89 +
 winsup/cygwin/udis86/udis86.c |  457 +++
 8 files changed, 11287 insertions(+)

diff --git a/winsup/cygwin/udis86/decode.c b/winsup/cygwin/udis86/decode.c
new file mode 100644
index 000000000..b4efa778c
--- /dev/null
+++ b/winsup/cygwin/udis86/decode.c
@@ -0,0 +1,1112 @@
+/* udis86 - libudis86/decode.c
+ * 
+ * Copyright (c) 2002-2009 Vivek Thampi
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright 
notice, 
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright 
notice, 
+ *       this list of conditions and the following disclaimer in the 
documentation 
+ *       and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND 
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED 
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
FOR 
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES 
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#include "udint.h"
+#include "types.h"
+#include "decode.h"
+
+#ifndef __UD_STANDALONE__
+# include <string.h>
+#endif /* __UD_STANDALONE__ */
+
+/* The max number of prefixes to an instruction */
+#define MAX_PREFIXES    15
+
+/* rex prefix bits */
+#define REX_W(r)        ( ( 0xF & ( r ) )  >> 3 )
+#define REX_R(r)        ( ( 0x7 & ( r ) )  >> 2 )
+#define REX_X(r)        ( ( 0x3 & ( r ) )  >> 1 )
+#define REX_B(r)        ( ( 0x1 & ( r ) )  >> 0 )
+#define REX_PFX_MASK(n) ( ( P_REXW(n) << 3 ) | \
+                          ( P_REXR(n) << 2 ) | \
+                          ( P_REXX(n) << 1 ) | \
+                          ( P_REXB(n) << 0 ) )
+
+/* scable-index-base bits */
+#define SIB_S(b)        ( ( b ) >> 6 )
+#define SIB_I(b)        ( ( ( b ) >> 3 ) & 7 )
+#define SIB_B(b)        ( ( b ) & 7 )
+
+/* modrm bits */
+#define MODRM_REG(b)    ( ( ( b ) >> 3 ) & 7 )
+#define MODRM_NNN(b)    ( ( ( b ) >> 3 ) & 7 )
+#define MODRM_MOD(b)    ( ( ( b ) >> 6 ) & 3 )
+#define MODRM_RM(b)     ( ( b ) & 7 )
+
+static int decode_ext(struct ud *u, uint16_t ptr);
+
+enum reg_class { /* register classes */
+  REGCLASS_GPR,
+  REGCLASS_MMX,
+  REGCLASS_CR,
+  REGCLASS_DB,
+  REGCLASS_SEG,
+  REGCLASS_XMM
+};
+
+ /* 
+ * inp_start
+ *    Should be called before each de-code operation.
+ */
+static void
+inp_start(struct ud *u)
+{
+  u->inp_ctr = 0;
+}
+
+   
+static uint8_t
+inp_next(struct ud *u)
+{
+  if (u->inp_end == 0) {
+    if (u->inp_buf != NULL) {
+      if (u->inp_buf_index < u->inp_buf_size) {
+        u->inp_ctr++;
+        return (u->inp_curr = u->inp_buf[u->inp_buf_index++]);
+      }
+    } else {
+      int c;
+      if ((c = u->inp_hook(u)) != UD_EOI) {
+        u->inp_curr = c;
+        u->inp_sess[u->inp_ctr++] = u->inp_curr;
+        return u->inp_curr;
+      }
+    }
+  }
+  u->inp_end = 1;
+  UDERR(u, "byte expected, eoi received\n");
+  return 0;
+}
+
+static uint8_t
+inp_curr(struct ud *u)
+{
+  return u->inp_curr;
+}
+
+
+/*
+ * inp_uint8
+ * int_uint16
+ * int_uint32
+ * int_uint64
+ *    Load little-endian values from input
+ */
+static uint8_t 
+inp_uint8(struct ud* u)
+{
+  return inp_next(u);
+}
+
+static uint16_t 
+inp_uint16(struct ud* u)
+{
+  uint16_t r, ret;
+
+  ret = inp_next(u);
+  r = inp_next(u);
+  return ret | (r << 8);
+}
+
+static uint32_t 
+inp_uint32(struct ud* u)
+{
+  uint32_t r, ret;
+
+  ret = inp_next(u);
+  r = inp_next(u);
+  ret = ret | (r << 8);
+  r = inp_next(u);
+  ret = ret | (r << 16);
+  r = inp_next(u);
+  return ret | (r << 24);
+}
+
+static uint64_t 
+inp_uint64(struct ud* u)
+{
+  uint64_t r, ret;
+
+  ret = inp_next(u);
+  r = inp_next(u);
+  ret = ret | (r << 8);
+  r = inp_next(u);
+  ret = ret | (r << 16);
+  r = inp_next(u);
+  ret = ret | (r << 24);
+  r = inp_next(u);
+  ret = ret | (r << 32);
+  r = inp_next(u);
+  ret = ret | (r << 40);
+  r = inp_next(u);
+  ret = ret | (r << 48);
+  r = inp_next(u);
+  return ret | (r << 56);
+}
+
+
+static inline int
+eff_opr_mode(int dis_mode, int rex_w, int pfx_opr)
+{
+  if (dis_mode == 64) {
+    return rex_w ? 64 : (pfx_opr ? 16 : 32);
+  } else if (dis_mode == 32) {
+    return pfx_opr ? 16 : 32;
+  } else {
+    UD_ASSERT(dis_mode == 16);
+    return pfx_opr ? 32 : 16;
+  }
+}
+
+
+static inline int
+eff_adr_mode(int dis_mode, int pfx_adr)
+{
+  if (dis_mode == 64) {
+    return pfx_adr ? 32 : 64;
+  } else if (dis_mode == 32) {
+    return pfx_adr ? 16 : 32;
+  } else {
+    UD_ASSERT(dis_mode == 16);
+    return pfx_adr ? 32 : 16;
+  }
+}
+
+
+/* 
+ * decode_prefixes
+ *
+ *  Extracts instruction prefixes.
+ */
+static int 
+decode_prefixes(struct ud *u)
+{
+  int done = 0;
+  uint8_t curr, last = 0;
+  UD_RETURN_ON_ERROR(u);
+
+  do {
+    last = curr;
+    curr = inp_next(u); 
+    UD_RETURN_ON_ERROR(u);
+    if (u->inp_ctr == MAX_INSN_LENGTH) {
+      UD_RETURN_WITH_ERROR(u, "max instruction length");
+    }
+   
+    switch (curr)  
+    {
+    case 0x2E: 
+      u->pfx_seg = UD_R_CS; 
+      break;
+    case 0x36:     
+      u->pfx_seg = UD_R_SS; 
+      break;
+    case 0x3E: 
+      u->pfx_seg = UD_R_DS; 
+      break;
+    case 0x26: 
+      u->pfx_seg = UD_R_ES; 
+      break;
+    case 0x64: 
+      u->pfx_seg = UD_R_FS; 
+      break;
+    case 0x65: 
+      u->pfx_seg = UD_R_GS; 
+      break;
+    case 0x67: /* adress-size override prefix */ 
+      u->pfx_adr = 0x67;
+      break;
+    case 0xF0: 
+      u->pfx_lock = 0xF0;
+      break;
+    case 0x66: 
+      u->pfx_opr = 0x66;
+      break;
+    case 0xF2:
+      u->pfx_str = 0xf2;
+      break;
+    case 0xF3:
+      u->pfx_str = 0xf3;
+      break;
+    default:
+      /* consume if rex */
+      done = (u->dis_mode == 64 && (curr & 0xF0) == 0x40) ? 0 : 1;
+      break;
+    }
+  } while (!done);
+  /* rex prefixes in 64bit mode, must be the last prefix */
+  if (u->dis_mode == 64 && (last & 0xF0) == 0x40) {
+    u->pfx_rex = last;  
+  }
+  return 0;
+}
+
+
+static inline unsigned int modrm( struct ud * u )
+{
+    if ( !u->have_modrm ) {
+        u->modrm = inp_next( u );
+        u->have_modrm = 1;
+    }
+    return u->modrm;
+}
+
+
+static unsigned int
+resolve_operand_size( const struct ud * u, unsigned int s )
+{
+    switch ( s ) 
+    {
+    case SZ_V:
+        return ( u->opr_mode );
+    case SZ_Z:  
+        return ( u->opr_mode == 16 ) ? 16 : 32;
+    case SZ_Y:
+        return ( u->opr_mode == 16 ) ? 32 : u->opr_mode;
+    case SZ_RDQ:
+        return ( u->dis_mode == 64 ) ? 64 : 32;
+    default:
+        return s;
+    }
+}
+
+
+static int resolve_mnemonic( struct ud* u )
+{
+  /* resolve 3dnow weirdness. */
+  if ( u->mnemonic == UD_I3dnow ) {
+    u->mnemonic = ud_itab[ u->le->table[ inp_curr( u )  ] ].mnemonic;
+  }
+  /* SWAPGS is only valid in 64bits mode */
+  if ( u->mnemonic == UD_Iswapgs && u->dis_mode != 64 ) {
+    UDERR(u, "swapgs invalid in 64bits mode\n");
+    return -1;
+  }
+
+  if (u->mnemonic == UD_Ixchg) {
+    if ((u->operand[0].type == UD_OP_REG && u->operand[0].base == UD_R_AX  &&
+         u->operand[1].type == UD_OP_REG && u->operand[1].base == UD_R_AX) ||
+        (u->operand[0].type == UD_OP_REG && u->operand[0].base == UD_R_EAX &&
+         u->operand[1].type == UD_OP_REG && u->operand[1].base == UD_R_EAX)) {
+      u->operand[0].type = UD_NONE;
+      u->operand[1].type = UD_NONE;
+      u->mnemonic = UD_Inop;
+    }
+  }
+
+  if (u->mnemonic == UD_Inop && u->pfx_repe) {
+    u->pfx_repe = 0;
+    u->mnemonic = UD_Ipause;
+  }
+  return 0;
+}
+
+
+/* 
-----------------------------------------------------------------------------
+ * decode_a()- Decodes operands of the type seg:offset
+ * 
-----------------------------------------------------------------------------
+ */
+static void 
+decode_a(struct ud* u, struct ud_operand *op)
+{
+  if (u->opr_mode == 16) {  
+    /* seg16:off16 */
+    op->type = UD_OP_PTR;
+    op->size = 32;
+    op->lval.ptr.off = inp_uint16(u);
+    op->lval.ptr.seg = inp_uint16(u);
+  } else {
+    /* seg16:off32 */
+    op->type = UD_OP_PTR;
+    op->size = 48;
+    op->lval.ptr.off = inp_uint32(u);
+    op->lval.ptr.seg = inp_uint16(u);
+  }
+}
+
+/* 
-----------------------------------------------------------------------------
+ * decode_gpr() - Returns decoded General Purpose Register 
+ * 
-----------------------------------------------------------------------------
+ */
+static enum ud_type 
+decode_gpr(register struct ud* u, unsigned int s, unsigned char rm)
+{
+  switch (s) {
+    case 64:
+        return UD_R_RAX + rm;
+    case 32:
+        return UD_R_EAX + rm;
+    case 16:
+        return UD_R_AX  + rm;
+    case  8:
+        if (u->dis_mode == 64 && u->pfx_rex) {
+            if (rm >= 4)
+                return UD_R_SPL + (rm-4);
+            return UD_R_AL + rm;
+        } else return UD_R_AL + rm;
+    case 0:
+        /* invalid size in case of a decode error */
+        UD_ASSERT(u->error);
+        return UD_NONE;
+    default:
+        UD_ASSERT(!"invalid operand size");
+        return UD_NONE;
+  }
+}
+
+static void
+decode_reg(struct ud *u, 
+           struct ud_operand *opr,
+           int type,
+           int num,
+           int size)
+{
+  int reg;
+  size = resolve_operand_size(u, size);
+  switch (type) {
+    case REGCLASS_GPR : reg = decode_gpr(u, size, num); break;
+    case REGCLASS_MMX : reg = UD_R_MM0  + (num & 7); break;
+    case REGCLASS_XMM : reg = UD_R_XMM0 + num; break;
+    case REGCLASS_CR : reg = UD_R_CR0  + num; break;
+    case REGCLASS_DB : reg = UD_R_DR0  + num; break;
+    case REGCLASS_SEG : {
+      /*
+       * Only 6 segment registers, anything else is an error.
+       */
+      if ((num & 7) > 5) {
+        UDERR(u, "invalid segment register value\n");
+        return;
+      } else {
+        reg = UD_R_ES + (num & 7);
+      }
+      break;
+    }
+    default:
+      UD_ASSERT(!"invalid register type");
+      return;
+  }
+  opr->type = UD_OP_REG;
+  opr->base = reg;
+  opr->size = size;
+}
+
+
+/*
+ * decode_imm 
+ *
+ *    Decode Immediate values.
+ */
+static void 
+decode_imm(struct ud* u, unsigned int size, struct ud_operand *op)
+{
+  op->size = resolve_operand_size(u, size);
+  op->type = UD_OP_IMM;
+
+  switch (op->size) {
+  case  8: op->lval.sbyte = inp_uint8(u);   break;
+  case 16: op->lval.uword = inp_uint16(u);  break;
+  case 32: op->lval.udword = inp_uint32(u); break;
+  case 64: op->lval.uqword = inp_uint64(u); break;
+  default: return;
+  }
+}
+
+
+/* 
+ * decode_mem_disp
+ *
+ *    Decode mem address displacement.
+ */
+static void 
+decode_mem_disp(struct ud* u, unsigned int size, struct ud_operand *op)
+{
+  switch (size) {
+  case 8:
+    op->offset = 8; 
+    op->lval.ubyte  = inp_uint8(u);
+    break;
+  case 16:
+    op->offset = 16; 
+    op->lval.uword  = inp_uint16(u); 
+    break;
+  case 32:
+    op->offset = 32; 
+    op->lval.udword = inp_uint32(u); 
+    break;
+  case 64:
+    op->offset = 64; 
+    op->lval.uqword = inp_uint64(u); 
+    break;
+  default:
+      return;
+  }
+}
+
+
+/*
+ * decode_modrm_reg
+ *
+ *    Decodes reg field of mod/rm byte
+ * 
+ */
+static inline void
+decode_modrm_reg(struct ud         *u, 
+                 struct ud_operand *operand,
+                 unsigned int       type,
+                 unsigned int       size)
+{
+  uint8_t reg = (REX_R(u->pfx_rex) << 3) | MODRM_REG(modrm(u));
+  decode_reg(u, operand, type, reg, size);
+}
+
+
+/*
+ * decode_modrm_rm
+ *
+ *    Decodes rm field of mod/rm byte
+ * 
+ */
+static void 
+decode_modrm_rm(struct ud         *u, 
+                struct ud_operand *op,
+                unsigned char      type,    /* register type */
+                unsigned int       size)    /* operand size */
+
+{
+  size_t offset = 0;
+  unsigned char mod, rm;
+
+  /* get mod, r/m and reg fields */
+  mod = MODRM_MOD(modrm(u));
+  rm  = (REX_B(u->pfx_rex) << 3) | MODRM_RM(modrm(u));
+
+  /* 
+   * If mod is 11b, then the modrm.rm specifies a register.
+   *
+   */
+  if (mod == 3) {
+    decode_reg(u, op, type, rm, size);
+    return;
+  }
+
+  /* 
+   * !11b => Memory Address
+   */  
+  op->type = UD_OP_MEM;
+  op->size = resolve_operand_size(u, size);
+
+  if (u->adr_mode == 64) {
+    op->base = UD_R_RAX + rm;
+    if (mod == 1) {
+      offset = 8;
+    } else if (mod == 2) {
+      offset = 32;
+    } else if (mod == 0 && (rm & 7) == 5) {           
+      op->base = UD_R_RIP;
+      offset = 32;
+    } else {
+      offset = 0;
+    }
+    /* 
+     * Scale-Index-Base (SIB) 
+     */
+    if ((rm & 7) == 4) {
+      inp_next(u);
+      
+      op->scale = (1 << SIB_S(inp_curr(u))) & ~1;
+      op->index = UD_R_RAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3));
+      op->base  = UD_R_RAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3));
+
+      /* special conditions for base reference */
+      if (op->index == UD_R_RSP) {
+        op->index = UD_NONE;
+        op->scale = UD_NONE;
+      }
+
+      if (op->base == UD_R_RBP || op->base == UD_R_R13) {
+        if (mod == 0) {
+          op->base = UD_NONE;
+        } 
+        if (mod == 1) {
+          offset = 8;
+        } else {
+          offset = 32;
+        }
+      }
+    }
+  } else if (u->adr_mode == 32) {
+    op->base = UD_R_EAX + rm;
+    if (mod == 1) {
+      offset = 8;
+    } else if (mod == 2) {
+      offset = 32;
+    } else if (mod == 0 && rm == 5) {
+      op->base = UD_NONE;
+      offset = 32;
+    } else {
+      offset = 0;
+    }
+
+    /* Scale-Index-Base (SIB) */
+    if ((rm & 7) == 4) {
+      inp_next(u);
+
+      op->scale = (1 << SIB_S(inp_curr(u))) & ~1;
+      op->index = UD_R_EAX + (SIB_I(inp_curr(u)) | (REX_X(u->pfx_rex) << 3));
+      op->base  = UD_R_EAX + (SIB_B(inp_curr(u)) | (REX_B(u->pfx_rex) << 3));
+
+      if (op->index == UD_R_ESP) {
+        op->index = UD_NONE;
+        op->scale = UD_NONE;
+      }
+
+      /* special condition for base reference */
+      if (op->base == UD_R_EBP) {
+        if (mod == 0) {
+          op->base = UD_NONE;
+        } 
+        if (mod == 1) {
+          offset = 8;
+        } else {
+          offset = 32;
+        }
+      }
+    }
+  } else {
+    const unsigned int bases[]   = { UD_R_BX, UD_R_BX, UD_R_BP, UD_R_BP,
+                                     UD_R_SI, UD_R_DI, UD_R_BP, UD_R_BX };
+    const unsigned int indices[] = { UD_R_SI, UD_R_DI, UD_R_SI, UD_R_DI,
+                                     UD_NONE, UD_NONE, UD_NONE, UD_NONE };
+    op->base  = bases[rm & 7];
+    op->index = indices[rm & 7];
+    if (mod == 0 && rm == 6) {
+      offset = 16;
+      op->base = UD_NONE;
+    } else if (mod == 1) {
+      offset = 8;
+    } else if (mod == 2) { 
+      offset = 16;
+    }
+  }
+
+  if (offset) {
+    decode_mem_disp(u, offset, op);
+  }
+}
+
+
+/* 
+ * decode_moffset
+ *    Decode offset-only memory operand
+ */
+static void
+decode_moffset(struct ud *u, unsigned int size, struct ud_operand *opr)
+{
+  opr->type = UD_OP_MEM;
+  opr->size = resolve_operand_size(u, size);
+  decode_mem_disp(u, u->adr_mode, opr);
+}
+
+
+/* 
-----------------------------------------------------------------------------
+ * decode_operands() - Disassembles Operands.
+ * 
-----------------------------------------------------------------------------
+ */
+static int
+decode_operand(struct ud           *u, 
+               struct ud_operand   *operand,
+               enum ud_operand_code type,
+               unsigned int         size)
+{
+  operand->_oprcode = type;
+
+  switch (type) {
+    case OP_A :
+      decode_a(u, operand);
+      break;
+    case OP_MR:
+      decode_modrm_rm(u, operand, REGCLASS_GPR, 
+                      MODRM_MOD(modrm(u)) == 3 ? 
+                        Mx_reg_size(size) : Mx_mem_size(size));
+      break;
+    case OP_F:
+      u->br_far  = 1;
+      /* intended fall through */
+    case OP_M:
+      if (MODRM_MOD(modrm(u)) == 3) {
+        UDERR(u, "expected modrm.mod != 3\n");
+      }
+      /* intended fall through */
+    case OP_E:
+      decode_modrm_rm(u, operand, REGCLASS_GPR, size);
+      break;
+    case OP_G:
+      decode_modrm_reg(u, operand, REGCLASS_GPR, size);
+      break;
+    case OP_sI:
+    case OP_I:
+      decode_imm(u, size, operand);
+      break;
+    case OP_I1:
+      operand->type = UD_OP_CONST;
+      operand->lval.udword = 1;
+      break;
+    case OP_N:
+      if (MODRM_MOD(modrm(u)) != 3) {
+        UDERR(u, "expected modrm.mod == 3\n");
+      }
+      /* intended fall through */
+    case OP_Q:
+      decode_modrm_rm(u, operand, REGCLASS_MMX, size);
+      break;
+    case OP_P:
+      decode_modrm_reg(u, operand, REGCLASS_MMX, size);
+      break;
+    case OP_U:
+      if (MODRM_MOD(modrm(u)) != 3) {
+        UDERR(u, "expected modrm.mod == 3\n");
+      }
+      /* intended fall through */
+    case OP_W:
+      decode_modrm_rm(u, operand, REGCLASS_XMM, size);
+      break;
+    case OP_V:
+      decode_modrm_reg(u, operand, REGCLASS_XMM, size);
+      break;
+    case OP_MU:
+      decode_modrm_rm(u, operand, REGCLASS_XMM, 
+                      MODRM_MOD(modrm(u)) == 3 ? 
+                        Mx_reg_size(size) : Mx_mem_size(size));
+      break;
+    case OP_S:
+      decode_modrm_reg(u, operand, REGCLASS_SEG, size);
+      break;
+    case OP_O:
+      decode_moffset(u, size, operand);
+      break;
+    case OP_R0: 
+    case OP_R1: 
+    case OP_R2: 
+    case OP_R3: 
+    case OP_R4: 
+    case OP_R5: 
+    case OP_R6: 
+    case OP_R7:
+      decode_reg(u, operand, REGCLASS_GPR, 
+                 (REX_B(u->pfx_rex) << 3) | (type - OP_R0), size);
+      break;
+    case OP_AL:
+    case OP_AX:
+    case OP_eAX:
+    case OP_rAX:
+      decode_reg(u, operand, REGCLASS_GPR, 0, size);
+      break;
+    case OP_CL:
+    case OP_CX:
+    case OP_eCX:
+      decode_reg(u, operand, REGCLASS_GPR, 1, size);
+      break;
+    case OP_DL:
+    case OP_DX:
+    case OP_eDX:
+      decode_reg(u, operand, REGCLASS_GPR, 2, size);
+      break;
+    case OP_ES: 
+    case OP_CS: 
+    case OP_DS:
+    case OP_SS: 
+    case OP_FS: 
+    case OP_GS:
+      /* in 64bits mode, only fs and gs are allowed */
+      if (u->dis_mode == 64) {
+        if (type != OP_FS && type != OP_GS) {
+          UDERR(u, "invalid segment register in 64bits\n");
+        }
+      }
+      operand->type = UD_OP_REG;
+      operand->base = (type - OP_ES) + UD_R_ES;
+      operand->size = 16;
+      break;
+    case OP_J :
+      decode_imm(u, size, operand);
+      operand->type = UD_OP_JIMM;
+      break ;
+    case OP_R :
+      if (MODRM_MOD(modrm(u)) != 3) {
+        UDERR(u, "expected modrm.mod == 3\n");
+      }
+      decode_modrm_rm(u, operand, REGCLASS_GPR, size);
+      break;
+    case OP_C:
+      decode_modrm_reg(u, operand, REGCLASS_CR, size);
+      break;
+    case OP_D:
+      decode_modrm_reg(u, operand, REGCLASS_DB, size);
+      break;
+    case OP_I3 :
+      operand->type = UD_OP_CONST;
+      operand->lval.sbyte = 3;
+      break;
+    case OP_ST0: 
+    case OP_ST1: 
+    case OP_ST2: 
+    case OP_ST3:
+    case OP_ST4:
+    case OP_ST5: 
+    case OP_ST6: 
+    case OP_ST7:
+      operand->type = UD_OP_REG;
+      operand->base = (type - OP_ST0) + UD_R_ST0;
+      operand->size = 80;
+      break;
+    default :
+      break;
+  }
+  return 0;
+}
+
+
+/* 
+ * decode_operands
+ *
+ *    Disassemble upto 3 operands of the current instruction being
+ *    disassembled. By the end of the function, the operand fields
+ *    of the ud structure will have been filled.
+ */
+static int
+decode_operands(struct ud* u)
+{
+  decode_operand(u, &u->operand[0],
+                    u->itab_entry->operand1.type,
+                    u->itab_entry->operand1.size);
+  decode_operand(u, &u->operand[1],
+                    u->itab_entry->operand2.type,
+                    u->itab_entry->operand2.size);
+  decode_operand(u, &u->operand[2],
+                    u->itab_entry->operand3.type,
+                    u->itab_entry->operand3.size);
+  return 0;
+}
+    
+/* 
-----------------------------------------------------------------------------
+ * clear_insn() - clear instruction structure
+ * 
-----------------------------------------------------------------------------
+ */
+static void
+clear_insn(register struct ud* u)
+{
+  u->error     = 0;
+  u->pfx_seg   = 0;
+  u->pfx_opr   = 0;
+  u->pfx_adr   = 0;
+  u->pfx_lock  = 0;
+  u->pfx_repne = 0;
+  u->pfx_rep   = 0;
+  u->pfx_repe  = 0;
+  u->pfx_rex   = 0;
+  u->pfx_str   = 0;
+  u->mnemonic  = UD_Inone;
+  u->itab_entry = NULL;
+  u->have_modrm = 0;
+  u->br_far    = 0;
+
+  memset( &u->operand[ 0 ], 0, sizeof( struct ud_operand ) );
+  memset( &u->operand[ 1 ], 0, sizeof( struct ud_operand ) );
+  memset( &u->operand[ 2 ], 0, sizeof( struct ud_operand ) );
+}
+
+
+static inline int
+resolve_pfx_str(struct ud* u)
+{
+  if (u->pfx_str == 0xf3) {
+    if (P_STR(u->itab_entry->prefix)) {
+        u->pfx_rep  = 0xf3;
+    } else {
+        u->pfx_repe = 0xf3;
+    }
+  } else if (u->pfx_str == 0xf2) {
+    u->pfx_repne = 0xf3;
+  }
+  return 0;
+}
+
+
+static int
+resolve_mode( struct ud* u )
+{
+  int default64;
+  /* if in error state, bail out */
+  if ( u->error ) return -1; 
+
+  /* propagate prefix effects */
+  if ( u->dis_mode == 64 ) {  /* set 64bit-mode flags */
+
+    /* Check validity of  instruction m64 */
+    if ( P_INV64( u->itab_entry->prefix ) ) {
+      UDERR(u, "instruction invalid in 64bits\n");
+      return -1;
+    }
+
+    /* effective rex prefix is the  effective mask for the 
+     * instruction hard-coded in the opcode map.
+     */
+    u->pfx_rex = ( u->pfx_rex & 0x40 ) | 
+                 ( u->pfx_rex & REX_PFX_MASK( u->itab_entry->prefix ) ); 
+
+    /* whether this instruction has a default operand size of 
+     * 64bit, also hardcoded into the opcode map.
+     */
+    default64 = P_DEF64( u->itab_entry->prefix ); 
+    /* calculate effective operand size */
+    if ( REX_W( u->pfx_rex ) ) {
+        u->opr_mode = 64;
+    } else if ( u->pfx_opr ) {
+        u->opr_mode = 16;
+    } else {
+        /* unless the default opr size of instruction is 64,
+         * the effective operand size in the absence of rex.w
+         * prefix is 32.
+         */
+        u->opr_mode = default64 ? 64 : 32;
+    }
+
+    /* calculate effective address size */
+    u->adr_mode = (u->pfx_adr) ? 32 : 64;
+  } else if ( u->dis_mode == 32 ) { /* set 32bit-mode flags */
+    u->opr_mode = ( u->pfx_opr ) ? 16 : 32;
+    u->adr_mode = ( u->pfx_adr ) ? 16 : 32;
+  } else if ( u->dis_mode == 16 ) { /* set 16bit-mode flags */
+    u->opr_mode = ( u->pfx_opr ) ? 32 : 16;
+    u->adr_mode = ( u->pfx_adr ) ? 32 : 16;
+  }
+
+  return 0;
+}
+
+
+static inline int
+decode_insn(struct ud *u, uint16_t ptr)
+{
+  UD_ASSERT((ptr & 0x8000) == 0);
+  u->itab_entry = &ud_itab[ ptr ];
+  u->mnemonic = u->itab_entry->mnemonic;
+  return (resolve_pfx_str(u)  == 0 &&
+          resolve_mode(u)     == 0 &&
+          decode_operands(u)  == 0 &&
+          resolve_mnemonic(u) == 0) ? 0 : -1;
+}
+
+
+/*
+ * decode_3dnow()
+ *
+ *    Decoding 3dnow is a little tricky because of its strange opcode
+ *    structure. The final opcode disambiguation depends on the last
+ *    byte that comes after the operands have been decoded. Fortunately,
+ *    all 3dnow instructions have the same set of operand types. So we
+ *    go ahead and decode the instruction by picking an arbitrarily chosen
+ *    valid entry in the table, decode the operands, and read the final
+ *    byte to resolve the menmonic.
+ */
+static inline int
+decode_3dnow(struct ud* u)
+{
+  uint16_t ptr;
+  UD_ASSERT(u->le->type == UD_TAB__OPC_3DNOW);
+  UD_ASSERT(u->le->table[0xc] != 0);
+  decode_insn(u, u->le->table[0xc]);
+  inp_next(u); 
+  if (u->error) {
+    return -1;
+  }
+  ptr = u->le->table[inp_curr(u)]; 
+  UD_ASSERT((ptr & 0x8000) == 0);
+  u->mnemonic = ud_itab[ptr].mnemonic;
+  return 0;
+}
+
+
+static int
+decode_ssepfx(struct ud *u)
+{
+  uint8_t idx;
+  uint8_t pfx;
+ 
+  /*
+   * String prefixes (f2, f3) take precedence over operand
+   * size prefix (66).
+   */
+  pfx = u->pfx_str;
+  if (pfx == 0) {
+    pfx = u->pfx_opr;
+  }
+  idx = ((pfx & 0xf) + 1) / 2;
+  if (u->le->table[idx] == 0) {
+    idx = 0;
+  }
+  if (idx && u->le->table[idx] != 0) {
+    /*
+     * "Consume" the prefix as a part of the opcode, so it is no
+     * longer exported as an instruction prefix.
+     */
+    u->pfx_str = 0;
+    if (pfx == 0x66) {
+        /* 
+         * consume "66" only if it was used for decoding, leaving
+         * it to be used as an operands size override for some
+         * simd instructions.
+         */
+        u->pfx_opr = 0;
+    }
+  }
+  return decode_ext(u, u->le->table[idx]);
+}
+
+
+/*
+ * decode_ext()
+ *
+ *    Decode opcode extensions (if any)
+ */
+static int
+decode_ext(struct ud *u, uint16_t ptr)
+{
+  uint8_t idx = 0;
+  if ((ptr & 0x8000) == 0) {
+    return decode_insn(u, ptr); 
+  }
+  u->le = &ud_lookup_table_list[(~0x8000 & ptr)];
+  if (u->le->type == UD_TAB__OPC_3DNOW) {
+    return decode_3dnow(u);
+  }
+
+  switch (u->le->type) {
+    case UD_TAB__OPC_MOD:
+      /* !11 = 0, 11 = 1 */
+      idx = (MODRM_MOD(modrm(u)) + 1) / 4;
+      break;
+      /* disassembly mode/operand size/address size based tables.
+       * 16 = 0,, 32 = 1, 64 = 2
+       */
+    case UD_TAB__OPC_MODE:
+      idx = u->dis_mode != 64 ? 0 : 1;
+      break;
+    case UD_TAB__OPC_OSIZE:
+      idx = eff_opr_mode(u->dis_mode, REX_W(u->pfx_rex), u->pfx_opr) / 32;
+      break;
+    case UD_TAB__OPC_ASIZE:
+      idx = eff_adr_mode(u->dis_mode, u->pfx_adr) / 32;
+      break;
+    case UD_TAB__OPC_X87:
+      idx = modrm(u) - 0xC0;
+      break;
+    case UD_TAB__OPC_VENDOR:
+      if (u->vendor == UD_VENDOR_ANY) {
+        /* choose a valid entry */
+        idx = (u->le->table[idx] != 0) ? 0 : 1;
+      } else if (u->vendor == UD_VENDOR_AMD) {
+        idx = 0;
+      } else {
+        idx = 1;
+      }
+      break;
+    case UD_TAB__OPC_RM:
+      idx = MODRM_RM(modrm(u));
+      break;
+    case UD_TAB__OPC_REG:
+      idx = MODRM_REG(modrm(u));
+      break;
+    case UD_TAB__OPC_SSE:
+      return decode_ssepfx(u);
+    default:
+      UD_ASSERT(!"not reached");
+      break;
+  }
+
+  return decode_ext(u, u->le->table[idx]);
+}
+
+
+static int
+decode_opcode(struct ud *u)
+{
+  uint16_t ptr;
+  UD_ASSERT(u->le->type == UD_TAB__OPC_TABLE);
+  UD_RETURN_ON_ERROR(u);
+  u->primary_opcode = inp_curr(u);
+  ptr = u->le->table[inp_curr(u)];
+  if (ptr & 0x8000) {
+    u->le = &ud_lookup_table_list[ptr & ~0x8000];
+    if (u->le->type == UD_TAB__OPC_TABLE) {
+      inp_next(u);
+      return decode_opcode(u);
+    }
+  }
+  return decode_ext(u, ptr);
+}
+
+ 
+/* 
=============================================================================
+ * ud_decode() - Instruction decoder. Returns the number of bytes decoded.
+ * 
=============================================================================
+ */
+unsigned int
+ud_decode(struct ud *u)
+{
+  inp_start(u);
+  clear_insn(u);
+  u->le = &ud_lookup_table_list[0];
+  u->error = decode_prefixes(u) == -1 || 
+             decode_opcode(u)   == -1 ||
+             u->error;
+  /* Handle decode error. */
+  if (u->error) {
+    /* clear out the decode data. */
+    clear_insn(u);
+    /* mark the sequence of bytes as invalid. */
+    u->itab_entry = &ud_itab[0]; /* entry 0 is invalid */
+    u->mnemonic = u->itab_entry->mnemonic;
+  } 
+
+    /* maybe this stray segment override byte
+     * should be spewed out?
+     */
+    if ( !P_SEG( u->itab_entry->prefix ) && 
+            u->operand[0].type != UD_OP_MEM &&
+            u->operand[1].type != UD_OP_MEM )
+        u->pfx_seg = 0;
+
+  u->insn_offset = u->pc; /* set offset of instruction */
+  u->asm_buf_fill = 0;   /* set translation buffer index to 0 */
+  u->pc += u->inp_ctr;    /* move program counter by bytes decoded */
+
+  /* return number of bytes disassembled. */
+  return u->inp_ctr;
+}
+
+/*
+vim: set ts=2 sw=2 expandtab
+*/
diff --git a/winsup/cygwin/udis86/decode.h b/winsup/cygwin/udis86/decode.h
new file mode 100644
index 000000000..a7362c84a
--- /dev/null
+++ b/winsup/cygwin/udis86/decode.h
@@ -0,0 +1,195 @@
+/* udis86 - libudis86/decode.h
+ *
+ * Copyright (c) 2002-2009 Vivek Thampi
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright 
notice, 
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright 
notice, 
+ *       this list of conditions and the following disclaimer in the 
documentation 
+ *       and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND 
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED 
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
FOR 
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES 
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef UD_DECODE_H
+#define UD_DECODE_H
+
+#include "types.h"
+#include "itab.h"
+
+#define MAX_INSN_LENGTH 15
+
+/* itab prefix bits */
+#define P_none          ( 0 )
+#define P_cast          ( 1 << 0 )
+#define P_CAST(n)       ( ( n >> 0 ) & 1 )
+#define P_rexb          ( 1 << 1 )
+#define P_REXB(n)       ( ( n >> 1 ) & 1 )
+#define P_inv64         ( 1 << 4 )
+#define P_INV64(n)      ( ( n >> 4 ) & 1 )
+#define P_rexw          ( 1 << 5 )
+#define P_REXW(n)       ( ( n >> 5 ) & 1 )
+#define P_def64         ( 1 << 7 )
+#define P_DEF64(n)      ( ( n >> 7 ) & 1 )
+#define P_rexr          ( 1 << 8 )
+#define P_REXR(n)       ( ( n >> 8 ) & 1 )
+#define P_oso           ( 1 << 9 )
+#define P_OSO(n)        ( ( n >> 9 ) & 1 )
+#define P_aso           ( 1 << 10 )
+#define P_ASO(n)        ( ( n >> 10 ) & 1 )
+#define P_rexx          ( 1 << 11 )
+#define P_REXX(n)       ( ( n >> 11 ) & 1 )
+#define P_ImpAddr       ( 1 << 12 )
+#define P_IMPADDR(n)    ( ( n >> 12 ) & 1 )
+#define P_seg           ( 1 << 13 )
+#define P_SEG(n)        ( ( n >> 13 ) & 1 )
+#define P_str           ( 1 << 14 )
+#define P_STR(n)        ( ( n >> 14 ) & 1 )
+#define P_strz          ( 1 << 15 )
+#define P_STR_ZF(n)     ( ( n >> 15 ) & 1 )
+
+/* operand type constants -- order is important! */
+
+enum ud_operand_code {
+    OP_NONE,
+
+    OP_A,      OP_E,      OP_M,       OP_G,       
+    OP_I,      OP_F,
+
+    OP_R0,     OP_R1,     OP_R2,      OP_R3,
+    OP_R4,     OP_R5,     OP_R6,      OP_R7,
+
+    OP_AL,     OP_CL,     OP_DL,
+    OP_AX,     OP_CX,     OP_DX,
+    OP_eAX,    OP_eCX,    OP_eDX,
+    OP_rAX,    OP_rCX,    OP_rDX,
+
+    OP_ES,     OP_CS,     OP_SS,      OP_DS,  
+    OP_FS,     OP_GS,
+
+    OP_ST0,    OP_ST1,    OP_ST2,     OP_ST3,
+    OP_ST4,    OP_ST5,    OP_ST6,     OP_ST7,
+
+    OP_J,      OP_S,      OP_O,          
+    OP_I1,     OP_I3,     OP_sI,
+
+    OP_V,      OP_W,      OP_Q,       OP_P, 
+    OP_U,      OP_N,      OP_MU,
+
+    OP_R,      OP_C,      OP_D,       
+
+    OP_MR
+} UD_ATTR_PACKED;
+
+
+/* operand size constants */
+
+enum ud_operand_size {
+    SZ_NA  = 0,
+    SZ_Z   = 1,
+    SZ_V   = 2,
+    SZ_RDQ = 7,
+
+    /* the following values are used as is,
+     * and thus hard-coded. changing them 
+     * will break internals 
+     */
+    SZ_B   = 8,
+    SZ_W   = 16,
+    SZ_D   = 32,
+    SZ_Q   = 64,
+    SZ_T   = 80,
+    SZ_O   = 128,
+
+    SZ_Y   = 17,
+
+    /*
+     * complex size types, that encode sizes for operands
+     * of type MR (memory or register), for internal use
+     * only. Id space 256 and above.
+     */
+    SZ_BD  = (SZ_B << 8) | SZ_D,
+    SZ_BV  = (SZ_B << 8) | SZ_V,
+    SZ_WD  = (SZ_W << 8) | SZ_D,
+    SZ_WV  = (SZ_W << 8) | SZ_V,
+    SZ_WY  = (SZ_W << 8) | SZ_Y,
+    SZ_DY  = (SZ_D << 8) | SZ_Y,
+    SZ_WO  = (SZ_W << 8) | SZ_O,
+    SZ_DO  = (SZ_D << 8) | SZ_O,
+    SZ_QO  = (SZ_Q << 8) | SZ_O,
+
+} UD_ATTR_PACKED;
+
+
+/* resolve complex size type.
+ */
+static inline enum ud_operand_size
+Mx_mem_size(enum ud_operand_size size)
+{
+    return (size >> 8) & 0xff;
+}
+
+static inline enum ud_operand_size
+Mx_reg_size(enum ud_operand_size size)
+{
+    return size & 0xff;
+}
+
+/* A single operand of an entry in the instruction table. 
+ * (internal use only)
+ */
+struct ud_itab_entry_operand 
+{
+  enum ud_operand_code type;
+  enum ud_operand_size size;
+};
+
+
+/* A single entry in an instruction table. 
+ *(internal use only)
+ */
+struct ud_itab_entry 
+{
+  enum ud_mnemonic_code         mnemonic;
+  struct ud_itab_entry_operand  operand1;
+  struct ud_itab_entry_operand  operand2;
+  struct ud_itab_entry_operand  operand3;
+  uint32_t                      prefix;
+};
+
+struct ud_lookup_table_list_entry {
+    const uint16_t *table;
+    enum ud_table_type type;
+    const char *meta;
+};
+     
+
+
+static inline int
+ud_opcode_field_sext(uint8_t primary_opcode)
+{
+  return (primary_opcode & 0x02) != 0;
+}
+
+extern struct ud_itab_entry ud_itab[];
+extern struct ud_lookup_table_list_entry ud_lookup_table_list[];
+
+#endif /* UD_DECODE_H */
+
+/* vim:cindent
+ * vim:expandtab
+ * vim:ts=4
+ * vim:sw=4
+ */
diff --git a/winsup/cygwin/udis86/extern.h b/winsup/cygwin/udis86/extern.h
new file mode 100644
index 000000000..ae9f82f22
--- /dev/null
+++ b/winsup/cygwin/udis86/extern.h
@@ -0,0 +1,105 @@
+/* udis86 - libudis86/extern.h
+ *
+ * Copyright (c) 2002-2009, 2013 Vivek Thampi
+ * All rights reserved.
+ * 
+ * Redistribution and use in source and binary forms, with or without 
modification, 
+ * are permitted provided that the following conditions are met:
+ * 
+ *     * Redistributions of source code must retain the above copyright 
notice, 
+ *       this list of conditions and the following disclaimer.
+ *     * Redistributions in binary form must reproduce the above copyright 
notice, 
+ *       this list of conditions and the following disclaimer in the 
documentation 
+ *       and/or other materials provided with the distribution.
+ * 
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
AND 
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
IMPLIED 
+ * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 
+ * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE 
FOR 
+ * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 
DAMAGES 
+ * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 
SERVICES; 
+ * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND 
ON 
+ * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT 
+ * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF 
THIS 
+ * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+ */
+#ifndef UD_EXTERN_H
+#define UD_EXTERN_H
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include "types.h"
+
+/* ============================= PUBLIC API ================================= 
*/
+
+extern void ud_init(struct ud*);
+
+extern void ud_set_mode(struct ud*, uint8_t);
+
+extern void ud_set_pc(struct ud*, uint64_t);
+
+extern void ud_set_input_hook(struct ud*, int (*)(struct ud*));
+
+extern void ud_set_input_buffer(struct ud*, const uint8_t*, size_t);
+
+#ifndef __UD_STANDALONE__
+extern void ud_set_input_file(struct ud*, FILE*);
+#endif /* __UD_STANDALONE__ */
+
+extern void ud_set_vendor(struct ud*, unsigned);
+
+extern void ud_set_syntax(struct ud*, void (*)(struct ud*));
+
+extern void ud_input_skip(struct ud*, size_t);
+
+extern int ud_input_end(const struct ud*);
+
+extern unsigned int ud_decode(struct ud*);
+
+extern unsigned int ud_disassemble(struct ud*);
+
+extern void ud_translate_intel(struct ud*);
+
+extern void ud_translate_att(struct ud*);
+
+extern const char* ud_insn_asm(const struct ud* u);
+
+extern const uint8_t* ud_insn_ptr(const struct ud* u);
+
+extern uint64_t ud_insn_off(const struct ud*);
+
+extern const char* ud_insn_hex(struct ud*);
+
+extern unsigned int ud_insn_len(const struct ud* u);
+
+extern const struct ud_operand* ud_insn_opr(const struct ud *u, unsigned int 
n);
+
+extern int ud_opr_is_sreg(const struct ud_operand *opr);
+
+extern int ud_opr_is_gpr(const struct ud_operand *opr);
+
+extern enum ud_mnemonic_code ud_insn_mnemonic(const struct ud *u);
+
+extern const char* ud_lookup_mnemonic(enum ud_mnemonic_code c);
+
+extern void ud_set_user_opaque_data(struct ud*, void*);
+
+extern void* ud_get_user_opaque_data(const struct ud*);
+
+extern uint64_t ud_insn_sext_imm(const struct ud*, const struct ud_operand*);
+
+extern void ud_set_asm_buffer(struct ud *u, char *buf, size_t size);
+
+extern void ud_set_sym_resolver(struct ud *u, 
+                                const char* (*resolver)(struct ud*, 
+                                                        uint64_t addr,
+                                                        int64_t *offset));
+
+/* ========================================================================== 
*/
+
+#ifdef __cplusplus
+}
+#endif
+#endif /* UD_EXTERN_H */
diff --git a/winsup/cygwin/udis86/itab.c b/winsup/cygwin/udis86/itab.c
new file mode 100644
index 000000000..a3d0634b8
--- /dev/null
+++ b/winsup/cygwin/udis86/itab.c
@@ -0,0 +1,8401 @@
+/* itab.c -- generated by udis86:scripts/ud_itab.py, do no edit */
+#include "decode.h"
+
+#define GROUP(n) (0x8000 | (n))
+
+
+static const uint16_t ud_itab__1[] = {
+  /*  0 */           7,           0,
+};
+
+static const uint16_t ud_itab__2[] = {
+  /*  0 */           8,           0,
+};
+
+static const uint16_t ud_itab__3[] = {
+  /*  0 */          15,           0,
+};
+
+static const uint16_t ud_itab__6[] = {
+  /*  0 */          16,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__7[] = {
+  /*  0 */          17,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__8[] = {
+  /*  0 */          18,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__9[] = {
+  /*  0 */          19,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__10[] = {
+  /*  0 */          20,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__11[] = {
+  /*  0 */          21,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__5[] = {
+  /*  0 */    GROUP(6),    GROUP(7),    GROUP(8),    GROUP(9),
+  /*  4 */   GROUP(10),   GROUP(11),           0,           0,
+};
+
+static const uint16_t ud_itab__15[] = {
+  /*  0 */          22,           0,
+};
+
+static const uint16_t ud_itab__14[] = {
+  /*  0 */   GROUP(15),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__17[] = {
+  /*  0 */          23,           0,
+};
+
+static const uint16_t ud_itab__16[] = {
+  /*  0 */   GROUP(17),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__19[] = {
+  /*  0 */          24,           0,
+};
+
+static const uint16_t ud_itab__18[] = {
+  /*  0 */   GROUP(19),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__21[] = {
+  /*  0 */          25,           0,
+};
+
+static const uint16_t ud_itab__20[] = {
+  /*  0 */   GROUP(21),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__23[] = {
+  /*  0 */          26,           0,
+};
+
+static const uint16_t ud_itab__22[] = {
+  /*  0 */   GROUP(23),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__25[] = {
+  /*  0 */          27,           0,
+};
+
+static const uint16_t ud_itab__24[] = {
+  /*  0 */   GROUP(25),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__27[] = {
+  /*  0 */          28,           0,
+};
+
+static const uint16_t ud_itab__26[] = {
+  /*  0 */   GROUP(27),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__13[] = {
+  /*  0 */   GROUP(14),   GROUP(16),   GROUP(18),   GROUP(20),
+  /*  4 */   GROUP(22),           0,   GROUP(24),   GROUP(26),
+};
+
+static const uint16_t ud_itab__32[] = {
+  /*  0 */           0,          29,           0,
+};
+
+static const uint16_t ud_itab__31[] = {
+  /*  0 */           0,   GROUP(32),
+};
+
+static const uint16_t ud_itab__30[] = {
+  /*  0 */   GROUP(31),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__35[] = {
+  /*  0 */           0,          30,           0,
+};
+
+static const uint16_t ud_itab__34[] = {
+  /*  0 */           0,   GROUP(35),
+};
+
+static const uint16_t ud_itab__33[] = {
+  /*  0 */   GROUP(34),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__38[] = {
+  /*  0 */           0,          31,           0,
+};
+
+static const uint16_t ud_itab__37[] = {
+  /*  0 */           0,   GROUP(38),
+};
+
+static const uint16_t ud_itab__36[] = {
+  /*  0 */   GROUP(37),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__41[] = {
+  /*  0 */           0,          32,           0,
+};
+
+static const uint16_t ud_itab__40[] = {
+  /*  0 */           0,   GROUP(41),
+};
+
+static const uint16_t ud_itab__39[] = {
+  /*  0 */   GROUP(40),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__29[] = {
+  /*  0 */           0,   GROUP(30),   GROUP(33),   GROUP(36),
+  /*  4 */   GROUP(39),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__44[] = {
+  /*  0 */           0,          33,
+};
+
+static const uint16_t ud_itab__43[] = {
+  /*  0 */   GROUP(44),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__46[] = {
+  /*  0 */           0,          34,
+};
+
+static const uint16_t ud_itab__45[] = {
+  /*  0 */   GROUP(46),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__42[] = {
+  /*  0 */   GROUP(43),   GROUP(45),           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__49[] = {
+  /*  0 */           0,          35,
+};
+
+static const uint16_t ud_itab__48[] = {
+  /*  0 */   GROUP(49),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__51[] = {
+  /*  0 */           0,          36,
+};
+
+static const uint16_t ud_itab__50[] = {
+  /*  0 */   GROUP(51),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__47[] = {
+  /*  0 */   GROUP(48),   GROUP(50),           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__55[] = {
+  /*  0 */          37,           0,           0,
+};
+
+static const uint16_t ud_itab__54[] = {
+  /*  0 */           0,   GROUP(55),
+};
+
+static const uint16_t ud_itab__53[] = {
+  /*  0 */   GROUP(54),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__58[] = {
+  /*  0 */          38,           0,           0,
+};
+
+static const uint16_t ud_itab__57[] = {
+  /*  0 */           0,   GROUP(58),
+};
+
+static const uint16_t ud_itab__56[] = {
+  /*  0 */   GROUP(57),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__61[] = {
+  /*  0 */          39,           0,           0,
+};
+
+static const uint16_t ud_itab__60[] = {
+  /*  0 */           0,   GROUP(61),
+};
+
+static const uint16_t ud_itab__59[] = {
+  /*  0 */   GROUP(60),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__64[] = {
+  /*  0 */          40,           0,           0,
+};
+
+static const uint16_t ud_itab__63[] = {
+  /*  0 */           0,   GROUP(64),
+};
+
+static const uint16_t ud_itab__62[] = {
+  /*  0 */   GROUP(63),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__67[] = {
+  /*  0 */          41,           0,           0,
+};
+
+static const uint16_t ud_itab__66[] = {
+  /*  0 */           0,   GROUP(67),
+};
+
+static const uint16_t ud_itab__65[] = {
+  /*  0 */   GROUP(66),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__70[] = {
+  /*  0 */          42,           0,           0,
+};
+
+static const uint16_t ud_itab__69[] = {
+  /*  0 */           0,   GROUP(70),
+};
+
+static const uint16_t ud_itab__68[] = {
+  /*  0 */   GROUP(69),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__73[] = {
+  /*  0 */          43,           0,           0,
+};
+
+static const uint16_t ud_itab__72[] = {
+  /*  0 */           0,   GROUP(73),
+};
+
+static const uint16_t ud_itab__71[] = {
+  /*  0 */   GROUP(72),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__76[] = {
+  /*  0 */          44,           0,           0,
+};
+
+static const uint16_t ud_itab__75[] = {
+  /*  0 */           0,   GROUP(76),
+};
+
+static const uint16_t ud_itab__74[] = {
+  /*  0 */   GROUP(75),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__52[] = {
+  /*  0 */   GROUP(53),   GROUP(56),   GROUP(59),   GROUP(62),
+  /*  4 */   GROUP(65),   GROUP(68),   GROUP(71),   GROUP(74),
+};
+
+static const uint16_t ud_itab__78[] = {
+  /*  0 */           0,          45,
+};
+
+static const uint16_t ud_itab__77[] = {
+  /*  0 */   GROUP(78),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__80[] = {
+  /*  0 */           0,          46,
+};
+
+static const uint16_t ud_itab__79[] = {
+  /*  0 */   GROUP(80),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__83[] = {
+  /*  0 */           0,          47,
+};
+
+static const uint16_t ud_itab__82[] = {
+  /*  0 */   GROUP(83),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__86[] = {
+  /*  0 */          48,           0,           0,
+};
+
+static const uint16_t ud_itab__85[] = {
+  /*  0 */           0,   GROUP(86),
+};
+
+static const uint16_t ud_itab__84[] = {
+  /*  0 */   GROUP(85),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__81[] = {
+  /*  0 */   GROUP(82),   GROUP(84),           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__28[] = {
+  /*  0 */   GROUP(29),   GROUP(42),   GROUP(47),   GROUP(52),
+  /*  4 */   GROUP(77),           0,   GROUP(79),   GROUP(81),
+};
+
+static const uint16_t ud_itab__12[] = {
+  /*  0 */   GROUP(13),   GROUP(28),
+};
+
+static const uint16_t ud_itab__87[] = {
+  /*  0 */          49,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__88[] = {
+  /*  0 */          50,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__89[] = {
+  /*  0 */          51,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__90[] = {
+  /*  0 */          52,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__91[] = {
+  /*  0 */          53,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__92[] = {
+  /*  0 */          54,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__93[] = {
+  /*  0 */          55,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__94[] = {
+  /*  0 */          56,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__96[] = {
+  /*  0 */          57,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__97[] = {
+  /*  0 */          58,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__98[] = {
+  /*  0 */          59,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__99[] = {
+  /*  0 */          60,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__100[] = {
+  /*  0 */          61,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__101[] = {
+  /*  0 */          62,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__102[] = {
+  /*  0 */          63,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__103[] = {
+  /*  0 */          64,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__95[] = {
+  /*  0 */   GROUP(96),   GROUP(97),   GROUP(98),   GROUP(99),
+  /*  4 */  GROUP(100),  GROUP(101),  GROUP(102),  GROUP(103),
+};
+
+static const uint16_t ud_itab__104[] = {
+  /*  0 */          65,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__105[] = {
+  /*  0 */           0,           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+  /*  8 */           0,           0,           0,           0,
+  /*  c */          66,          67,           0,           0,
+  /* 10 */           0,           0,           0,           0,
+  /* 14 */           0,           0,           0,           0,
+  /* 18 */           0,           0,           0,           0,
+  /* 1c */          68,          69,           0,           0,
+  /* 20 */           0,           0,           0,           0,
+  /* 24 */           0,           0,           0,           0,
+  /* 28 */           0,           0,           0,           0,
+  /* 2c */           0,           0,           0,           0,
+  /* 30 */           0,           0,           0,           0,
+  /* 34 */           0,           0,           0,           0,
+  /* 38 */           0,           0,           0,           0,
+  /* 3c */           0,           0,           0,           0,
+  /* 40 */           0,           0,           0,           0,
+  /* 44 */           0,           0,           0,           0,
+  /* 48 */           0,           0,           0,           0,
+  /* 4c */           0,           0,           0,           0,
+  /* 50 */           0,           0,           0,           0,
+  /* 54 */           0,           0,           0,           0,
+  /* 58 */           0,           0,           0,           0,
+  /* 5c */           0,           0,           0,           0,
+  /* 60 */           0,           0,           0,           0,
+  /* 64 */           0,           0,           0,           0,
+  /* 68 */           0,           0,           0,           0,
+  /* 6c */           0,           0,           0,           0,
+  /* 70 */           0,           0,           0,           0,
+  /* 74 */           0,           0,           0,           0,
+  /* 78 */           0,           0,           0,           0,
+  /* 7c */           0,           0,           0,           0,
+  /* 80 */           0,           0,           0,           0,
+  /* 84 */           0,           0,           0,           0,
+  /* 88 */           0,           0,          70,           0,
+  /* 8c */           0,           0,          71,           0,
+  /* 90 */          72,           0,           0,           0,
+  /* 94 */          73,           0,          74,          75,
+  /* 98 */           0,           0,          76,           0,
+  /* 9c */           0,           0,          77,           0,
+  /* a0 */          78,           0,           0,           0,
+  /* a4 */          79,           0,          80,          81,
+  /* a8 */           0,           0,          82,           0,
+  /* ac */           0,           0,          83,           0,
+  /* b0 */          84,           0,           0,           0,
+  /* b4 */          85,           0,          86,          87,
+  /* b8 */           0,           0,           0,          88,
+  /* bc */           0,           0,           0,          89,
+  /* c0 */           0,           0,           0,           0,
+  /* c4 */           0,           0,           0,           0,
+  /* c8 */           0,           0,           0,           0,
+  /* cc */           0,           0,           0,           0,
+  /* d0 */           0,           0,           0,           0,
+  /* d4 */           0,           0,           0,           0,
+  /* d8 */           0,           0,           0,           0,
+  /* dc */           0,           0,           0,           0,
+  /* e0 */           0,           0,           0,           0,
+  /* e4 */           0,           0,           0,           0,
+  /* e8 */           0,           0,           0,           0,
+  /* ec */           0,           0,           0,           0,
+  /* f0 */           0,           0,           0,           0,
+  /* f4 */           0,           0,           0,           0,
+  /* f8 */           0,           0,           0,           0,
+  /* fc */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__106[] = {
+  /*  0 */          90,          91,          92,          93,
+};
+
+static const uint16_t ud_itab__107[] = {
+  /*  0 */          94,          95,          96,          97,
+};
+
+static const uint16_t ud_itab__110[] = {
+  /*  0 */          98,           0,
+};
+
+static const uint16_t ud_itab__111[] = {
+  /*  0 */          99,           0,
+};
+
+static const uint16_t ud_itab__112[] = {
+  /*  0 */         100,           0,
+};
+
+static const uint16_t ud_itab__113[] = {
+  /*  0 */         101,           0,
+};
+
+static const uint16_t ud_itab__109[] = {
+  /*  0 */  GROUP(110),  GROUP(111),  GROUP(112),  GROUP(113),
+};
+
+static const uint16_t ud_itab__115[] = {
+  /*  0 */           0,         102,
+};
+
+static const uint16_t ud_itab__116[] = {
+  /*  0 */           0,         103,
+};
+
+static const uint16_t ud_itab__117[] = {
+  /*  0 */           0,         104,
+};
+
+static const uint16_t ud_itab__114[] = {
+  /*  0 */  GROUP(115),  GROUP(116),  GROUP(117),           0,
+};
+
+static const uint16_t ud_itab__108[] = {
+  /*  0 */  GROUP(109),  GROUP(114),
+};
+
+static const uint16_t ud_itab__118[] = {
+  /*  0 */         105,           0,           0,         106,
+};
+
+static const uint16_t ud_itab__119[] = {
+  /*  0 */         107,           0,           0,         108,
+};
+
+static const uint16_t ud_itab__120[] = {
+  /*  0 */         109,           0,           0,         110,
+};
+
+static const uint16_t ud_itab__123[] = {
+  /*  0 */         111,           0,
+};
+
+static const uint16_t ud_itab__124[] = {
+  /*  0 */         112,           0,
+};
+
+static const uint16_t ud_itab__125[] = {
+  /*  0 */         113,           0,
+};
+
+static const uint16_t ud_itab__122[] = {
+  /*  0 */  GROUP(123),           0,  GROUP(124),  GROUP(125),
+};
+
+static const uint16_t ud_itab__127[] = {
+  /*  0 */           0,         114,
+};
+
+static const uint16_t ud_itab__128[] = {
+  /*  0 */           0,         115,
+};
+
+static const uint16_t ud_itab__126[] = {
+  /*  0 */  GROUP(127),           0,  GROUP(128),           0,
+};
+
+static const uint16_t ud_itab__121[] = {
+  /*  0 */  GROUP(122),  GROUP(126),
+};
+
+static const uint16_t ud_itab__129[] = {
+  /*  0 */         116,           0,           0,         117,
+};
+
+static const uint16_t ud_itab__131[] = {
+  /*  0 */         118,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__132[] = {
+  /*  0 */         119,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__133[] = {
+  /*  0 */         120,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__134[] = {
+  /*  0 */         121,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__130[] = {
+  /*  0 */  GROUP(131),  GROUP(132),  GROUP(133),  GROUP(134),
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__135[] = {
+  /*  0 */         122,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__136[] = {
+  /*  0 */         123,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__137[] = {
+  /*  0 */         124,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__138[] = {
+  /*  0 */         125,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__139[] = {
+  /*  0 */         126,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__140[] = {
+  /*  0 */         127,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__141[] = {
+  /*  0 */         128,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__142[] = {
+  /*  0 */         129,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__143[] = {
+  /*  0 */         130,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__144[] = {
+  /*  0 */         131,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__145[] = {
+  /*  0 */         132,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__146[] = {
+  /*  0 */         133,           0,           0,         134,
+};
+
+static const uint16_t ud_itab__147[] = {
+  /*  0 */         135,           0,           0,         136,
+};
+
+static const uint16_t ud_itab__148[] = {
+  /*  0 */         137,         138,         139,         140,
+};
+
+static const uint16_t ud_itab__149[] = {
+  /*  0 */         141,           0,           0,         142,
+};
+
+static const uint16_t ud_itab__150[] = {
+  /*  0 */         143,         144,         145,         146,
+};
+
+static const uint16_t ud_itab__151[] = {
+  /*  0 */         147,         148,         149,         150,
+};
+
+static const uint16_t ud_itab__152[] = {
+  /*  0 */         151,           0,           0,         152,
+};
+
+static const uint16_t ud_itab__153[] = {
+  /*  0 */         153,           0,           0,         154,
+};
+
+static const uint16_t ud_itab__154[] = {
+  /*  0 */         155,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__155[] = {
+  /*  0 */         156,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__156[] = {
+  /*  0 */         157,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__157[] = {
+  /*  0 */         158,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__160[] = {
+  /*  0 */           0,         160,           0,
+};
+
+static const uint16_t ud_itab__159[] = {
+  /*  0 */         159,  GROUP(160),
+};
+
+static const uint16_t ud_itab__158[] = {
+  /*  0 */  GROUP(159),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__163[] = {
+  /*  0 */           0,         162,           0,
+};
+
+static const uint16_t ud_itab__162[] = {
+  /*  0 */         161,  GROUP(163),
+};
+
+static const uint16_t ud_itab__161[] = {
+  /*  0 */  GROUP(162),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__164[] = {
+  /*  0 */         163,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__166[] = {
+  /*  0 */         164,           0,           0,         165,
+};
+
+static const uint16_t ud_itab__167[] = {
+  /*  0 */         166,           0,           0,         167,
+};
+
+static const uint16_t ud_itab__168[] = {
+  /*  0 */         168,           0,           0,         169,
+};
+
+static const uint16_t ud_itab__169[] = {
+  /*  0 */         170,           0,           0,         171,
+};
+
+static const uint16_t ud_itab__170[] = {
+  /*  0 */         172,           0,           0,         173,
+};
+
+static const uint16_t ud_itab__171[] = {
+  /*  0 */         174,           0,           0,         175,
+};
+
+static const uint16_t ud_itab__172[] = {
+  /*  0 */         176,           0,           0,         177,
+};
+
+static const uint16_t ud_itab__173[] = {
+  /*  0 */         178,           0,           0,         179,
+};
+
+static const uint16_t ud_itab__174[] = {
+  /*  0 */         180,           0,           0,         181,
+};
+
+static const uint16_t ud_itab__175[] = {
+  /*  0 */         182,           0,           0,         183,
+};
+
+static const uint16_t ud_itab__176[] = {
+  /*  0 */         184,           0,           0,         185,
+};
+
+static const uint16_t ud_itab__177[] = {
+  /*  0 */         186,           0,           0,         187,
+};
+
+static const uint16_t ud_itab__178[] = {
+  /*  0 */           0,           0,           0,         188,
+};
+
+static const uint16_t ud_itab__179[] = {
+  /*  0 */           0,           0,           0,         189,
+};
+
+static const uint16_t ud_itab__180[] = {
+  /*  0 */           0,           0,           0,         190,
+};
+
+static const uint16_t ud_itab__181[] = {
+  /*  0 */           0,           0,           0,         191,
+};
+
+static const uint16_t ud_itab__182[] = {
+  /*  0 */         192,           0,           0,         193,
+};
+
+static const uint16_t ud_itab__183[] = {
+  /*  0 */         194,           0,           0,         195,
+};
+
+static const uint16_t ud_itab__184[] = {
+  /*  0 */         196,           0,           0,         197,
+};
+
+static const uint16_t ud_itab__185[] = {
+  /*  0 */           0,           0,           0,         198,
+};
+
+static const uint16_t ud_itab__186[] = {
+  /*  0 */           0,           0,           0,         199,
+};
+
+static const uint16_t ud_itab__187[] = {
+  /*  0 */           0,           0,           0,         200,
+};
+
+static const uint16_t ud_itab__188[] = {
+  /*  0 */           0,           0,           0,         201,
+};
+
+static const uint16_t ud_itab__189[] = {
+  /*  0 */           0,           0,           0,         202,
+};
+
+static const uint16_t ud_itab__190[] = {
+  /*  0 */           0,           0,           0,         203,
+};
+
+static const uint16_t ud_itab__191[] = {
+  /*  0 */           0,           0,           0,         204,
+};
+
+static const uint16_t ud_itab__192[] = {
+  /*  0 */           0,           0,           0,         205,
+};
+
+static const uint16_t ud_itab__193[] = {
+  /*  0 */           0,           0,           0,         206,
+};
+
+static const uint16_t ud_itab__194[] = {
+  /*  0 */           0,           0,           0,         207,
+};
+
+static const uint16_t ud_itab__195[] = {
+  /*  0 */           0,           0,           0,         208,
+};
+
+static const uint16_t ud_itab__196[] = {
+  /*  0 */           0,           0,           0,         209,
+};
+
+static const uint16_t ud_itab__197[] = {
+  /*  0 */           0,           0,           0,         210,
+};
+
+static const uint16_t ud_itab__198[] = {
+  /*  0 */           0,           0,           0,         211,
+};
+
+static const uint16_t ud_itab__199[] = {
+  /*  0 */           0,           0,           0,         212,
+};
+
+static const uint16_t ud_itab__200[] = {
+  /*  0 */           0,           0,           0,         213,
+};
+
+static const uint16_t ud_itab__201[] = {
+  /*  0 */           0,           0,           0,         214,
+};
+
+static const uint16_t ud_itab__202[] = {
+  /*  0 */           0,           0,           0,         215,
+};
+
+static const uint16_t ud_itab__203[] = {
+  /*  0 */           0,           0,           0,         216,
+};
+
+static const uint16_t ud_itab__204[] = {
+  /*  0 */           0,           0,           0,         217,
+};
+
+static const uint16_t ud_itab__205[] = {
+  /*  0 */           0,           0,           0,         218,
+};
+
+static const uint16_t ud_itab__206[] = {
+  /*  0 */           0,           0,           0,         219,
+};
+
+static const uint16_t ud_itab__207[] = {
+  /*  0 */           0,           0,           0,         220,
+};
+
+static const uint16_t ud_itab__208[] = {
+  /*  0 */           0,           0,           0,         221,
+};
+
+static const uint16_t ud_itab__209[] = {
+  /*  0 */           0,           0,           0,         222,
+};
+
+static const uint16_t ud_itab__210[] = {
+  /*  0 */           0,           0,           0,         223,
+};
+
+static const uint16_t ud_itab__211[] = {
+  /*  0 */           0,           0,           0,         224,
+};
+
+static const uint16_t ud_itab__214[] = {
+  /*  0 */           0,         225,           0,
+};
+
+static const uint16_t ud_itab__213[] = {
+  /*  0 */           0,  GROUP(214),
+};
+
+static const uint16_t ud_itab__212[] = {
+  /*  0 */           0,           0,           0,  GROUP(213),
+};
+
+static const uint16_t ud_itab__217[] = {
+  /*  0 */           0,         226,           0,
+};
+
+static const uint16_t ud_itab__216[] = {
+  /*  0 */           0,  GROUP(217),
+};
+
+static const uint16_t ud_itab__215[] = {
+  /*  0 */           0,           0,           0,  GROUP(216),
+};
+
+static const uint16_t ud_itab__218[] = {
+  /*  0 */           0,           0,           0,         227,
+};
+
+static const uint16_t ud_itab__219[] = {
+  /*  0 */           0,           0,           0,         228,
+};
+
+static const uint16_t ud_itab__220[] = {
+  /*  0 */           0,           0,           0,         229,
+};
+
+static const uint16_t ud_itab__221[] = {
+  /*  0 */           0,           0,           0,         230,
+};
+
+static const uint16_t ud_itab__222[] = {
+  /*  0 */           0,           0,           0,         231,
+};
+
+static const uint16_t ud_itab__223[] = {
+  /*  0 */         232,         233,           0,           0,
+};
+
+static const uint16_t ud_itab__224[] = {
+  /*  0 */         234,         235,           0,           0,
+};
+
+static const uint16_t ud_itab__165[] = {
+  /*  0 */  GROUP(166),  GROUP(167),  GROUP(168),  GROUP(169),
+  /*  4 */  GROUP(170),  GROUP(171),  GROUP(172),  GROUP(173),
+  /*  8 */  GROUP(174),  GROUP(175),  GROUP(176),  GROUP(177),
+  /*  c */           0,           0,           0,           0,
+  /* 10 */  GROUP(178),           0,           0,           0,
+  /* 14 */  GROUP(179),  GROUP(180),           0,  GROUP(181),
+  /* 18 */           0,           0,           0,           0,
+  /* 1c */  GROUP(182),  GROUP(183),  GROUP(184),           0,
+  /* 20 */  GROUP(185),  GROUP(186),  GROUP(187),  GROUP(188),
+  /* 24 */  GROUP(189),  GROUP(190),           0,           0,
+  /* 28 */  GROUP(191),  GROUP(192),  GROUP(193),  GROUP(194),
+  /* 2c */           0,           0,           0,           0,
+  /* 30 */  GROUP(195),  GROUP(196),  GROUP(197),  GROUP(198),
+  /* 34 */  GROUP(199),  GROUP(200),           0,  GROUP(201),
+  /* 38 */  GROUP(202),  GROUP(203),  GROUP(204),  GROUP(205),
+  /* 3c */  GROUP(206),  GROUP(207),  GROUP(208),  GROUP(209),
+  /* 40 */  GROUP(210),  GROUP(211),           0,           0,
+  /* 44 */           0,           0,           0,           0,
+  /* 48 */           0,           0,           0,           0,
+  /* 4c */           0,           0,           0,           0,
+  /* 50 */           0,           0,           0,           0,
+  /* 54 */           0,           0,           0,           0,
+  /* 58 */           0,           0,           0,           0,
+  /* 5c */           0,           0,           0,           0,
+  /* 60 */           0,           0,           0,           0,
+  /* 64 */           0,           0,           0,           0,
+  /* 68 */           0,           0,           0,           0,
+  /* 6c */           0,           0,           0,           0,
+  /* 70 */           0,           0,           0,           0,
+  /* 74 */           0,           0,           0,           0,
+  /* 78 */           0,           0,           0,           0,
+  /* 7c */           0,           0,           0,           0,
+  /* 80 */  GROUP(212),  GROUP(215),           0,           0,
+  /* 84 */           0,           0,           0,           0,
+  /* 88 */           0,           0,           0,           0,
+  /* 8c */           0,           0,           0,           0,
+  /* 90 */           0,           0,           0,           0,
+  /* 94 */           0,           0,           0,           0,
+  /* 98 */           0,           0,           0,           0,
+  /* 9c */           0,           0,           0,           0,
+  /* a0 */           0,           0,           0,           0,
+  /* a4 */           0,           0,           0,           0,
+  /* a8 */           0,           0,           0,           0,
+  /* ac */           0,           0,           0,           0,
+  /* b0 */           0,           0,           0,           0,
+  /* b4 */           0,           0,           0,           0,
+  /* b8 */           0,           0,           0,           0,
+  /* bc */           0,           0,           0,           0,
+  /* c0 */           0,           0,           0,           0,
+  /* c4 */           0,           0,           0,           0,
+  /* c8 */           0,           0,           0,           0,
+  /* cc */           0,           0,           0,           0,
+  /* d0 */           0,           0,           0,           0,
+  /* d4 */           0,           0,           0,           0,
+  /* d8 */           0,           0,           0,  GROUP(218),
+  /* dc */  GROUP(219),  GROUP(220),  GROUP(221),  GROUP(222),
+  /* e0 */           0,           0,           0,           0,
+  /* e4 */           0,           0,           0,           0,
+  /* e8 */           0,           0,           0,           0,
+  /* ec */           0,           0,           0,           0,
+  /* f0 */  GROUP(223),  GROUP(224),           0,           0,
+  /* f4 */           0,           0,           0,           0,
+  /* f8 */           0,           0,           0,           0,
+  /* fc */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__226[] = {
+  /*  0 */           0,           0,           0,         236,
+};
+
+static const uint16_t ud_itab__227[] = {
+  /*  0 */           0,           0,           0,         237,
+};
+
+static const uint16_t ud_itab__228[] = {
+  /*  0 */           0,           0,           0,         238,
+};
+
+static const uint16_t ud_itab__229[] = {
+  /*  0 */           0,           0,           0,         239,
+};
+
+static const uint16_t ud_itab__230[] = {
+  /*  0 */           0,           0,           0,         240,
+};
+
+static const uint16_t ud_itab__231[] = {
+  /*  0 */           0,           0,           0,         241,
+};
+
+static const uint16_t ud_itab__232[] = {
+  /*  0 */           0,           0,           0,         242,
+};
+
+static const uint16_t ud_itab__233[] = {
+  /*  0 */         243,           0,           0,         244,
+};
+
+static const uint16_t ud_itab__234[] = {
+  /*  0 */           0,           0,           0,         245,
+};
+
+static const uint16_t ud_itab__235[] = {
+  /*  0 */           0,           0,           0,         246,
+};
+
+static const uint16_t ud_itab__237[] = {
+  /*  0 */         247,         248,         249,
+};
+
+static const uint16_t ud_itab__236[] = {
+  /*  0 */           0,           0,           0,  GROUP(237),
+};
+
+static const uint16_t ud_itab__238[] = {
+  /*  0 */           0,           0,           0,         250,
+};
+
+static const uint16_t ud_itab__239[] = {
+  /*  0 */           0,           0,           0,         251,
+};
+
+static const uint16_t ud_itab__240[] = {
+  /*  0 */           0,           0,           0,         252,
+};
+
+static const uint16_t ud_itab__242[] = {
+  /*  0 */         253,         254,         255,
+};
+
+static const uint16_t ud_itab__241[] = {
+  /*  0 */           0,           0,           0,  GROUP(242),
+};
+
+static const uint16_t ud_itab__243[] = {
+  /*  0 */           0,           0,           0,         256,
+};
+
+static const uint16_t ud_itab__244[] = {
+  /*  0 */           0,           0,           0,         257,
+};
+
+static const uint16_t ud_itab__245[] = {
+  /*  0 */           0,           0,           0,         258,
+};
+
+static const uint16_t ud_itab__246[] = {
+  /*  0 */           0,           0,           0,         259,
+};
+
+static const uint16_t ud_itab__247[] = {
+  /*  0 */           0,           0,           0,         260,
+};
+
+static const uint16_t ud_itab__248[] = {
+  /*  0 */           0,           0,           0,         261,
+};
+
+static const uint16_t ud_itab__249[] = {
+  /*  0 */           0,           0,           0,         262,
+};
+
+static const uint16_t ud_itab__250[] = {
+  /*  0 */           0,           0,           0,         263,
+};
+
+static const uint16_t ud_itab__251[] = {
+  /*  0 */           0,           0,           0,         264,
+};
+
+static const uint16_t ud_itab__225[] = {
+  /*  0 */           0,           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+  /*  8 */  GROUP(226),  GROUP(227),  GROUP(228),  GROUP(229),
+  /*  c */  GROUP(230),  GROUP(231),  GROUP(232),  GROUP(233),
+  /* 10 */           0,           0,           0,           0,
+  /* 14 */  GROUP(234),  GROUP(235),  GROUP(236),  GROUP(238),
+  /* 18 */           0,           0,           0,           0,
+  /* 1c */           0,           0,           0,           0,
+  /* 20 */  GROUP(239),  GROUP(240),  GROUP(241),           0,
+  /* 24 */           0,           0,           0,           0,
+  /* 28 */           0,           0,           0,           0,
+  /* 2c */           0,           0,           0,           0,
+  /* 30 */           0,           0,           0,           0,
+  /* 34 */           0,           0,           0,           0,
+  /* 38 */           0,           0,           0,           0,
+  /* 3c */           0,           0,           0,           0,
+  /* 40 */  GROUP(243),  GROUP(244),  GROUP(245),           0,
+  /* 44 */  GROUP(246),           0,           0,           0,
+  /* 48 */           0,           0,           0,           0,
+  /* 4c */           0,           0,           0,           0,
+  /* 50 */           0,           0,           0,           0,
+  /* 54 */           0,           0,           0,           0,
+  /* 58 */           0,           0,           0,           0,
+  /* 5c */           0,           0,           0,           0,
+  /* 60 */  GROUP(247),  GROUP(248),  GROUP(249),  GROUP(250),
+  /* 64 */           0,           0,           0,           0,
+  /* 68 */           0,           0,           0,           0,
+  /* 6c */           0,           0,           0,           0,
+  /* 70 */           0,           0,           0,           0,
+  /* 74 */           0,           0,           0,           0,
+  /* 78 */           0,           0,           0,           0,
+  /* 7c */           0,           0,           0,           0,
+  /* 80 */           0,           0,           0,           0,
+  /* 84 */           0,           0,           0,           0,
+  /* 88 */           0,           0,           0,           0,
+  /* 8c */           0,           0,           0,           0,
+  /* 90 */           0,           0,           0,           0,
+  /* 94 */           0,           0,           0,           0,
+  /* 98 */           0,           0,           0,           0,
+  /* 9c */           0,           0,           0,           0,
+  /* a0 */           0,           0,           0,           0,
+  /* a4 */           0,           0,           0,           0,
+  /* a8 */           0,           0,           0,           0,
+  /* ac */           0,           0,           0,           0,
+  /* b0 */           0,           0,           0,           0,
+  /* b4 */           0,           0,           0,           0,
+  /* b8 */           0,           0,           0,           0,
+  /* bc */           0,           0,           0,           0,
+  /* c0 */           0,           0,           0,           0,
+  /* c4 */           0,           0,           0,           0,
+  /* c8 */           0,           0,           0,           0,
+  /* cc */           0,           0,           0,           0,
+  /* d0 */           0,           0,           0,           0,
+  /* d4 */           0,           0,           0,           0,
+  /* d8 */           0,           0,           0,           0,
+  /* dc */           0,           0,           0,  GROUP(251),
+  /* e0 */           0,           0,           0,           0,
+  /* e4 */           0,           0,           0,           0,
+  /* e8 */           0,           0,           0,           0,
+  /* ec */           0,           0,           0,           0,
+  /* f0 */           0,           0,           0,           0,
+  /* f4 */           0,           0,           0,           0,
+  /* f8 */           0,           0,           0,           0,
+  /* fc */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__252[] = {
+  /*  0 */         265,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__253[] = {
+  /*  0 */         266,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__254[] = {
+  /*  0 */         267,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__255[] = {
+  /*  0 */         268,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__256[] = {
+  /*  0 */         269,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__257[] = {
+  /*  0 */         270,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__258[] = {
+  /*  0 */         271,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__259[] = {
+  /*  0 */         272,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__260[] = {
+  /*  0 */         273,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__261[] = {
+  /*  0 */         274,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__262[] = {
+  /*  0 */         275,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__263[] = {
+  /*  0 */         276,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__264[] = {
+  /*  0 */         277,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__265[] = {
+  /*  0 */         278,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__266[] = {
+  /*  0 */         279,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__267[] = {
+  /*  0 */         280,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__268[] = {
+  /*  0 */         281,           0,           0,         282,
+};
+
+static const uint16_t ud_itab__269[] = {
+  /*  0 */         283,         284,         285,         286,
+};
+
+static const uint16_t ud_itab__270[] = {
+  /*  0 */         287,           0,         288,           0,
+};
+
+static const uint16_t ud_itab__271[] = {
+  /*  0 */         289,           0,         290,           0,
+};
+
+static const uint16_t ud_itab__272[] = {
+  /*  0 */         291,           0,           0,         292,
+};
+
+static const uint16_t ud_itab__273[] = {
+  /*  0 */         293,           0,           0,         294,
+};
+
+static const uint16_t ud_itab__274[] = {
+  /*  0 */         295,           0,           0,         296,
+};
+
+static const uint16_t ud_itab__275[] = {
+  /*  0 */         297,           0,           0,         298,
+};
+
+static const uint16_t ud_itab__276[] = {
+  /*  0 */         299,         300,         301,         302,
+};
+
+static const uint16_t ud_itab__277[] = {
+  /*  0 */         303,         304,         305,         306,
+};
+
+static const uint16_t ud_itab__278[] = {
+  /*  0 */         307,         308,         309,         310,
+};
+
+static const uint16_t ud_itab__279[] = {
+  /*  0 */         311,           0,         312,         313,
+};
+
+static const uint16_t ud_itab__280[] = {
+  /*  0 */         314,         315,         316,         317,
+};
+
+static const uint16_t ud_itab__281[] = {
+  /*  0 */         318,         319,         320,         321,
+};
+
+static const uint16_t ud_itab__282[] = {
+  /*  0 */         322,         323,         324,         325,
+};
+
+static const uint16_t ud_itab__283[] = {
+  /*  0 */         326,         327,         328,         329,
+};
+
+static const uint16_t ud_itab__284[] = {
+  /*  0 */         330,           0,           0,         331,
+};
+
+static const uint16_t ud_itab__285[] = {
+  /*  0 */         332,           0,           0,         333,
+};
+
+static const uint16_t ud_itab__286[] = {
+  /*  0 */         334,           0,           0,         335,
+};
+
+static const uint16_t ud_itab__287[] = {
+  /*  0 */         336,           0,           0,         337,
+};
+
+static const uint16_t ud_itab__288[] = {
+  /*  0 */         338,           0,           0,         339,
+};
+
+static const uint16_t ud_itab__289[] = {
+  /*  0 */         340,           0,           0,         341,
+};
+
+static const uint16_t ud_itab__290[] = {
+  /*  0 */         342,           0,           0,         343,
+};
+
+static const uint16_t ud_itab__291[] = {
+  /*  0 */         344,           0,           0,         345,
+};
+
+static const uint16_t ud_itab__292[] = {
+  /*  0 */         346,           0,           0,         347,
+};
+
+static const uint16_t ud_itab__293[] = {
+  /*  0 */         348,           0,           0,         349,
+};
+
+static const uint16_t ud_itab__294[] = {
+  /*  0 */         350,           0,           0,         351,
+};
+
+static const uint16_t ud_itab__295[] = {
+  /*  0 */         352,           0,           0,         353,
+};
+
+static const uint16_t ud_itab__296[] = {
+  /*  0 */           0,           0,           0,         354,
+};
+
+static const uint16_t ud_itab__297[] = {
+  /*  0 */           0,           0,           0,         355,
+};
+
+static const uint16_t ud_itab__298[] = {
+  /*  0 */         356,           0,           0,         357,
+};
+
+static const uint16_t ud_itab__299[] = {
+  /*  0 */         358,           0,         359,         360,
+};
+
+static const uint16_t ud_itab__300[] = {
+  /*  0 */         361,         362,         363,         364,
+};
+
+static const uint16_t ud_itab__302[] = {
+  /*  0 */         365,           0,           0,         366,
+};
+
+static const uint16_t ud_itab__303[] = {
+  /*  0 */         367,           0,           0,         368,
+};
+
+static const uint16_t ud_itab__304[] = {
+  /*  0 */         369,           0,           0,         370,
+};
+
+static const uint16_t ud_itab__301[] = {
+  /*  0 */           0,           0,  GROUP(302),           0,
+  /*  4 */  GROUP(303),           0,  GROUP(304),           0,
+};
+
+static const uint16_t ud_itab__306[] = {
+  /*  0 */         371,           0,           0,         372,
+};
+
+static const uint16_t ud_itab__307[] = {
+  /*  0 */         373,           0,           0,         374,
+};
+
+static const uint16_t ud_itab__308[] = {
+  /*  0 */         375,           0,           0,         376,
+};
+
+static const uint16_t ud_itab__305[] = {
+  /*  0 */           0,           0,  GROUP(306),           0,
+  /*  4 */  GROUP(307),           0,  GROUP(308),           0,
+};
+
+static const uint16_t ud_itab__310[] = {
+  /*  0 */         377,           0,           0,         378,
+};
+
+static const uint16_t ud_itab__311[] = {
+  /*  0 */           0,           0,           0,         379,
+};
+
+static const uint16_t ud_itab__312[] = {
+  /*  0 */         380,           0,           0,         381,
+};
+
+static const uint16_t ud_itab__313[] = {
+  /*  0 */           0,           0,           0,         382,
+};
+
+static const uint16_t ud_itab__309[] = {
+  /*  0 */           0,           0,  GROUP(310),  GROUP(311),
+  /*  4 */           0,           0,  GROUP(312),  GROUP(313),
+};
+
+static const uint16_t ud_itab__314[] = {
+  /*  0 */         383,           0,           0,         384,
+};
+
+static const uint16_t ud_itab__315[] = {
+  /*  0 */         385,           0,           0,         386,
+};
+
+static const uint16_t ud_itab__316[] = {
+  /*  0 */         387,           0,           0,         388,
+};
+
+static const uint16_t ud_itab__317[] = {
+  /*  0 */         389,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__319[] = {
+  /*  0 */           0,         390,           0,
+};
+
+static const uint16_t ud_itab__318[] = {
+  /*  0 */  GROUP(319),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__321[] = {
+  /*  0 */           0,         391,           0,
+};
+
+static const uint16_t ud_itab__320[] = {
+  /*  0 */  GROUP(321),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__322[] = {
+  /*  0 */           0,         392,           0,         393,
+};
+
+static const uint16_t ud_itab__323[] = {
+  /*  0 */           0,         394,           0,         395,
+};
+
+static const uint16_t ud_itab__324[] = {
+  /*  0 */         396,           0,         397,         398,
+};
+
+static const uint16_t ud_itab__325[] = {
+  /*  0 */         399,           0,         400,         401,
+};
+
+static const uint16_t ud_itab__326[] = {
+  /*  0 */         402,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__327[] = {
+  /*  0 */         403,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__328[] = {
+  /*  0 */         404,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__329[] = {
+  /*  0 */         405,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__330[] = {
+  /*  0 */         406,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__331[] = {
+  /*  0 */         407,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__332[] = {
+  /*  0 */         408,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__333[] = {
+  /*  0 */         409,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__334[] = {
+  /*  0 */         410,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__335[] = {
+  /*  0 */         411,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__336[] = {
+  /*  0 */         412,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__337[] = {
+  /*  0 */         413,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__338[] = {
+  /*  0 */         414,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__339[] = {
+  /*  0 */         415,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__340[] = {
+  /*  0 */         416,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__341[] = {
+  /*  0 */         417,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__342[] = {
+  /*  0 */         418,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__343[] = {
+  /*  0 */         419,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__344[] = {
+  /*  0 */         420,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__345[] = {
+  /*  0 */         421,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__346[] = {
+  /*  0 */         422,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__347[] = {
+  /*  0 */         423,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__348[] = {
+  /*  0 */         424,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__349[] = {
+  /*  0 */         425,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__350[] = {
+  /*  0 */         426,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__351[] = {
+  /*  0 */         427,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__352[] = {
+  /*  0 */         428,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__353[] = {
+  /*  0 */         429,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__354[] = {
+  /*  0 */         430,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__355[] = {
+  /*  0 */         431,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__356[] = {
+  /*  0 */         432,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__357[] = {
+  /*  0 */         433,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__358[] = {
+  /*  0 */         434,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__359[] = {
+  /*  0 */         435,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__360[] = {
+  /*  0 */         436,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__361[] = {
+  /*  0 */         437,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__362[] = {
+  /*  0 */         438,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__363[] = {
+  /*  0 */         439,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__368[] = {
+  /*  0 */           0,         440,
+};
+
+static const uint16_t ud_itab__367[] = {
+  /*  0 */  GROUP(368),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__366[] = {
+  /*  0 */  GROUP(367),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__371[] = {
+  /*  0 */           0,         441,
+};
+
+static const uint16_t ud_itab__370[] = {
+  /*  0 */  GROUP(371),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__369[] = {
+  /*  0 */  GROUP(370),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__374[] = {
+  /*  0 */           0,         442,
+};
+
+static const uint16_t ud_itab__373[] = {
+  /*  0 */  GROUP(374),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__372[] = {
+  /*  0 */  GROUP(373),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__365[] = {
+  /*  0 */  GROUP(366),  GROUP(369),  GROUP(372),           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__364[] = {
+  /*  0 */           0,  GROUP(365),
+};
+
+static const uint16_t ud_itab__379[] = {
+  /*  0 */           0,         443,
+};
+
+static const uint16_t ud_itab__378[] = {
+  /*  0 */  GROUP(379),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__377[] = {
+  /*  0 */  GROUP(378),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__382[] = {
+  /*  0 */           0,         444,
+};
+
+static const uint16_t ud_itab__381[] = {
+  /*  0 */  GROUP(382),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__380[] = {
+  /*  0 */  GROUP(381),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__385[] = {
+  /*  0 */           0,         445,
+};
+
+static const uint16_t ud_itab__384[] = {
+  /*  0 */  GROUP(385),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__383[] = {
+  /*  0 */  GROUP(384),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__388[] = {
+  /*  0 */           0,         446,
+};
+
+static const uint16_t ud_itab__387[] = {
+  /*  0 */  GROUP(388),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__386[] = {
+  /*  0 */  GROUP(387),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__391[] = {
+  /*  0 */           0,         447,
+};
+
+static const uint16_t ud_itab__390[] = {
+  /*  0 */  GROUP(391),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__389[] = {
+  /*  0 */  GROUP(390),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__394[] = {
+  /*  0 */           0,         448,
+};
+
+static const uint16_t ud_itab__393[] = {
+  /*  0 */  GROUP(394),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__392[] = {
+  /*  0 */  GROUP(393),           0,           0,           0,
+  /*  4 */           0,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__376[] = {
+  /*  0 */  GROUP(377),  GROUP(380),  GROUP(383),  GROUP(386),
+  /*  4 */  GROUP(389),  GROUP(392),           0,           0,
+};
+
+static const uint16_t ud_itab__375[] = {
+  /*  0 */           0,  GROUP(376),
+};
+
+static const uint16_t ud_itab__395[] = {
+  /*  0 */         449,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__396[] = {
+  /*  0 */         450,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__397[] = {
+  /*  0 */         451,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__398[] = {
+  /*  0 */         452,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__399[] = {
+  /*  0 */         453,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__400[] = {
+  /*  0 */         454,           0,           0,           0,
+};
+
+static const uint16_t ud_itab__404[] = {
+  /*  0 */         455,           0,
+};
+
+static const uint16_t ud_itab__403[] = {
+  /*  0 */  GROUP(404),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__406[] = {
+  /*  0 */         456,           0,
+};
+
+static const uint16_t ud_itab__405[] = {
+  /*  0 */  GROUP(406),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__408[] = {
+  /*  0 */         457,           0,
+};
+
+static const uint16_t ud_itab__407[] = {
+  /*  0 */  GROUP(408),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__410[] = {
+  /*  0 */         458,           0,
+};
+
+static const uint16_t ud_itab__409[] = {
+  /*  0 */  GROUP(410),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__412[] = {
+  /*  0 */         459,           0,
+};
+
+static const uint16_t ud_itab__411[] = {
+  /*  0 */  GROUP(412),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__414[] = {
+  /*  0 */         460,           0,
+};
+
+static const uint16_t ud_itab__413[] = {
+  /*  0 */  GROUP(414),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__416[] = {
+  /*  0 */         461,           0,
+};
+
+static const uint16_t ud_itab__415[] = {
+  /*  0 */  GROUP(416),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__402[] = {
+  /*  0 */  GROUP(403),  GROUP(405),  GROUP(407),  GROUP(409),
+  /*  4 */  GROUP(411),  GROUP(413),           0,  GROUP(415),
+};
+
+static const uint16_t ud_itab__420[] = {
+  /*  0 */           0,         462,
+};
+
+static const uint16_t ud_itab__419[] = {
+  /*  0 */  GROUP(420),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__422[] = {
+  /*  0 */           0,         463,
+};
+
+static const uint16_t ud_itab__421[] = {
+  /*  0 */  GROUP(422),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__424[] = {
+  /*  0 */           0,         464,
+};
+
+static const uint16_t ud_itab__423[] = {
+  /*  0 */  GROUP(424),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__426[] = {
+  /*  0 */           0,         465,
+};
+
+static const uint16_t ud_itab__425[] = {
+  /*  0 */  GROUP(426),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__428[] = {
+  /*  0 */           0,         466,
+};
+
+static const uint16_t ud_itab__427[] = {
+  /*  0 */  GROUP(428),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__430[] = {
+  /*  0 */           0,         467,
+};
+
+static const uint16_t ud_itab__429[] = {
+  /*  0 */  GROUP(430),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__432[] = {
+  /*  0 */           0,         468,
+};
+
+static const uint16_t ud_itab__431[] = {
+  /*  0 */  GROUP(432),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__434[] = {
+  /*  0 */           0,         469,
+};
+
+static const uint16_t ud_itab__433[] = {
+  /*  0 */  GROUP(434),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__418[] = {
+  /*  0 */  GROUP(419),  GROUP(421),  GROUP(423),  GROUP(425),
+  /*  4 */  GROUP(427),  GROUP(429),  GROUP(431),  GROUP(433),
+};
+
+static const uint16_t ud_itab__437[] = {
+  /*  0 */           0,         470,
+};
+
+static const uint16_t ud_itab__436[] = {
+  /*  0 */  GROUP(437),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__439[] = {
+  /*  0 */           0,         471,
+};
+
+static const uint16_t ud_itab__438[] = {
+  /*  0 */  GROUP(439),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__441[] = {
+  /*  0 */           0,         472,
+};
+
+static const uint16_t ud_itab__440[] = {
+  /*  0 */  GROUP(441),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__443[] = {
+  /*  0 */           0,         473,
+};
+
+static const uint16_t ud_itab__442[] = {
+  /*  0 */  GROUP(443),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__445[] = {
+  /*  0 */           0,         474,
+};
+
+static const uint16_t ud_itab__444[] = {
+  /*  0 */  GROUP(445),           0,           0,           0,
+};
+
+static const uint16_t ud_itab__447[] = {
+  /*  0 */           0,         475,
+};
+
+static const uint16_t ud_itab__446[] = {
+  /*  0 */  GROUP(447),           0,[...]

[diff truncated at 100000 bytes]

Reply via email to