diff --git a/base/runtime/procs_windows_amd64.odin b/base/runtime/procs_windows_amd64.odin index cedbc2bd8..00b1ffc05 100644 --- a/base/runtime/procs_windows_amd64.odin +++ b/base/runtime/procs_windows_amd64.odin @@ -22,6 +22,50 @@ windows_trap_type_assertion :: proc "contextless" () -> ! { } when ODIN_NO_CRT { - @(require) - foreign import crt_lib "procs_windows_amd64.asm" + @(export, link_name="_tls_index", private="file") + _tls_index: u32 = 0 + + @(export, link_name="_fltused", private="file") + _fltused: u32 = 0x9875 + + @(export, link_name="__chkstk", private="file") + __chkstk :: proc "naked" () { + asm() { + // Allocate 16 bytes to store values of r10 and r11 + sub %rsp, 0x10 + mov [%rsp], %r10 + mov [%rsp + 0x8], %r11 + // Set r10 to point to the stack as of the moment of the function call + lea %r10, [%rsp+0x18] + // Subtract r10 til the bottom of the stack allocation, if we overflow + // reset r10 to 0, we'll crash with segfault anyway + xor %r11, %r11 + sub %r10, %rax + cmovb %r10, %r11 + // Load r11 with the bottom of the stack (lowest allocated address) + mov %r11, [%gs:0x10] + // If the bottom of the allocation is above the bottom of the stack, + // we don't need to probe + cmp %r10, %r11 + jnb .end + // Align the bottom of the allocation down to page size + and %r10w, 0xf000 + .loop: + // Move the pointer to the next guard page, and touch it by loading 0 + // into that page + lea %r11, [%r11 - 0x1000] + mov [%r11]:u8, 0x0 + // Did we reach the bottom of the allocation? + cmp %r10, %r11 + jnz .loop + .end: + // Restore previous r10 and r11 and return + mov %r10, [%rsp] + mov %r11, [%rsp + 0x8] + add %rsp, 0x10 + ret + }() + } + // @(require) + // foreign import crt_lib "procs_windows_amd64.asm" } diff --git a/build.bat b/build.bat index cc9d6af05..0f08af87a 100644 --- a/build.bat +++ b/build.bat @@ -138,4 +138,4 @@ if %release_mode% EQU 0 echo: & echo Debug compiler built. Note: run "build.bat del *.obj > NUL 2> NUL -:end_of_build +:end_of_build \ No newline at end of file diff --git a/core/rexcode/isa/x86/clobber_types.odin b/core/rexcode/isa/x86/clobber_types.odin new file mode 100644 index 000000000..2e2d2eb64 --- /dev/null +++ b/core/rexcode/isa/x86/clobber_types.odin @@ -0,0 +1,51 @@ +package rexcode_x86 + +Clobber_Flags :: distinct bit_set[Clobber_Flag; u16] +Clobber_Flag :: enum u8 { + CF, + PF, + AF, + ZF, + SF, + OF, + DF, + IF, + TF, +} + +Side_Effect :: enum u8 { + FENCE, // memory-ordering barrier (LFENCE/SFENCE/MFENCE, LOCK) + SERIALIZING, // architecturally serializing (drains pipeline) + HINT, // microarchitectural hint, architecturally inert (PAUSE/PREFETCH*/ENDBR) + CACHE, // cache-line maintenance with coherence effects (CLFLUSH/CLWB) + TRAP, // may deliberately raise a fault (#UD/#BR): UD0-2, BOUND + INTERRUPT, // software interrupt / syscall gate + HALT, // stops execution until an external event + PRIVILEGED, // requires CPL0 / reads-writes supervisor machine state + CONTROL, // alters control flow (writes RIP): branches, calls, returns + CET, // control-flow-enforcement: landing pads, shadow-stack ops +} +Side_Effects :: distinct bit_set[Side_Effect; u16] + +Clobber_Regs :: distinct bit_set[Clobber_Reg; u16] +Clobber_Reg :: enum u8 { + RAX, RBX, RCX, RDX, + RSI, RDI, RSP, RBP, + R11, XMM0, VECTOR, MXCSR, + FPU_ST, FPU_SW, +} + +Operand_Set :: distinct bit_set[0..<4; u8] + +Clobber :: struct { + written: Operand_Set, + read: Operand_Set, + implicit_wr: Clobber_Regs, + implicit_rd: Clobber_Regs, + flags_wr: Clobber_Flags, + flags_undef: Clobber_Flags, + flags_rd: Clobber_Flags, + writes_mem: bool, + reads_mem: bool, + side_effects: Side_Effects, +} \ No newline at end of file diff --git a/core/rexcode/isa/x86/mnemonic_builders.odin b/core/rexcode/isa/x86/mnemonic_builders.odin index c7b518e03..2957a1264 100644 --- a/core/rexcode/isa/x86/mnemonic_builders.odin +++ b/core/rexcode/isa/x86/mnemonic_builders.odin @@ -2159,12 +2159,6 @@ inst_movss_m32_xmm :: #force_inline proc "contextless" (dst: Me emit_movss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movss_xmm_xmm(dst, src)) } emit_movss_xmm_m32 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32) { append(instructions, inst_movss_xmm_m32(dst, src)) } emit_movss_m32_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem32, src: XMM) { append(instructions, inst_movss_m32_xmm(dst, src)) } -inst_movsd_sse_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD_SSE, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 733) } -inst_movsd_sse_xmm_m64 :: #force_inline proc "contextless" (dst: XMM, src: Mem64) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD_SSE, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 8), {}, {}} }, 733) } -inst_movsd_sse_m64_xmm :: #force_inline proc "contextless" (dst: Mem64, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVSD_SSE, operand_count = 2, ops = {op_mem(dst.mem, 8), op_xmm(src), {}, {}} }, 734) } -emit_movsd_sse_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_movsd_sse_xmm_xmm(dst, src)) } -emit_movsd_sse_xmm_m64 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64) { append(instructions, inst_movsd_sse_xmm_m64(dst, src)) } -emit_movsd_sse_m64_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: Mem64, src: XMM) { append(instructions, inst_movsd_sse_m64_xmm(dst, src)) } inst_movdqa_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQA, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 735) } inst_movdqa_xmm_m128 :: #force_inline proc "contextless" (dst: XMM, src: Mem128) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQA, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 16), {}, {}} }, 735) } inst_movdqa_m128_xmm :: #force_inline proc "contextless" (dst: Mem128, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .MOVDQA, operand_count = 2, ops = {op_mem(dst.mem, 16), op_xmm(src), {}, {}} }, 736) } @@ -2417,10 +2411,6 @@ inst_cmpss_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XM inst_cmpss_xmm_m32_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem32, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSS, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 4), op_imm8(imm), {}} }, 809) } emit_cmpss_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_cmpss_xmm_xmm_imm8(dst, src, imm)) } emit_cmpss_xmm_m32_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem32, imm: i8) { append(instructions, inst_cmpss_xmm_m32_imm8(dst, src, imm)) } -inst_cmpsd_sse_xmm_xmm_imm8 :: #force_inline proc "contextless" (dst: XMM, src: XMM, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSD_SSE, operand_count = 3, ops = {op_xmm(dst), op_xmm(src), op_imm8(imm), {}} }, 810) } -inst_cmpsd_sse_xmm_m64_imm8 :: #force_inline proc "contextless" (dst: XMM, src: Mem64, imm: i8) -> Instruction { return with_hint(Instruction{ mnemonic = .CMPSD_SSE, operand_count = 3, ops = {op_xmm(dst), op_mem(src.mem, 8), op_imm8(imm), {}} }, 810) } -emit_cmpsd_sse_xmm_xmm_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM, imm: i8) { append(instructions, inst_cmpsd_sse_xmm_xmm_imm8(dst, src, imm)) } -emit_cmpsd_sse_xmm_m64_imm8 :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: Mem64, imm: i8) { append(instructions, inst_cmpsd_sse_xmm_m64_imm8(dst, src, imm)) } inst_comiss_xmm_xmm :: #force_inline proc "contextless" (dst: XMM, src: XMM) -> Instruction { return with_hint(Instruction{ mnemonic = .COMISS, operand_count = 2, ops = {op_xmm(dst), op_xmm(src), {}, {}} }, 811) } inst_comiss_xmm_m32 :: #force_inline proc "contextless" (dst: XMM, src: Mem32) -> Instruction { return with_hint(Instruction{ mnemonic = .COMISS, operand_count = 2, ops = {op_xmm(dst), op_mem(src.mem, 4), {}, {}} }, 811) } emit_comiss_xmm_xmm :: #force_inline proc(instructions: ^[dynamic]Instruction, dst: XMM, src: XMM) { append(instructions, inst_comiss_xmm_xmm(dst, src)) } @@ -8030,8 +8020,6 @@ inst_movupd :: proc{ inst_movupd_xmm_xmm, inst_movu emit_movupd :: proc{ emit_movupd_xmm_xmm, emit_movupd_xmm_m128, emit_movupd_m128_xmm } inst_movss :: proc{ inst_movss_xmm_xmm, inst_movss_xmm_m32, inst_movss_m32_xmm } emit_movss :: proc{ emit_movss_xmm_xmm, emit_movss_xmm_m32, emit_movss_m32_xmm } -inst_movsd_sse :: proc{ inst_movsd_sse_xmm_xmm, inst_movsd_sse_xmm_m64, inst_movsd_sse_m64_xmm } -emit_movsd_sse :: proc{ emit_movsd_sse_xmm_xmm, emit_movsd_sse_xmm_m64, emit_movsd_sse_m64_xmm } inst_movdqa :: proc{ inst_movdqa_xmm_xmm, inst_movdqa_xmm_m128, inst_movdqa_m128_xmm } emit_movdqa :: proc{ emit_movdqa_xmm_xmm, emit_movdqa_xmm_m128, emit_movdqa_m128_xmm } inst_movdqu :: proc{ inst_movdqu_xmm_xmm, inst_movdqu_xmm_m128, inst_movdqu_m128_xmm } @@ -8150,8 +8138,6 @@ inst_cmppd :: proc{ inst_cmppd_xmm_xmm_imm8, inst_ emit_cmppd :: proc{ emit_cmppd_xmm_xmm_imm8, emit_cmppd_xmm_m128_imm8 } inst_cmpss :: proc{ inst_cmpss_xmm_xmm_imm8, inst_cmpss_xmm_m32_imm8 } emit_cmpss :: proc{ emit_cmpss_xmm_xmm_imm8, emit_cmpss_xmm_m32_imm8 } -inst_cmpsd_sse :: proc{ inst_cmpsd_sse_xmm_xmm_imm8, inst_cmpsd_sse_xmm_m64_imm8 } -emit_cmpsd_sse :: proc{ emit_cmpsd_sse_xmm_xmm_imm8, emit_cmpsd_sse_xmm_m64_imm8 } inst_comiss :: proc{ inst_comiss_xmm_xmm, inst_comiss_xmm_m32 } emit_comiss :: proc{ emit_comiss_xmm_xmm, emit_comiss_xmm_m32 } inst_comisd :: proc{ inst_comisd_xmm_xmm, inst_comisd_xmm_m64 } diff --git a/core/rexcode/isa/x86/mnemonics.odin b/core/rexcode/isa/x86/mnemonics.odin index 0ed1b142c..dc65bc3b2 100644 --- a/core/rexcode/isa/x86/mnemonics.odin +++ b/core/rexcode/isa/x86/mnemonics.odin @@ -300,7 +300,6 @@ Mnemonic :: enum u16 { MOVAPD, MOVUPD, MOVSS, - MOVSD_SSE, // distinguish from string MOVSD MOVDQA, MOVDQU, MOVQ, @@ -360,7 +359,6 @@ Mnemonic :: enum u16 { CMPPS, CMPPD, CMPSS, - CMPSD_SSE, COMISS, COMISD, UCOMISS, @@ -658,6 +656,24 @@ Mnemonic :: enum u16 { VMOVNTPD, VMOVNTDQ, VMOVNTDQA, + VADDSUBPS, + VADDSUBPD, + VHADDPS, + VHADDPD, + VHSUBPS, + VHSUBPD, + VLDDQU, + VMOVDDUP, + VMOVSLDUP, + VMOVSHDUP, + VPCMPESTRI, + VPCMPESTRM, + VPCMPISTRI, + VPCMPISTRM, + VPBROADCASTB, + VPBROADCASTW, + VPBROADCASTD, + VPBROADCASTQ, VCVTPS2PD, VCVTPD2PS, VCVTSS2SD, @@ -1291,4 +1307,82 @@ Mnemonic :: enum u16 { MOVBE, RDRAND, RDSEED, + + // ------------------------------------------------------------------------- + // SECTION: 4.28 Additional System / GPR Instructions + // ------------------------------------------------------------------------- + SWAPGS, + MONITOR, + MWAIT, + CLAC, + STAC, + RDFSBASE, + RDGSBASE, + WRFSBASE, + WRGSBASE, + PTWRITE, + RDPID, + WBNOINVD, + SERIALIZE, + PREFETCH, + + // ------------------------------------------------------------------------- + // SECTION: 4.29 WAITPKG Instructions + // ------------------------------------------------------------------------- + TPAUSE, + UMONITOR, + UMWAIT, + + // ------------------------------------------------------------------------- + // SECTION: 4.30 Direct Store / Enqueue Store Instructions + // ------------------------------------------------------------------------- + MOVDIRI, + MOVDIR64B, + ENQCMD, + ENQCMDS, + + // ------------------------------------------------------------------------- + // SECTION: 4.31 Remote Atomic Operations (RAO-INT) + // ------------------------------------------------------------------------- + AADD, + AAND, + AOR, + AXOR, + + // ------------------------------------------------------------------------- + // SECTION: 4.32 Restricted Transactional Memory (RTM) + // ------------------------------------------------------------------------- + XEND, + XTEST, + + // ------------------------------------------------------------------------- + // SECTION: 4.33 AMD SVM (Secure Virtual Machine) Instructions + // ------------------------------------------------------------------------- + VMRUN, + VMMCALL, + VMLOAD, + VMSAVE, + STGI, + CLGI, + SKINIT, + INVLPGA, + INVLPGB, + TLBSYNC, + + // ------------------------------------------------------------------------- + // SECTION: 4.34 AMD SEV-SNP Instructions + // ------------------------------------------------------------------------- + PVALIDATE, + RMPADJUST, + RMPUPDATE, + PSMASH, + + // ------------------------------------------------------------------------- + // SECTION: 4.35 AMD Miscellaneous Instructions + // ------------------------------------------------------------------------- + CLZERO, + MONITORX, + MWAITX, + RDPRU, + MCOMMIT, } diff --git a/core/rexcode/isa/x86/printer.odin b/core/rexcode/isa/x86/printer.odin index 42ef7a5bf..30ea392a9 100644 --- a/core/rexcode/isa/x86/printer.odin +++ b/core/rexcode/isa/x86/printer.odin @@ -51,8 +51,7 @@ Print_Result :: isa.Print_Result mnemonic_to_string :: proc(m: Mnemonic, lowercase: bool) -> string { #partial switch m { - case .INVALID: return "???" - case .MOVSD_SSE: return lowercase ? "movsd" : "MOVSD" + case .INVALID: return "???" } if name, ok := reflect.enum_name_from_value(m); ok { return lowercase ? strings.to_lower(name, context.temp_allocator) : name diff --git a/core/rexcode/isa/x86/tablegen/clobber_table.odin b/core/rexcode/isa/x86/tablegen/clobber_table.odin new file mode 100644 index 000000000..c241bb22e --- /dev/null +++ b/core/rexcode/isa/x86/tablegen/clobber_table.odin @@ -0,0 +1,5036 @@ +// clobber_table.odin -- PER-FORM side-effect table for rexcode_x86_tablegen +// +// Type: [Mnemonic][]x86.Clobber (parallel to [Mnemonic][]Encoding) +// +// HOW EACH FORM IS SPECIALISED FROM THE UNION: +// 1. Implicit-operand normalisation. An operand that is an implicit register +// (AL/AX/EAX/RAX_IMPL -> RAX, CL_IMPL -> RCX, XMM0_IMPL -> XMM0, +// ST0_IMPL -> FPU_ST) or an implicit constant (ONE_IMPL) is removed from the +// OP0.3 slot set and, if that slot was written/read, folded into +// implicit_wr/implicit_rd. Registers that are implicit but NOT tied to an +// operand (RSP for the stack, RSI/RDI/RCX for strings, RDX for MULX, ...) +// are inherent and kept on every form. +// 2. Slot trimming. OP slots that are .NONE in a given form are dropped from +// written/read. +// 3. Per-form memory. writes_mem/reads_mem keep the union's DIRECTION but are +// asserted on a form only when that form actually carries a memory-capable +// operand, OR the instruction addresses memory implicitly (stack, string, +// XLAT table, MASKMOVDQU/[rDI] store, VMCS). Consequently register-only +// forms of otherwise-memory instructions (e.g. MOV r,imm; FADD ST(0),ST(i); +// FST ST(i); MOVLHPS; PEXTRW r32,xmm) no longer carry the blanket memory +// flag the union used. Shadow-stack accesses are not implicit: the +// shadow-stack instructions that touch memory (WRSS/WRUSS/RSTORSSP/CLRSSBSY) +// all do so through an explicit m64 operand and are covered by the +// memory-capable-operand branch above. +// 4. Family splits that the union could only approximate: +// IMUL -- 1-operand form writes RDX:RAX implicitly (r/m8 -> AX only); +// 2-operand form is OP0 *= OP1; 3-operand form is OP0 = OP1 * imm +// (OP0 not read); neither multi-operand form touches RAX/RDX. +// MUL/DIV/IDIV -- the r/m8 form uses the A-register only and does not +// touch (R)DX. +// SHL/SHR/SAR/ROL/ROR/RCL/RCR/SHLD/SHRD -- only the CL form reads RCX; +// the 1/imm8 forms do not. +// Flags and side_effects are uniform across a mnemonic's forms and are carried +// through unchanged, EXCEPT where a single mnemonic aliases two distinct +// instructions: MOVSD and CMPSD each name both a string operation and an SSE +// scalar-double operation, so their string form and their SSE form carry +// different flags and side_effects. +// +// INVARIANT preserved: a form is a freely-eliminable no-op iff every clobber set +// is empty AND side_effects == {} (only .NOP and the .INVALID sentinel qualify). + +package rexcode_x86_tablegen + +import "core:rexcode/isa/x86" + +@(rodata) +CLOBBER_TABLE := [Mnemonic][]x86.Clobber{ + .INVALID = {}, + + + // 8.1 Data Transfer Encodings + .MOV = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .MOVABS = { + {written={0}, read={1}}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + }, + .MOVZX = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .MOVSX = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .MOVSXD = { + {written={0}, read={1}, reads_mem=true}, + }, + .XCHG = { // asserts LOCK when a mem operand is used + {written={1}, read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}}, + {written={1}, read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}}, + {written={1}, read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + }, + .PUSH = { + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + }, + .POP = { + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + }, + .LEA = { // no memory access: computes effective address only + {written={0}}, + {written={0}}, + {written={0}}, + }, + + // 8.2 Arithmetic Encodings + .ADD = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .ADC = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + }, + .SUB = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .SBB = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + }, + .MUL = { // RAX/RDX widths follow operand size (r/m8 -> AX only) + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // r/m8 form: A-register only, no (R)DX + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + }, + .IMUL = { // union of forms: 1-op writes RDX:RAX (implicit); 2/3-op writes OP0, no implicit + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 1-op r/m8: AX <- AL*r/m8 + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 1-operand form: RDX:RAX <- RAX * r/m + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 1-operand form: RDX:RAX <- RAX * r/m + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 1-operand form: RDX:RAX <- RAX * r/m + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 2-operand form: OP0 *= OP1 + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 2-operand form: OP0 *= OP1 + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 2-operand form: OP0 *= OP1 + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 3-operand form: OP0 = OP1 * imm (OP0 not read) + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 3-operand form: OP0 = OP1 * imm (OP0 not read) + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 3-operand form: OP0 = OP1 * imm (OP0 not read) + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 3-operand form: OP0 = OP1 * imm (OP0 not read) + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 3-operand form: OP0 = OP1 * imm (OP0 not read) + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, // 3-operand form: OP0 = OP1 * imm (OP0 not read) + }, + .DIV = { // RDX:RAX = quotient/remainder; r/m8 uses AX only + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, // r/m8 form: A-register only, no (R)DX + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .IDIV = { // RDX:RAX = quotient/remainder; r/m8 uses AX only + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, // r/m8 form: A-register only, no (R)DX + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .INC = { // CF deliberately NOT affected + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .DEC = { // CF deliberately NOT affected + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .NEG = { + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .CMP = { // no operand written; flags only + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + + // 8.3 Logical Encodings + .AND = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + }, + .OR = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + }, + .XOR = { + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + }, + .NOT = { + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + }, + .TEST = { // no operand written; flags only + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + }, + + // 8.4 Shift/Rotate Encodings + .SHL = { // OF defined only for 1-bit count; count==0 leaves flags unchanged + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + }, + .SHR = { // OF defined only for 1-bit count; count==0 leaves flags unchanged + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + }, + .SAR = { // OF defined only for 1-bit count; count==0 leaves flags unchanged + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + }, + .ROL = { // only CF/OF affected; count==0 leaves flags unchanged + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + }, + .ROR = { // only CF/OF affected; count==0 leaves flags unchanged + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + }, + .RCL = { + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + }, + .RCR = { + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + }, + .SHLD = { + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + }, + .SHRD = { + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + }, + + // 8.5 Bit Operation Encodings + .BT = { // ZF unaffected + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .BTS = { // ZF unaffected + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .BTR = { // ZF unaffected + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .BTC = { // ZF unaffected + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .BSF = { // destination undefined when source == 0 + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .BSR = { // destination undefined when source == 0 + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .POPCNT = { // ZF per source; CF/OF/SF/AF/PF cleared + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .LZCNT = { + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .TZCNT = { + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + + // 8.6 Control Flow Encodings + .JMP = { // indirect forms read reg/mem; writes RIP + {read={0}, side_effects={.CONTROL}}, + {read={0}, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + }, + .JA = { // reads flags; writes RIP on taken branch + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + }, + .JAE = { // reads flags; writes RIP on taken branch + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + }, + .JB = { // reads flags; writes RIP on taken branch + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + }, + .JBE = { // reads flags; writes RIP on taken branch + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + }, + .JC = { // reads flags; writes RIP on taken branch + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + }, + .JE = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + }, + .JZ = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + }, + .JG = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + }, + .JGE = { // reads flags; writes RIP on taken branch + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + }, + .JL = { // reads flags; writes RIP on taken branch + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + }, + .JLE = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + }, + .JNA = { // reads flags; writes RIP on taken branch + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + }, + .JNAE = { // reads flags; writes RIP on taken branch + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + }, + .JNB = { // reads flags; writes RIP on taken branch + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + }, + .JNBE = { // reads flags; writes RIP on taken branch + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + }, + .JNC = { // reads flags; writes RIP on taken branch + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + }, + .JNE = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + }, + .JNZ = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + }, + .JNG = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + }, + .JNGE = { // reads flags; writes RIP on taken branch + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + }, + .JNL = { // reads flags; writes RIP on taken branch + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + }, + .JNLE = { // reads flags; writes RIP on taken branch + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + }, + .JNO = { // reads flags; writes RIP on taken branch + {flags_rd={.OF}, side_effects={.CONTROL}}, + {flags_rd={.OF}, side_effects={.CONTROL}}, + }, + .JNP = { // reads flags; writes RIP on taken branch + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + }, + .JNS = { // reads flags; writes RIP on taken branch + {flags_rd={.SF}, side_effects={.CONTROL}}, + {flags_rd={.SF}, side_effects={.CONTROL}}, + }, + .JO = { // reads flags; writes RIP on taken branch + {flags_rd={.OF}, side_effects={.CONTROL}}, + {flags_rd={.OF}, side_effects={.CONTROL}}, + }, + .JP = { // reads flags; writes RIP on taken branch + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + }, + .JPE = { // reads flags; writes RIP on taken branch + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + }, + .JPO = { // reads flags; writes RIP on taken branch + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + }, + .JS = { // reads flags; writes RIP on taken branch + {flags_rd={.SF}, side_effects={.CONTROL}}, + {flags_rd={.SF}, side_effects={.CONTROL}}, + }, + .JCXZ = { // reads CX + {implicit_rd={.RCX}, side_effects={.CONTROL}}, + }, + .JECXZ = { // reads ECX + {implicit_rd={.RCX}, side_effects={.CONTROL}}, + }, + .JRCXZ = { // reads RCX + {implicit_rd={.RCX}, side_effects={.CONTROL}}, + }, + .LOOP = { + {implicit_wr={.RCX}, implicit_rd={.RCX}, side_effects={.CONTROL}}, + }, + .LOOPE = { + {implicit_wr={.RCX}, implicit_rd={.RCX}, flags_rd={.ZF}, side_effects={.CONTROL}}, + }, + .LOOPNE = { + {implicit_wr={.RCX}, implicit_rd={.RCX}, flags_rd={.ZF}, side_effects={.CONTROL}}, + }, + .CALL = { // pushes return address + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + }, + .RET = { // pops return address (+imm16 form adjusts RSP) + {implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true, side_effects={.CONTROL}}, + {implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true, side_effects={.CONTROL}}, + }, + .IRET = { // pops RIP/CS/RFLAGS (privileged bits conditionally) + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true, side_effects={.SERIALIZING, .CONTROL}}, + }, + .IRETD = { // pops RIP/CS/RFLAGS (privileged bits conditionally) + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true, side_effects={.SERIALIZING, .CONTROL}}, + }, + .IRETQ = { // pops RIP/CS/RFLAGS (privileged bits conditionally) + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true, side_effects={.SERIALIZING, .CONTROL}}, + }, + .INT = { // pushes RFLAGS/CS/RIP; clears TF/IF via gate + {read={0}, implicit_wr={.RSP}, flags_wr={.IF}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true, side_effects={.INTERRUPT, .CONTROL}}, + }, + .INT3 = { // pushes RFLAGS/CS/RIP; clears TF/IF via gate + {implicit_wr={.RSP}, flags_wr={.IF}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true, side_effects={.INTERRUPT, .CONTROL}}, + }, + .INTO = { // #OF only if OF=1 + {implicit_wr={.RSP}, flags_wr={.IF}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true, side_effects={.INTERRUPT, .CONTROL}}, + }, + .SYSCALL = { // RCX<-RIP, R11<-RFLAGS; RFLAGS masked by IA32_FMASK + {implicit_wr={.RCX, .R11}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, side_effects={.INTERRUPT, .CONTROL}}, + }, + .SYSRET = { // RIP<-RCX, RFLAGS<-R11 + {implicit_rd={.RCX, .R11}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, side_effects={.SERIALIZING, .INTERRUPT, .PRIVILEGED, .CONTROL}}, + }, + .SYSENTER = { // privileged; RSP/RIP from MSRs + {implicit_wr={.RSP}, flags_wr={.IF}, side_effects={.INTERRUPT, .CONTROL}}, + }, + .SYSEXIT = { // privileged; RSP<-RDX/RCX, RIP<-RCX/RDX + {implicit_wr={.RSP}, implicit_rd={.RCX, .RDX}, side_effects={.SERIALIZING, .INTERRUPT, .PRIVILEGED, .CONTROL}}, + }, + + // 8.7 Conditional Set/Move Encodings + .SETA = { + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + }, + .SETAE = { + {written={0}, flags_rd={.CF}, writes_mem=true}, + }, + .SETB = { + {written={0}, flags_rd={.CF}, writes_mem=true}, + }, + .SETBE = { + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + }, + .SETC = { + {written={0}, flags_rd={.CF}, writes_mem=true}, + }, + .SETE = { + {written={0}, flags_rd={.ZF}, writes_mem=true}, + }, + .SETG = { + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + }, + .SETGE = { + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + }, + .SETL = { + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + }, + .SETLE = { + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + }, + .SETNA = { + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + }, + .SETNAE = { + {written={0}, flags_rd={.CF}, writes_mem=true}, + }, + .SETNB = { + {written={0}, flags_rd={.CF}, writes_mem=true}, + }, + .SETNBE = { + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + }, + .SETNC = { + {written={0}, flags_rd={.CF}, writes_mem=true}, + }, + .SETNE = { + {written={0}, flags_rd={.ZF}, writes_mem=true}, + }, + .SETNG = { + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + }, + .SETNGE = { + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + }, + .SETNL = { + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + }, + .SETNLE = { + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + }, + .SETNO = { + {written={0}, flags_rd={.OF}, writes_mem=true}, + }, + .SETNP = { + {written={0}, flags_rd={.PF}, writes_mem=true}, + }, + .SETNS = { + {written={0}, flags_rd={.SF}, writes_mem=true}, + }, + .SETNZ = { + {written={0}, flags_rd={.ZF}, writes_mem=true}, + }, + .SETO = { + {written={0}, flags_rd={.OF}, writes_mem=true}, + }, + .SETP = { + {written={0}, flags_rd={.PF}, writes_mem=true}, + }, + .SETPE = { + {written={0}, flags_rd={.PF}, writes_mem=true}, + }, + .SETPO = { + {written={0}, flags_rd={.PF}, writes_mem=true}, + }, + .SETS = { + {written={0}, flags_rd={.SF}, writes_mem=true}, + }, + .SETZ = { + {written={0}, flags_rd={.ZF}, writes_mem=true}, + }, + .CMOVA = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + }, + .CMOVAE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + }, + .CMOVB = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + }, + .CMOVBE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + }, + .CMOVC = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + }, + .CMOVE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + }, + .CMOVG = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + }, + .CMOVGE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + }, + .CMOVL = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + }, + .CMOVLE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + }, + .CMOVNA = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + }, + .CMOVNAE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + }, + .CMOVNB = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + }, + .CMOVNBE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + }, + .CMOVNC = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + }, + .CMOVNE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + }, + .CMOVNG = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + }, + .CMOVNGE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + }, + .CMOVNL = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + }, + .CMOVNLE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + }, + .CMOVNO = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + }, + .CMOVNP = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + }, + .CMOVNS = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + }, + .CMOVNZ = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + }, + .CMOVO = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + }, + .CMOVP = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + }, + .CMOVPE = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + }, + .CMOVPO = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + }, + .CMOVS = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + }, + .CMOVZ = { // conditional write of OP0 + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + }, + + // 8.8 String Operation Encodings + .MOVS = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .MOVSB = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .MOVSW = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .MOVSD = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // SSE variants + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVSQ = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .CMPS = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .CMPSB = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .CMPSW = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .CMPSD = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CMPSQ = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .SCAS = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .SCASB = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .SCASW = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .SCASD = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .SCASQ = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + }, + .LODS = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + }, + .LODSB = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + }, + .LODSW = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + }, + .LODSD = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + }, + .LODSQ = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + }, + .STOS = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .STOSB = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .STOSW = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .STOSD = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + .STOSQ = { // REP/REPZ/REPNZ forms read+write RCX + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + }, + + // 8.9 Flag Operation Encodings + .CLC = { + {flags_wr={.CF}}, + }, + .STC = { + {flags_wr={.CF}}, + }, + .CMC = { + {flags_wr={.CF}, flags_rd={.CF}}, + }, + .CLD = { + {flags_wr={.DF}}, + }, + .STD = { + {flags_wr={.DF}}, + }, + .CLI = { + {flags_wr={.IF}}, + }, + .STI = { + {flags_wr={.IF}}, + }, + .LAHF = { // AH <- flags + {implicit_wr={.RAX}, flags_rd={.CF, .PF, .AF, .ZF, .SF}}, + }, + .SAHF = { // flags <- AH + {implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF}}, + }, + .PUSHF = { + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true}, + }, + .PUSHFD = { + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true}, + }, + .PUSHFQ = { + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true}, + }, + .POPF = { + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true}, + }, + .POPFD = { + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true}, + }, + .POPFQ = { + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true}, + }, + + // 8.10 Miscellaneous Encodings + .NOP = { // no register/flag/memory clobber + {}, + {}, + {}, + {}, + }, + .HLT = { // no register/flag/memory clobber + {side_effects={.HALT, .PRIVILEGED}}, + }, + .WAIT = { // waits on pending x87 exception + {implicit_rd={.FPU_SW}}, + }, + .LOCK = { // no register/flag/memory clobber + {side_effects={.FENCE}}, + }, + .UD0 = { // no register/flag/memory clobber + {side_effects={.TRAP}}, + }, + .UD1 = { // no register/flag/memory clobber + {side_effects={.TRAP}}, + }, + .UD2 = { // no register/flag/memory clobber + {side_effects={.TRAP}}, + }, + .CPUID = { + {implicit_wr={.RAX, .RBX, .RCX, .RDX}, implicit_rd={.RAX, .RCX}, side_effects={.SERIALIZING}}, + }, + .RDTSC = { + {implicit_wr={.RAX, .RDX}}, + }, + .RDTSCP = { + {implicit_wr={.RAX, .RCX, .RDX}}, + }, + .RDPMC = { + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}}, + }, + .XGETBV = { + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}}, + }, + .XSETBV = { // privileged; writes XCR[ECX] + {implicit_rd={.RAX, .RCX, .RDX}}, + }, + .CBW = { + {implicit_wr={.RAX}, implicit_rd={.RAX}}, + }, + .CWDE = { + {implicit_wr={.RAX}, implicit_rd={.RAX}}, + }, + .CDQE = { + {implicit_wr={.RAX}, implicit_rd={.RAX}}, + }, + .CWD = { + {implicit_wr={.RDX}, implicit_rd={.RAX}}, + }, + .CDQ = { + {implicit_wr={.RDX}, implicit_rd={.RAX}}, + }, + .CQO = { + {implicit_wr={.RDX}, implicit_rd={.RAX}}, + }, + + // 8.11 BMI/ADX Encodings + .ANDN = { + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + }, + .BEXTR = { + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .OF}, flags_undef={.PF, .AF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .OF}, flags_undef={.PF, .AF, .SF}, reads_mem=true}, + }, + .BLSI = { + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + }, + .BLSMSK = { + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + }, + .BLSR = { + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + }, + .BZHI = { + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + }, + .PDEP = { // no flags affected + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PEXT = { // no flags affected + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .RORX = { // no flags affected + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .SARX = { // no flags affected (unlike SAR/SHL/SHR) + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .SHLX = { // no flags affected (unlike SAR/SHL/SHR) + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .SHRX = { // no flags affected (unlike SAR/SHL/SHR) + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .MULX = { // no flags affected; implicit multiplicand in rDX + {written={0, 1}, read={2}, implicit_rd={.RDX}, reads_mem=true}, + {written={0, 1}, read={2}, implicit_rd={.RDX}, reads_mem=true}, + }, + .ADCX = { // only CF (chains with ADCX) + {written={0}, read={0, 1}, flags_wr={.CF}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_rd={.CF}, reads_mem=true}, + }, + .ADOX = { // only OF (chains with ADOX) + {written={0}, read={0, 1}, flags_wr={.OF}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.OF}, flags_rd={.OF}, reads_mem=true}, + }, + + // 8.12 SSE Encodings + .MOVAPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVUPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVAPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVUPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVSS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVDQA = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVDQU = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVQ = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .MOVD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVLPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVHPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVLPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVHPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVLHPS = { + {written={0}, read={1}}, + }, + .MOVHLPS = { + {written={0}, read={1}}, + }, + .MOVMSKPS = { // destination is a GPR + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .MOVMSKPD = { // destination is a GPR + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .MOVNTPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVNTPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVNTDQ = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .MOVNTDQA = { + {written={0}, read={1}, reads_mem=true}, + }, + .ADDPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ADDPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ADDSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ADDSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SUBPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SUBPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SUBSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SUBSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MULPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MULPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MULSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MULSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .DIVPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .DIVPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .DIVSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .DIVSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SQRTPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SQRTPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SQRTSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .SQRTSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .RCPPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .RCPSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .RSQRTPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .RSQRTSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MAXPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MAXPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MAXSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MAXSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MINPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MINPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MINSS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MINSD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ANDPS = { + {written={0}, read={1}, reads_mem=true}, + }, + .ANDPD = { + {written={0}, read={1}, reads_mem=true}, + }, + .ANDNPS = { + {written={0}, read={1}, reads_mem=true}, + }, + .ANDNPD = { + {written={0}, read={1}, reads_mem=true}, + }, + .ORPS = { + {written={0}, read={1}, reads_mem=true}, + }, + .ORPD = { + {written={0}, read={1}, reads_mem=true}, + }, + .XORPS = { + {written={0}, read={1}, reads_mem=true}, + }, + .XORPD = { + {written={0}, read={1}, reads_mem=true}, + }, + .CMPPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CMPPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CMPSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .COMISS = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .COMISD = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .UCOMISS = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .UCOMISD = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .SHUFPS = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .SHUFPD = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .UNPCKLPS = { + {written={0}, read={1}, reads_mem=true}, + }, + .UNPCKHPS = { + {written={0}, read={1}, reads_mem=true}, + }, + .UNPCKLPD = { + {written={0}, read={1}, reads_mem=true}, + }, + .UNPCKHPD = { + {written={0}, read={1}, reads_mem=true}, + }, + .CVTPS2PD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTPD2PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTSS2SD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTSD2SS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTPS2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTPD2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTDQ2PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTDQ2PD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTSS2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTSD2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTSI2SS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTSI2SD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTTPS2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTTPD2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTTSS2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .CVTTSD2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .PADDB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDUSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PADDUSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBUSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSUBUSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULLW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULHW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULHUW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULUDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMADDWD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PAND = { + {written={0}, read={1}, reads_mem=true}, + }, + .PANDN = { + {written={0}, read={1}, reads_mem=true}, + }, + .POR = { + {written={0}, read={1}, reads_mem=true}, + }, + .PXOR = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSLLW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSLLD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSLLQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSRLW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSRLD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSRLQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSRAW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PSRAD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .PCMPEQB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PCMPEQW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PCMPEQD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PCMPGTB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PCMPGTW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PCMPGTD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PACKSSWB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PACKSSDW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PACKUSWB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKLBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKLWD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKLDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKLQDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKHBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKHWD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKHDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PUNPCKHQDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSHUFD = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PSHUFHW = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PSHUFLW = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PSHUFW = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PEXTRW = { // destination may be memory + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .PINSRW = { + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PMOVMSKB = { // destination is a GPR + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .PAVGB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PAVGW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMAXUB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMAXSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMINUB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMINSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSADBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .MASKMOVDQU = { // byte-masked store to DS:[rDI] + {read={0, 1}, implicit_rd={.RDI}, flags_rd={.DF}, writes_mem=true}, + }, + .LFENCE = { // ordering/hint; no clobber + {side_effects={.FENCE, .SERIALIZING}}, + }, + .SFENCE = { // ordering/hint; no clobber + {side_effects={.FENCE}}, + }, + .MFENCE = { // ordering/hint; no clobber + {side_effects={.FENCE}}, + }, + .PAUSE = { // ordering/hint; no clobber + {side_effects={.HINT}}, + }, + .CLFLUSH = { // flushes cache line for the addressed byte + {read={0}, reads_mem=true, side_effects={.CACHE}}, + }, + .ADDSUBPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ADDSUBPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .HADDPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .HADDPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .HSUBPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .HSUBPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .MOVDDUP = { + {written={0}, read={1}, reads_mem=true}, + }, + .MOVSLDUP = { + {written={0}, read={1}, reads_mem=true}, + }, + .MOVSHDUP = { + {written={0}, read={1}, reads_mem=true}, + }, + .LDDQU = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSHUFB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PHADDW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PHADDD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PHADDSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PHSUBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PHSUBD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PHSUBSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMADDUBSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULHRSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSIGNB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSIGNW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PSIGND = { + {written={0}, read={1}, reads_mem=true}, + }, + .PABSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PABSW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PABSD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PALIGNR = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .BLENDPS = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .BLENDPD = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .BLENDVPS = { + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + }, + .BLENDVPD = { + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + }, + .PBLENDW = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PBLENDVB = { + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + }, + .DPPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .DPPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .EXTRACTPS = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .INSERTPS = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .MPSADBW = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PACKUSDW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PEXTRB = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .PEXTRD = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .PEXTRQ = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .PHMINPOSUW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PINSRB = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PINSRD = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PINSRQ = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .PMAXSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMAXSD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMAXUW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMAXUD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMINSB = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMINSD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMINUW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMINUD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVSXBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVSXBD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVSXBQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVSXWD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVSXWQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVSXDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVZXBW = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVZXBD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVZXBQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVZXWD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVZXWQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMOVZXDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULDQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PMULLD = { + {written={0}, read={1}, reads_mem=true}, + }, + .PTEST = { // ZF from AND, CF from ANDN; others cleared + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .ROUNDPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ROUNDPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ROUNDSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .ROUNDSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .PCMPEQQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .CRC32 = { // accumulates CRC into OP0; no flags + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + }, + .PCMPESTRI = { // ECX<-index; CF/ZF/SF/OF set, AF/PF cleared ; reads EAX/EDX lengths + {implicit_wr={.RCX}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .PCMPESTRM = { // XMM0<-mask; CF/ZF/SF/OF set, AF/PF cleared ; reads EAX/EDX lengths + {implicit_wr={.XMM0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .PCMPISTRI = { // ECX<-index; CF/ZF/SF/OF set, AF/PF cleared + {implicit_wr={.RCX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .PCMPISTRM = { // XMM0<-mask; CF/ZF/SF/OF set, AF/PF cleared + {implicit_wr={.XMM0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .PCMPGTQ = { + {written={0}, read={1}, reads_mem=true}, + }, + .PCLMULQDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .AESDEC = { + {written={0}, read={1}, reads_mem=true}, + }, + .AESDECLAST = { + {written={0}, read={1}, reads_mem=true}, + }, + .AESENC = { + {written={0}, read={1}, reads_mem=true}, + }, + .AESENCLAST = { + {written={0}, read={1}, reads_mem=true}, + }, + .AESIMC = { + {written={0}, read={1}, reads_mem=true}, + }, + .AESKEYGENASSIST = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .SHA1MSG1 = { + {written={0}, read={1}, reads_mem=true}, + }, + .SHA1MSG2 = { + {written={0}, read={1}, reads_mem=true}, + }, + .SHA1NEXTE = { + {written={0}, read={1}, reads_mem=true}, + }, + .SHA1RNDS4 = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .SHA256MSG1 = { + {written={0}, read={1}, reads_mem=true}, + }, + .SHA256MSG2 = { + {written={0}, read={1}, reads_mem=true}, + }, + .SHA256RNDS2 = { + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + }, + + // 8.13 AVX/AVX2 Encodings + .VADDPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VADDPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VADDSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VADDSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSUBPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSUBPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSUBSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSUBSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMULPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMULPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMULSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMULSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VDIVPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VDIVPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VDIVSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VDIVSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSQRTPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSQRTPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSQRTSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSQRTSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRCPPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRCPSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRSQRTPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRSQRTSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMAXPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMAXPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMAXSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMAXSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMINPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMINPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMINSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VMINSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VANDPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VANDPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VANDNPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VANDNPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VORPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VORPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VXORPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VXORPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VCMPPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCMPPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCMPSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCMPSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCOMISS = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .VCOMISD = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .VUCOMISS = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .VUCOMISD = { // OF/SF/AF cleared + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + }, + .VSHUFPS = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VSHUFPD = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VUNPCKLPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VUNPCKHPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VUNPCKLPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VUNPCKHPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VBLENDPS = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VBLENDPD = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VBLENDVPS = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VBLENDVPD = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VDPPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VDPPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VROUNDPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VROUNDPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VROUNDSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VROUNDSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VEXTRACTPS = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .VINSERTPS = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VMOVAPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVUPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVAPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVUPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVSS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VMOVSD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VMOVDQA = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVDQU = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVQ = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VMOVD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVLPS = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVHPS = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVLPD = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVHPD = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVLHPS = { + {written={0}, read={1, 2}}, + }, + .VMOVHLPS = { + {written={0}, read={1, 2}}, + }, + .VMOVMSKPS = { // destination is a GPR + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VMOVMSKPD = { // destination is a GPR + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VMOVNTPS = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVNTPD = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVNTDQ = { + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .VMOVNTDQA = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VADDSUBPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VADDSUBPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VHADDPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VHADDPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VHSUBPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VHSUBPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VLDDQU = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVDDUP = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVSLDUP = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVSHDUP = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPCMPESTRI = { // ECX<-index; CF/ZF/SF/OF set, AF/PF cleared ; reads EAX/EDX lengths + {implicit_wr={.RCX}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .VPCMPESTRM = { // XMM0<-mask; CF/ZF/SF/OF set, AF/PF cleared ; reads EAX/EDX lengths + {implicit_wr={.XMM0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .VPCMPISTRI = { // ECX<-index; CF/ZF/SF/OF set, AF/PF cleared + {implicit_wr={.RCX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .VPCMPISTRM = { // XMM0<-mask; CF/ZF/SF/OF set, AF/PF cleared + {implicit_wr={.XMM0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .VPBROADCASTB = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPBROADCASTW = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPBROADCASTD = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPBROADCASTQ = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VCVTPS2PD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTPD2PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTSS2SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTSD2SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTPS2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTPD2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTDQ2PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTDQ2PD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTSS2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTSD2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTSI2SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTSI2SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTTPS2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTTPD2DQ = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTTSS2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTTSD2SI = { // destination is a GPR + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VPADDB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPADDW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPADDD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPADDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSUBB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSUBW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSUBD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSUBQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMULLW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMULHW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMULHUW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMULUDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMADDWD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPAND = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPANDN = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPOR = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPXOR = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSLLW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSLLD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSLLQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSRLW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSRLD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSRLQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSRAW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPSRAD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + }, + .VPCMPEQB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPEQW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPEQD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPEQQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPGTB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPGTW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPGTD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPGTQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPACKSSWB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPACKSSDW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPACKUSWB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPACKUSDW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKLBW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKLWD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKLDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKLQDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKHBW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKHWD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKHDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPUNPCKHQDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSHUFD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSHUFHW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSHUFLW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPEXTRB = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .VPEXTRW = { // destination may be memory + {written={0}, read={1}}, + {written={0}, read={1}, writes_mem=true}, + }, + .VPEXTRD = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .VPEXTRQ = { // destination may be memory + {written={0}, read={1}, writes_mem=true}, + }, + .VPINSRB = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPINSRW = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPINSRD = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPINSRQ = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPMOVMSKB = { // destination is a GPR + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPTEST = { // ZF from AND, CF from ANDN; others cleared + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .VPSHUFB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPHADDW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPHADDD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPHADDSW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPHSUBW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPHSUBD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPHSUBSW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMADDUBSW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMULHRSW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSIGNB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSIGNW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSIGND = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPABSB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPABSW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPABSD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPALIGNR = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPBLENDW = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPBLENDVB = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VMPSADBW = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPHMINPOSUW = { + {written={0}, read={1}, reads_mem=true}, + }, + .VPMAXSB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMAXSD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMAXUW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMAXUD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMINSB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMINSD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMINUW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMINUD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMOVSXBW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSXBD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSXBQ = { + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSXWD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSXWQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSXDQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVZXBW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVZXBD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVZXBQ = { + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVZXWD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVZXWQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVZXDQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMULDQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMULLD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VMASKMOVDQU = { // byte-masked store to DS:[rDI] + {read={0, 1}, implicit_rd={.RDI}, flags_rd={.DF}, writes_mem=true}, + }, + .VPCLMULQDQ = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VAESDEC = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VAESDECLAST = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VAESENC = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VAESENCLAST = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VAESIMC = { + {written={0}, read={1}, reads_mem=true}, + }, + .VAESKEYGENASSIST = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VBROADCASTSS = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VBROADCASTSD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + }, + .VBROADCASTF128 = { + {written={0}, read={1}, reads_mem=true}, + }, + .VEXTRACTF128 = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + }, + .VINSERTF128 = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPERM2F128 = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VMASKMOVPS = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + }, + .VMASKMOVPD = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + }, + .VTESTPS = { // ZF from AND, CF from ANDN; others cleared + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .VTESTPD = { // ZF from AND, CF from ANDN; others cleared + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + }, + .VZEROALL = { // zeroes the entire vector register file (YMM/ZMM) + {implicit_wr={.VECTOR}}, + }, + .VZEROUPPER = { // zeroes bits [MAXVL-1:128] of every vector register + {implicit_wr={.VECTOR}}, + }, + .VBROADCASTI128 = { + {written={0}, read={1}, reads_mem=true}, + }, + .VEXTRACTI128 = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + }, + .VINSERTI128 = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPERM2I128 = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPERMD = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMPS = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMQ = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMPD = { + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPBLENDD = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPSLLVD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSLLVQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSRLVD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSRLVQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSRAVD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMASKMOVD = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + }, + .VPMASKMOVQ = { + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + }, + .VGATHERDPS = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VGATHERDPD = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VGATHERQPS = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VGATHERQPD = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VPGATHERDD = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VPGATHERDQ = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VPGATHERQD = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + .VPGATHERQQ = { // mask operand (OP2) is zeroed as elements are gathered + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + }, + + // 8.14 FMA Encodings + .VFMADD132PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD213PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD231PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD132PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD213PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD231PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD132SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD213SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD231SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD132SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD213SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADD231SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB132PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB213PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB231PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB132PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB213PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB231PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB132SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB213SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB231SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB132SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB213SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUB231SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD132PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD213PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD231PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD132PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD213PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD231PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD132SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD213SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD231SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD132SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD213SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMADD231SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB132PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB213PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB231PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB132PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB213PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB231PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB132SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB213SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB231SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB132SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB213SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFNMSUB231SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADDSUB132PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADDSUB213PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADDSUB231PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADDSUB132PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADDSUB213PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMADDSUB231PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUBADD132PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUBADD213PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUBADD231PS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUBADD132PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUBADD213PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFMSUBADD231PD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTPH2PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VCVTPS2PH = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, writes_mem=true, reads_mem=true}, + }, + + // 8.15 AVX-512 Encodings + .VMOVDQA32 = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVDQA64 = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVDQU8 = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVDQU16 = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVDQU32 = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VMOVDQU64 = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPBLENDMB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPBLENDMW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPBLENDMD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPBLENDMQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VBLENDMPS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VBLENDMPD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPB = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPUB = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPW = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPUW = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPD = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPUD = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPQ = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCMPUQ = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTMB = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTMW = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTMD = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTMQ = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTNMB = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTNMW = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTNMD = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPTESTNMQ = { // result written to an opmask register (k1), not EFLAGS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPCOMPRESSD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPCOMPRESSQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VCOMPRESSPS = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VCOMPRESSPD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPEXPANDD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPEXPANDQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VEXPANDPS = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VEXPANDPD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPCONFLICTD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPCONFLICTQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPLZCNTD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPLZCNTQ = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPERMI2B = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMI2W = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMI2D = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMI2Q = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMI2PS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMI2PD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMT2B = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMT2W = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMT2D = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMT2Q = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMT2PS = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMT2PD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPERMW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPMOVB2M = { // sign bits -> opmask register + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVW2M = { // sign bits -> opmask register + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVD2M = { // sign bits -> opmask register + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVQ2M = { // sign bits -> opmask register + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVM2B = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVM2W = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVM2D = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVM2Q = { + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .VPMOVQB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSQB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVUSQB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVQW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSQW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVUSQW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVQD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSQD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVUSQD = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVDB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSDB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVUSDB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVDW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSDW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVUSDW = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVWB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVSWB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPMOVUSWB = { + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VPROLD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPROLQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPROLVD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPROLVQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPRORD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPRORQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPRORVD = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPRORVQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSCATTERDD = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VPSCATTERDQ = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VPSCATTERQD = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VPSCATTERQQ = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VSCATTERDPS = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VSCATTERDPD = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VSCATTERQPS = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VSCATTERQPD = { // opmask k1 is consumed and cleared per element + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .VPSRAVQ = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSRAVW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSLLVW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VPSRLVW = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .VRANGEPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRANGEPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRANGESS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRANGESD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VREDUCEPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VREDUCEPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VREDUCESS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VREDUCESD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRNDSCALEPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRNDSCALEPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRNDSCALESS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRNDSCALESD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRSQRT14PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRSQRT14PD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRSQRT14SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRSQRT14SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRCP14PS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRCP14PD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRCP14SS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VRCP14SD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSCALEFPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSCALEFPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSCALEFSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VSCALEFSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETEXPPS = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETEXPPD = { // may set MXCSR exception/status bits + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETEXPSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETEXPSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETMANTPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETMANTPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETMANTSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VGETMANTSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFIXUPIMMPS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFIXUPIMMPD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFIXUPIMMSS = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFIXUPIMMSD = { // may set MXCSR exception/status bits + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + }, + .VFPCLASSPS = { // class predicate written to an opmask register + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VFPCLASSPD = { // class predicate written to an opmask register + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + }, + .VFPCLASSSS = { // class predicate written to an opmask register + {written={0}, read={1}, reads_mem=true}, + }, + .VFPCLASSSD = { // class predicate written to an opmask register + {written={0}, read={1}, reads_mem=true}, + }, + .VALIGNQ = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VALIGND = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VDBPSADBW = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPTERNLOGD = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPTERNLOGQ = { + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + }, + .VPMULTISHIFTQB = { + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + }, + .KADDW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KADDB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KADDQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KADDD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDNW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDNB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDNQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KANDND = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KMOVW = { // opmask <-> GPR/mem/opmask + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .KMOVB = { // opmask <-> GPR/mem/opmask + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .KMOVQ = { // opmask <-> GPR/mem/opmask + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .KMOVD = { // opmask <-> GPR/mem/opmask + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + }, + .KNOTW = { // opmask register operation + {written={0}, read={1}}, + }, + .KNOTB = { // opmask register operation + {written={0}, read={1}}, + }, + .KNOTQ = { // opmask register operation + {written={0}, read={1}}, + }, + .KNOTD = { // opmask register operation + {written={0}, read={1}}, + }, + .KORW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KORB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KORQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KORD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KORTESTW = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KORTESTB = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KORTESTQ = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KORTESTD = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KSHIFTLW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTLB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTLQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTLD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTRW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTRB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTRQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KSHIFTRD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KTESTW = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KTESTB = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KTESTQ = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KTESTD = { // sets ZF/CF from mask test + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .KUNPCKBW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KUNPCKWD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KUNPCKDQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXNORW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXNORB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXNORQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXNORD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXORW = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXORB = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXORQ = { // opmask register operation + {written={0}, read={1, 2}}, + }, + .KXORD = { // opmask register operation + {written={0}, read={1, 2}}, + }, + + // 8.16 x87 FPU Encodings + .FADD = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FADDP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FIADD = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FSUB = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FSUBP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FISUB = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FSUBR = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FSUBRP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FISUBR = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FMUL = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FMULP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FIMUL = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FDIV = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FDIVP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FIDIV = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FDIVR = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FDIVRP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FIDIVR = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FSQRT = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FABS = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FCHS = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FPREM = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FPREM1 = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FRNDINT = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FSCALE = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FXTRACT = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FXAM = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FLD = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FILD = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + .FBLD = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + .FST = { // store (FSTP/FISTP/FBSTP pop the stack) + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FSTP = { // store (FSTP/FISTP/FBSTP pop the stack) + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FIST = { // store (FSTP/FISTP/FBSTP pop the stack) + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FISTP = { // store (FSTP/FISTP/FBSTP pop the stack) + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FISTTP = { // store (FSTP/FISTP/FBSTP pop the stack) + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FBSTP = { // store (FSTP/FISTP/FBSTP pop the stack) + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FXCH = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FCMOVB = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF}}, + }, + .FCMOVE = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.ZF}}, + }, + .FCMOVBE = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF, .ZF}}, + }, + .FCMOVU = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.PF}}, + }, + .FCMOVNB = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF}}, + }, + .FCMOVNE = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.ZF}}, + }, + .FCMOVNBE = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF, .ZF}}, + }, + .FCMOVNU = { // conditional x87 move; reads EFLAGS + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.PF}}, + }, + .FCOM = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, // m32 + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, // m64 + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, // ST(i) + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, // no operand (ST(1)) + }, + .FCOMP = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, // m32 + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, // m64 + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, // ST(i) + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, // no operand (ST(1)) + }, + .FCOMPP = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FICOM = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FICOMP = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + }, + .FCOMI = { // compares ST(0):ST(i) into EFLAGS + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + }, + .FCOMIP = { // compares ST(0):ST(i) into EFLAGS + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + }, + .FUCOMI = { // compares ST(0):ST(i) into EFLAGS + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + }, + .FUCOMIP = { // compares ST(0):ST(i) into EFLAGS + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + }, + .FUCOM = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FUCOMP = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FUCOMPP = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FTST = { // sets x87 condition codes C0-C3 (status word), not EFLAGS + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FLDZ = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FLD1 = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FLDPI = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FLDL2T = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FLDL2E = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FLDLG2 = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FLDLN2 = { // push onto x87 stack + {implicit_wr={.FPU_ST, .FPU_SW}}, + }, + .FSIN = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FCOS = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FSINCOS = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FPTAN = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FPATAN = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .F2XM1 = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FYL2X = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FYL2XP1 = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FINIT = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FNINIT = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FINCSTP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FDECSTP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FFREE = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FFREEP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FNOP = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FWAIT = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FCLEX = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FNCLEX = { // x87 arithmetic: updates ST(0) and status word C1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + }, + .FSTCW = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FNSTCW = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FLDCW = { // loads x87 (and SSE) state from memory + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + .FSTENV = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FNSTENV = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FLDENV = { // loads x87 (and SSE) state from memory + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + .FSAVE = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FNSAVE = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FRSTOR = { // loads x87 (and SSE) state from memory + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + .FSTSW = { // AX form writes AX; m2byte form writes memory + {implicit_wr={.RAX, .FPU_SW}, writes_mem=true}, + {implicit_wr={.RAX, .FPU_SW}}, + }, + .FNSTSW = { // AX form writes AX; m2byte form writes memory + {implicit_wr={.RAX, .FPU_SW}, writes_mem=true}, + {implicit_wr={.RAX, .FPU_SW}}, + }, + .FXSAVE = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FXSAVE64 = { // stores x87 (and SSE) state to memory + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + }, + .FXRSTOR = { // loads x87 (and SSE) state from memory + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + .FXRSTOR64 = { // loads x87 (and SSE) state from memory + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + }, + + // 8.17 System Instruction Encodings + .LGDT = { // privileged load + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .SGDT = { // stores descriptor/register to r/m (privileged for some) + {written={0}, writes_mem=true}, + {written={0}, writes_mem=true}, + }, + .LIDT = { // privileged load + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .SIDT = { // stores descriptor/register to r/m (privileged for some) + {written={0}, writes_mem=true}, + {written={0}, writes_mem=true}, + }, + .LLDT = { // privileged load + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .SLDT = { // stores descriptor/register to r/m (privileged for some) + {written={0}, writes_mem=true}, + {written={0}}, + {written={0}}, + }, + .LTR = { // privileged load + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .STR = { // stores descriptor/register to r/m (privileged for some) + {written={0}, writes_mem=true}, + {written={0}}, + {written={0}}, + }, + .LMSW = { // privileged load + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .SMSW = { // stores descriptor/register to r/m (privileged for some) + {written={0}, writes_mem=true}, + {written={0}}, + {written={0}}, + }, + .CLTS = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.PRIVILEGED}}, + }, + .ARPL = { // legacy; adjusts RPL, sets ZF + {written={0}, read={1}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + }, + .LAR = { // ZF=1 on success; OP0 undefined on failure + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + }, + .LSL = { // ZF=1 on success; OP0 undefined on failure + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + }, + .VERR = { // ZF=1 if segment is readable/writable + {read={0}, flags_wr={.ZF}, reads_mem=true}, + }, + .VERW = { // ZF=1 if segment is readable/writable + {read={0}, flags_wr={.ZF}, reads_mem=true}, + }, + .INVD = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .WBINVD = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .INVLPG = { // privileged; no GPR/EFLAGS clobber modeled + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .INVPCID = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .RSM = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .RDMSR = { // privileged; EDX:EAX <- MSR[ECX] + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}, side_effects={.PRIVILEGED}}, + }, + .WRMSR = { // privileged; MSR[ECX] <- EDX:EAX + {implicit_rd={.RAX, .RCX, .RDX}, side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .VMCALL = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.PRIVILEGED}}, + }, + .VMLAUNCH = { // VMX/INVx status reported in ZF/CF + {flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMRESUME = { // VMX/INVx status reported in ZF/CF + {flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMXOFF = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.PRIVILEGED}}, + }, + .VMXON = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMCLEAR = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMPTRLD = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMPTRST = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMREAD = { // VMX status in ZF/CF + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMWRITE = { // VMX status in ZF/CF + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMFUNC = { // privileged; no GPR/EFLAGS clobber modeled + {side_effects={.PRIVILEGED}}, + }, + .INVEPT = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .INVVPID = { // VMX/INVx status reported in ZF/CF + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + + // 8.18 Security and Memory Protection Encodings + .ENCLS = { // SGX enclave leaf; behaviour selected by EAX + {side_effects={.PRIVILEGED}}, + }, + .ENCLU = { // SGX enclave leaf; behaviour selected by EAX + {side_effects={.PRIVILEGED}}, + }, + .ENCLV = { // SGX enclave leaf; behaviour selected by EAX + {side_effects={.PRIVILEGED}}, + }, + .RDPKRU = { // EAX <- PKRU (EDX cleared); reads ECX + {implicit_wr={.RAX}, implicit_rd={.RCX}}, + }, + .WRPKRU = { // PKRU <- EAX; ECX/EDX must be 0 + {implicit_rd={.RAX, .RCX, .RDX}}, + }, + .INCSSPD = { // advances SSP + {read={0}, side_effects={.CET}}, + }, + .INCSSPQ = { // advances SSP + {read={0}, side_effects={.CET}}, + }, + .RDSSPD = { // reads shadow-stack pointer into OP0 + {written={0}, side_effects={.CET}}, + }, + .RDSSPQ = { // reads shadow-stack pointer into OP0 + {written={0}, side_effects={.CET}}, + }, + .SAVEPREVSSP = { // CET shadow-stack management + {side_effects={.CET}}, + }, + .RSTORSSP = { // CET shadow-stack management + {read={0}, reads_mem=true, writes_mem=true, side_effects={.CET}}, // reads restore token, writes previous-ssp token + }, + .WRSSD = { // writes to shadow stack + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + }, + .WRSSQ = { // writes to shadow stack + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + }, + .WRUSSD = { // writes to shadow stack + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + }, + .WRUSSQ = { // writes to shadow stack + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + }, + .SETSSBSY = { // CET shadow-stack management + {side_effects={.CET}}, + }, + .CLRSSBSY = { // CET shadow-stack management + {read={0}, reads_mem=true, writes_mem=true, side_effects={.CET}}, // reads token, clears busy bit + }, + .ENDBR64 = { // CET landing pad; NOP-like + {side_effects={.HINT, .CET}}, + }, + .ENDBR32 = { // CET landing pad; NOP-like + {side_effects={.HINT, .CET}}, + }, + + // 8.19 XSAVE/XRSTOR State Management Encodings + .XSAVE = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + }, + .XSAVE64 = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + }, + .XRSTOR = { // restores state components selected by EDX:EAX + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true}, + }, + .XRSTOR64 = { // restores state components selected by EDX:EAX + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true}, + }, + .XSAVEOPT = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + }, + .XSAVEOPT64 = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + }, + .XSAVEC = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + }, + .XSAVEC64 = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + }, + .XSAVES = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true, side_effects={.PRIVILEGED}}, + }, + .XSAVES64 = { // saves state components selected by EDX:EAX + {implicit_rd={.RAX, .RDX}, writes_mem=true, side_effects={.PRIVILEGED}}, + }, + .XRSTORS = { // restores state components selected by EDX:EAX + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .XRSTORS64 = { // restores state components selected by EDX:EAX + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + + // 8.20 Cache and Prefetch Encodings + .PREFETCHT0 = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + .PREFETCHT1 = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + .PREFETCHT2 = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + .PREFETCHNTA = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + .PREFETCHW = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + .CLFLUSHOPT = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.CACHE}}, + }, + .CLWB = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.CACHE}}, + }, + .CLDEMOTE = { // cache hint/maintenance; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + + // 8.21 Atomic and Byte Swap Encodings + .BSWAP = { + {written={0}, read={0}}, + {written={0}, read={0}}, + }, + .CMPXCHG = { // ZF set on match; on mismatch RAX <- dest + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + .CMPXCHG8B = { // EDX:EAX (RDX:RAX) compared; ECX:EBX (RCX:RBX) is the new value + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RBX, .RCX, .RDX}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + }, + .CMPXCHG16B = { // EDX:EAX (RDX:RAX) compared; ECX:EBX (RCX:RBX) is the new value + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RBX, .RCX, .RDX}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + }, + .XADD = { + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + }, + + // 8.22 Miscellaneous Encodings + .BOUND = { // #BR if out of bounds + {read={0, 1}, reads_mem=true, side_effects={.TRAP}}, + {read={0, 1}, reads_mem=true, side_effects={.TRAP}}, + }, + .ENTER = { // builds stack frame + {implicit_wr={.RSP, .RBP}, implicit_rd={.RSP, .RBP}, writes_mem=true}, + }, + .LEAVE = { + {implicit_wr={.RSP, .RBP}, implicit_rd={.RBP}, reads_mem=true}, + }, + .XLAT = { // AL <- [rBX + AL] + {implicit_wr={.RAX}, implicit_rd={.RAX, .RBX}, reads_mem=true}, + }, + .XLATB = { // AL <- [rBX + AL] + {implicit_wr={.RAX}, implicit_rd={.RAX, .RBX}, reads_mem=true}, + }, + .MOVBE = { // byte-swapping load/store + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + }, + .RDRAND = { // CF=1 if value valid; OF/SF/ZF/AF/PF cleared + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + .RDSEED = { // CF=1 if value valid; OF/SF/ZF/AF/PF cleared + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + }, + // 8.23 Additional System / GPR Encodings + .SWAPGS = { // privileged; swaps GS.base with IA32_KERNEL_GS_BASE + {side_effects={.PRIVILEGED}}, + }, + .MONITOR = { // arms address monitor for [rAX]; ECX=extensions, EDX=hints + {implicit_rd={.RAX, .RCX, .RDX}, reads_mem=true}, + }, + .MWAIT = { // EAX=hints, ECX=extensions; enters optimized wait + {implicit_rd={.RAX, .RCX}, side_effects={.HALT}}, + }, + .CLAC = { // clears EFLAGS.AC (not modeled in Clobber_Flags); CPL0 + {side_effects={.PRIVILEGED}}, + }, + .STAC = { // sets EFLAGS.AC (not modeled in Clobber_Flags); CPL0 + {side_effects={.PRIVILEGED}}, + }, + .RDFSBASE = { + {written={0}}, + {written={0}}, + }, + .RDGSBASE = { + {written={0}}, + {written={0}}, + }, + .WRFSBASE = { + {read={0}}, + {read={0}}, + }, + .WRGSBASE = { + {read={0}}, + {read={0}}, + }, + .PTWRITE = { // writes source to a PT trace packet; no flags + {read={0}, reads_mem=true}, + {read={0}, reads_mem=true}, + }, + .RDPID = { // dest <- IA32_TSC_AUX + {written={0}}, + }, + .WBNOINVD = { // privileged; writes back caches without invalidation + {side_effects={.SERIALIZING, .PRIVILEGED}}, + }, + .SERIALIZE = { // serializes execution; no register/flag clobber + {side_effects={.SERIALIZING}}, + }, + .PREFETCH = { // cache hint; no register or flag clobber + {read={0}, reads_mem=true, side_effects={.HINT}}, + }, + + // 8.24 WAITPKG Encodings + .TPAUSE = { // reads control r32 + EDX:EAX deadline; CF <- result + {read={0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF}, side_effects={.HINT}}, + }, + .UMONITOR = { // arms address monitor for [reg] + {read={0}, reads_mem=true}, + }, + .UMWAIT = { // reads control r32 + EDX:EAX deadline; CF <- result + {read={0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF}, side_effects={.HINT}}, + }, + + // 8.25 Direct Store / Enqueue Store Encodings + .MOVDIRI = { // direct store of source register to memory + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + }, + .MOVDIR64B = { // 64-byte direct store: reads m512, writes [reg] + {read={0}, implicit_rd={.RAX}, reads_mem=true, writes_mem=true}, + }, + .ENQCMD = { // enqueue store: reads m512, writes to device [reg]; ZF <- status + {read={0}, reads_mem=true, writes_mem=true, flags_wr={.ZF}}, + }, + .ENQCMDS = { // supervisor enqueue store; ZF <- status + {read={0}, reads_mem=true, writes_mem=true, flags_wr={.ZF}}, + }, + + // 8.26 Remote Atomic Operation (RAO-INT) Encodings + .AADD = { // atomic [mem] += reg; no flags, no result loaded + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + }, + .AAND = { // atomic [mem] &= reg + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + }, + .AOR = { // atomic [mem] |= reg + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + }, + .AXOR = { // atomic [mem] ^= reg + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + }, + + // 8.27 Restricted Transactional Memory (RTM) Encodings + .XEND = { // commits transaction; may transfer control on abort + {side_effects={.CONTROL}}, + }, + .XTEST = { // ZF <- (not in transactional region) + {flags_wr={.ZF}}, + }, + + // 8.28 AMD SVM Encodings + .VMRUN = { // privileged; runs guest from VMCB at [rAX] + {implicit_rd={.RAX}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMMCALL = { // guest-to-hypervisor call + {side_effects={.PRIVILEGED}}, + }, + .VMLOAD = { // privileged; loads guest state from VMCB at [rAX] + {implicit_rd={.RAX}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .VMSAVE = { // privileged; saves guest state to VMCB at [rAX] + {implicit_rd={.RAX}, writes_mem=true, side_effects={.PRIVILEGED}}, + }, + .STGI = { // privileged; sets global interrupt flag + {side_effects={.PRIVILEGED}}, + }, + .CLGI = { // privileged; clears global interrupt flag + {side_effects={.PRIVILEGED}}, + }, + .SKINIT = { // privileged; secure init from SLB at EAX + {implicit_rd={.RAX}, side_effects={.PRIVILEGED}}, + }, + .INVLPGA = { // privileged; invalidates TLB entry [rAX] for ASID ECX + {implicit_rd={.RAX, .RCX}, side_effects={.PRIVILEGED}}, + }, + .INVLPGB = { // privileged; rAX=va, ECX=count, EDX=flags + {implicit_rd={.RAX, .RCX, .RDX}, side_effects={.PRIVILEGED}}, + }, + .TLBSYNC = { // privileged; synchronizes broadcast TLB invalidations + {side_effects={.PRIVILEGED}}, + }, + + // 8.29 AMD SEV-SNP Encodings + .PVALIDATE = { // rAX=addr, ECX=size, EDX=validate; EAX<-rc, flags set + {implicit_wr={.RAX}, implicit_rd={.RAX, .RCX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + }, + .RMPADJUST = { // privileged; rAX=addr, RCX=attrs, RDX=level; EAX<-rc + {implicit_wr={.RAX}, implicit_rd={.RAX, .RCX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + }, + .RMPUPDATE = { // privileged; rAX=addr, RCX=ptr to RMP state; EAX<-rc + {implicit_wr={.RAX}, implicit_rd={.RAX, .RCX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, writes_mem=true, side_effects={.PRIVILEGED}}, + }, + .PSMASH = { // privileged; rAX=addr; EAX<-rc; splits 2M RMP entry + {implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, side_effects={.PRIVILEGED}}, + }, + + // 8.30 AMD Miscellaneous Encodings + .CLZERO = { // zeroes the cache line at [rAX] + {implicit_rd={.RAX}, writes_mem=true, side_effects={.CACHE}}, + }, + .MONITORX = { // arms address monitor for [rAX] with timer (EBX) + {implicit_rd={.RAX, .RCX, .RDX}, reads_mem=true}, + }, + .MWAITX = { // EAX=hints, ECX=extensions, EBX=timer; enters wait + {implicit_rd={.RAX, .RCX, .RBX}, side_effects={.HALT}}, + }, + .RDPRU = { // ECX selects register; EDX:EAX <- value + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}}, + }, + .MCOMMIT = { // commits pending stores; CF <- error status + {flags_wr={.CF}, side_effects={.FENCE}}, + }, +} diff --git a/core/rexcode/isa/x86/tablegen/cpp-compiler/cpp-gen.odin b/core/rexcode/isa/x86/tablegen/cpp-compiler/cpp-gen.odin new file mode 100644 index 000000000..84df9b951 --- /dev/null +++ b/core/rexcode/isa/x86/tablegen/cpp-compiler/cpp-gen.odin @@ -0,0 +1,1284 @@ +package cpp_gen + +import "base:intrinsics" +import "core:fmt" +import "core:os" +import "core:strings" +import "core:slice" +import "core:reflect" +import "core:rexcode/isa/x86" + +import gen ".." + +ISA_NAME :: "amd64" + +main :: proc() { + raw_encode_runs := #load("../../tables/x86.encode_runs.bin", []x86.Encode_Run) + raw_encode_forms := #load("../../tables/x86.encode_forms.bin", []u8) + raw_clobber_forms := #load("../../tables/x86.clobber_forms.bin", []u8) + + sb := strings.builder_make() + + strings.write_string(&sb, """ + // ============================================================================= + // GENERATED FILE - DO NOT EDIT + // ============================================================================= + // + // Produces a C++ equivalent of the encoding table from core:rexcode written in Odin + // odin run tablegen # Stage A: ENCODING_TABLE -> generated/ + this file + // odin run tablegen/generated # Stage B: typed Odin literals -> tables/*.bin + // odin run tablegen/cpp-compiler # Stage C: typed Odin literals -> C++ literals + // + \n\n + """) + + + // strings.write_string(&sb, "struct Asm_a + fmt.sbprintf(&sb, "struct Asm_%s {{\n", ISA_NAME) + { + strings.write_string(&sb, "\tenum Mnemonic : u16 {\n") + defer strings.write_string(&sb, "\t};\n"); + + iota := 0 + + count := uint(0) + ROW_COUNT :: 16 + for mnemonic in gen.Mnemonic { + if count == 0 { + strings.write_string(&sb, "\t\t") + } + assert(int(mnemonic) == iota) + fmt.sbprintf(&sb, "M_%s, ", mnemonic) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + iota += 1 + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n\n"); + strings.write_string(&sb, "\t\tMNEMONIC_COUNT\n"); + } + + { + strings.write_string(&sb, "\tenum Prefix : u8 {\n") + defer strings.write_string(&sb, "\t};\n"); + + count := uint(0) + ROW_COUNT :: 16 + for prefix in Prefix { + if count == 0 { + strings.write_string(&sb, "\t\t") + } + fmt.sbprintf(&sb, "PREFIX_%s, ", prefix) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n\n"); + strings.write_string(&sb, "\t\tPREFIX_COUNT\n"); + } + + strings.write_string(&sb, "\tstatic String const mnemonic_strings[MNEMONIC_COUNT];\n") + strings.write_string(&sb, "\tstatic String const prefix_strings[PREFIX_COUNT];\n") + + { + strings.write_string(&sb, "\n"); + strings.write_string(&sb, "\tenum PrefixKind : u8 { PrefixKind_None, PrefixKind_Lock, PrefixKind_Rep, PrefixKind_Repne, PrefixKind_Other };\n"); + strings.write_string(&sb, "\n"); + } + + { + strings.write_string(&sb, "\n"); + strings.write_string(&sb, """ + static const u16 REG_CLASS_NONE = 0x000; + static const u16 REG_CLASS_GPR64 = 0x100; + static const u16 REG_CLASS_GPR32 = 0x200; + static const u16 REG_CLASS_GPR16 = 0x300; + static const u16 REG_CLASS_GPR8 = 0x400; + static const u16 REG_CLASS_GPR8H = 0x500; // AH, CH, DH, BH - legacy high byte regs + static const u16 REG_CLASS_XMM = 0x600; + static const u16 REG_CLASS_YMM = 0x700; + static const u16 REG_CLASS_ZMM = 0x800; + static const u16 REG_CLASS_K = 0x900; // opmask + static const u16 REG_CLASS_SEG = 0xA00; // segment + static const u16 REG_CLASS_CR = 0xB00; // control + static const u16 REG_CLASS_DR = 0xC00; // debug + static const u16 REG_CLASS_BND = 0xD00; // bound + static const u16 REG_CLASS_MM = 0xE00; // MMX + static const u16 REG_CLASS_ST = 0xF00; // x87 FPU + \n + """) + { + count := uint(0) + ROW_COUNT :: 16 + strings.write_string(&sb, "\tenum Register : u16 {\n") + for reg in Register { + if count == 0 { + strings.write_string(&sb, "\t\t") + } + fmt.sbprintf(&sb, "REG_%s, ", reg) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n") + strings.write_string(&sb, "\t\tREG_COUNT\n") + strings.write_string(&sb, "\t};\n") + } + } + strings.write_string(&sb, "\n"); + strings.write_string(&sb, """ + enum ClobberFlags : u16 { + ClobberFlag_CF = 1<<0, + ClobberFlag_PF = 1<<1, + ClobberFlag_AF = 1<<2, + ClobberFlag_ZF = 1<<3, + ClobberFlag_SF = 1<<4, + ClobberFlag_OF = 1<<5, + ClobberFlag_DF = 1<<6, + ClobberFlag_IF = 1<<7, + ClobberFlag_TF = 1<<8, + }; + enum SideEffectFlags : u16 { + SideEffectFlag_FENCE = 1<<0, // memory-ordering barrier (LFENCE/SFENCE/MFENCE, LOCK) + SideEffectFlag_SERIALIZING = 1<<1, // architecturally serializing (drains pipeline) + SideEffectFlag_HINT = 1<<2, // microarchitectural hint, architecturally inert (PAUSE/PREFETCH*/ENDBR) + SideEffectFlag_CACHE = 1<<3, // cache-line maintenance with coherence effects (CLFLUSH/CLWB) + SideEffectFlag_TRAP = 1<<4, // may deliberately raise a fault (#UD/#BR): UD0-2, BOUND + SideEffectFlag_INTERRUPT = 1<<5, // software interrupt / syscall gate + SideEffectFlag_HALT = 1<<6, // stops execution until an external event + SideEffectFlag_PRIVILEGED = 1<<7, // requires CPL0 / reads-writes supervisor machine state + SideEffectFlag_CONTROL = 1<<8, // alters control flow (writes RIP): branches, calls, returns + SideEffectFlag_CET = 1<<9, // control-flow-enforcement: landing pads, shadow-stack ops + }; + enum ClobberRegs : u16 { + ClobberReg_RAX = 1<<0, + ClobberReg_RBX = 1<<1, + ClobberReg_RCX = 1<<2, + ClobberReg_RDX = 1<<3, + ClobberReg_RSI = 1<<4, + ClobberReg_RDI = 1<<5, + ClobberReg_RSP = 1<<6, + ClobberReg_RBP = 1<<7, + ClobberReg_R11 = 1<<8, + ClobberReg_XMM0 = 1<<9, + ClobberReg_VECTOR = 1<<10, + ClobberReg_MXCSR = 1<<11, + ClobberReg_FPU_ST = 1<<12, + ClobberReg_FPU_SW = 1<<13, + }; + enum OperandSet : u8 { + OperandSet_OP0 = 1<<0, + OperandSet_OP1 = 1<<1, + OperandSet_OP2 = 1<<2, + OperandSet_OP3 = 1<<3, + }; + + u16 clobber_bit_for_reg_name(String const &pin) { + static const struct { String name; u16 bit; } table[] = { + {str_lit(\"rax\"), ClobberReg_RAX}, {str_lit(\"eax\"), ClobberReg_RAX}, {str_lit(\"ax\"), ClobberReg_RAX}, {str_lit(\"al\"), ClobberReg_RAX}, {str_lit(\"ah\"), ClobberReg_RAX}, + {str_lit(\"rbx\"), ClobberReg_RBX}, {str_lit(\"ebx\"), ClobberReg_RBX}, {str_lit(\"bx\"), ClobberReg_RBX}, {str_lit(\"bl\"), ClobberReg_RBX}, {str_lit(\"bh\"), ClobberReg_RBX}, + {str_lit(\"rcx\"), ClobberReg_RCX}, {str_lit(\"ecx\"), ClobberReg_RCX}, {str_lit(\"cx\"), ClobberReg_RCX}, {str_lit(\"cl\"), ClobberReg_RCX}, {str_lit(\"ch\"), ClobberReg_RCX}, + {str_lit(\"rdx\"), ClobberReg_RDX}, {str_lit(\"edx\"), ClobberReg_RDX}, {str_lit(\"dx\"), ClobberReg_RDX}, {str_lit(\"dl\"), ClobberReg_RDX}, {str_lit(\"dh\"), ClobberReg_RDX}, + {str_lit(\"rsi\"), ClobberReg_RSI}, {str_lit(\"esi\"), ClobberReg_RSI}, {str_lit(\"si\"), ClobberReg_RSI}, {str_lit(\"sil\"), ClobberReg_RSI}, + {str_lit(\"rdi\"), ClobberReg_RDI}, {str_lit(\"edi\"), ClobberReg_RDI}, {str_lit(\"di\"), ClobberReg_RDI}, {str_lit(\"dil\"), ClobberReg_RDI}, + {str_lit(\"rsp\"), ClobberReg_RSP}, {str_lit(\"esp\"), ClobberReg_RSP}, + {str_lit(\"rbp\"), ClobberReg_RBP}, {str_lit(\"ebp\"), ClobberReg_RBP}, + {str_lit(\"r11\"), ClobberReg_R11}, {str_lit(\"r11d\"), ClobberReg_R11}, + {str_lit(\"r11w\"), ClobberReg_R11}, {str_lit(\"r11b\"), ClobberReg_R11}, + {str_lit(\"xmm0\"), ClobberReg_XMM0}, + }; + for (auto const &t : table) { + if (pin == t.name) { + return t.bit; + } + } + return 0; + } + + char const *clobber_reg_bit_name(u16 bit) { + switch (bit) { + case ClobberReg_RAX: return \"rax\"; + case ClobberReg_RBX: return \"rbx\"; + case ClobberReg_RCX: return \"rcx\"; + case ClobberReg_RDX: return \"rdx\"; + case ClobberReg_RSI: return \"rsi\"; + case ClobberReg_RDI: return \"rdi\"; + case ClobberReg_RSP: return \"rsp\"; + case ClobberReg_RBP: return \"rbp\"; + case ClobberReg_R11: return \"r11\"; + case ClobberReg_XMM0: return \"xmm0\"; + } + return \"\"; + } + + i32 flag_bit_from_name(String const &name, i32 *width_) { + static const struct {String name; i32 bit; } table[] = { + {str_lit(\"c\"), 0}, // Carry + {str_lit(\"p\"), 2}, // Parity + {str_lit(\"a\"), 4}, // Auxiliary Carry + {str_lit(\"z\"), 6}, // Zero + {str_lit(\"s\"), 7}, // Sign + {str_lit(\"t\"), 8}, // Trap + {str_lit(\"i\"), 9}, // Interrupt Enable + {str_lit(\"d\"), 10}, // Direction + {str_lit(\"o\"), 11}, // Overflow + {str_lit(\"iopl\"),12}, // I/O Privilege Level (2-bit field: bits 12-13, low bit) + {str_lit(\"nt\"), 14}, // Nested Task + {str_lit(\"r\"), 16}, // Resume + {str_lit(\"vm\"), 17}, // Virtual-8086 Mode + {str_lit(\"ac\"), 18}, // Alignment Check / Access Control + {str_lit(\"vi\"), 19}, // Virtual Interrupt Flag + {str_lit(\"vip\"), 20}, // Virtual Interrupt Pending + {str_lit(\"id\"), 21}, // Identification + }; + + for (auto const &t : table) { + if (name == t.name) { + if (width_) { + if (t.name == \"iopl\") { + *width_ = 2; + } else { + *width_ = 1; + } + } + return t.bit; + } + } + return -1; + } + + struct Clobber { + OperandSet written; + OperandSet read; + ClobberRegs implicit_wr; + ClobberRegs implicit_rd; + ClobberFlags flags_wr; + ClobberFlags flags_undef; + ClobberFlags flags_rd; + bool writes_mem; + bool reads_mem; + SideEffectFlags side_effects; + + bool implies_clobber_flags() const { + u16 const FLAGS_MASK = ClobberFlag_CF|ClobberFlag_PF|ClobberFlag_AF| + ClobberFlag_ZF|ClobberFlag_SF|ClobberFlag_OF; + return ((flags_wr | flags_undef) & FLAGS_MASK) != 0; + } + bool implies_clobber_memory() const { + return writes_mem || reads_mem || + (side_effects & (SideEffectFlag_FENCE | + SideEffectFlag_CACHE | + SideEffectFlag_SERIALIZING)) != 0; + } + bool implies_side_effects() const { + u16 const VOLATILE_SE = + SideEffectFlag_FENCE | + SideEffectFlag_SERIALIZING | + SideEffectFlag_CACHE | + SideEffectFlag_TRAP | + SideEffectFlag_INTERRUPT | + SideEffectFlag_HALT | + SideEffectFlag_PRIVILEGED | + SideEffectFlag_CONTROL | + SideEffectFlag_CET; + // NOTE: SideEffectFlag_HINT deliberately excluded — inert, may be DCE'd. + return ((side_effects & VOLATILE_SE) != 0); + } + }; + """) + strings.write_string(&sb, "\n"); + + + strings.write_string(&sb, "\tstatic u16 const register_codes [REG_COUNT];\n") + strings.write_string(&sb, "\tstatic String const register_strings[REG_COUNT];\n") + + strings.write_string(&sb, "\n\n") + { + strings.write_string(&sb, "\tenum OperandType : u8 {\n") + defer strings.write_string(&sb, "\t};\n") + for op in type_of(gen.Encoding{}.ops[0]) { + fmt.sbprintf(&sb, "\t\tOP_%s,\n", op) + } + + } + strings.write_string(&sb, "\n\n") + { + strings.write_string(&sb, "\tenum OperandEncoding : u8 {\n") + defer strings.write_string(&sb, "\t};\n") + for op in Operand_Encoding { + fmt.sbprintf(&sb, "\t\tENC_%s,\n", op) + } + + } + strings.write_string(&sb, "\n") + strings.write_string(&sb, "\ttypedef u32 EncodingFlags; // cannot use a C++ bit field to due lack of portability\n") + strings.write_string(&sb, "\n") + { + defer strings.write_string(&sb, "\tGB_STATIC_ASSERT(gb_size_of(Encoding) == 16);\n") + + strings.write_string(&sb, "\t#pragma pack(push, 1)\n") + defer strings.write_string(&sb, "\t#pragma pack(pop)\n") + strings.write_string(&sb, "\tstruct Encoding {\n") + defer strings.write_string(&sb, "\t};\n") + strings.write_string(&sb, """ + Mnemonic mnemonic; + OperandType ops[4]; + OperandEncoding enc[4]; + u8 opcode; + u8 ext; + EncodingFlags flags; + \n + """) + Encoding_Flags :: type_of(gen.Encoding{}.flags) + + { + bit_offset := intrinsics.type_field_bit_offset(Encoding_Flags, "has_implicit") + strings.write_string(&sb, "\t\tbool has_implicit () const { ") + fmt.sbprintf(&sb, "return ((flags>>%du)&1) != 0;", bit_offset) + strings.write_string(&sb, " }\n") + } + { + bit_offset := intrinsics.type_field_bit_offset(Encoding_Flags, "explicit_count") + bit_size := intrinsics.type_field_bit_size(Encoding_Flags, "explicit_count") + strings.write_string(&sb, "\t\tu8 explicit_count() const { ") + fmt.sbprintf(&sb, "return cast(u8)((flags>>%du)&((1u<<%d)-1));", bit_offset, bit_size) + strings.write_string(&sb, " }\n") + } + { + bit_offset := intrinsics.type_field_bit_offset(Encoding_Flags, "op_count") + bit_size := intrinsics.type_field_bit_size(Encoding_Flags, "op_count") + strings.write_string(&sb, "\t\tu8 op_count () const { ") + fmt.sbprintf(&sb, "return cast(u8)((flags>>%du)&((1u<<%d)-1));", bit_offset, bit_size) + strings.write_string(&sb, " }\n") + } + { + bit_offset := intrinsics.type_field_bit_offset(Encoding_Flags, "lock_ok") + strings.write_string(&sb, "\t\tbool lock_ok () const { ") + fmt.sbprintf(&sb, "return ((flags>>%du)&1) != 0;", bit_offset) + strings.write_string(&sb, " }\n") + } + { + bit_offset := intrinsics.type_field_bit_offset(Encoding_Flags, "rep_ok") + strings.write_string(&sb, "\t\tbool rep_ok () const { ") + fmt.sbprintf(&sb, "return ((flags>>%du)&1) != 0;", bit_offset) + strings.write_string(&sb, " }\n") + } + } + strings.write_string(&sb, "\n\n") + { + strings.write_string(&sb, "\t// Companion run index: ENCODE_RUNS[mnemonic] -> contiguous run in ENCODE_FORMS.\n") + strings.write_string(&sb, "\tstruct EncodeRun {\n") + strings.write_string(&sb, "\t\tu32 start; // start index in ENCODE_FORMS\n") + strings.write_string(&sb, "\t\tu32 count; // number of forms for this mnemonic\n") + strings.write_string(&sb, "\t};\n") + } + + strings.write_string(&sb, "\n\n") + fmt.sbprintf(&sb, "\tstatic EncodeRun const raw_encode_runs [%d];\n", len(raw_encode_runs)) + fmt.sbprintf(&sb, "\tstatic u8 const raw_encode_forms [%d];\n", len(raw_encode_forms)) + fmt.sbprintf(&sb, "\tstatic u8 const raw_clobber_forms[%d];\n", len(raw_clobber_forms)) + strings.write_string(&sb, "\n") + strings.write_string(&sb, "\tStringMap mnemonic_map;\n") + strings.write_string(&sb, "\tStringMap prefix_map;\n") + strings.write_string(&sb, "\tStringMap register_map;\n") + + strings.write_string(&sb, """ + + bool init() { + string_map_init(&mnemonic_map, MNEMONIC_COUNT*2); + for (u16 m = M_INVALID+1; m < MNEMONIC_COUNT; m++) { + string_map_set(&mnemonic_map, mnemonic_strings[m], cast(Mnemonic)m); + } + string_map_init(&prefix_map, PREFIX_COUNT*2); + for (u8 r = PREFIX_INVALID+1; r < PREFIX_COUNT; r++) { + string_map_set(&prefix_map, prefix_strings[r], cast(Prefix)r); + } + string_map_init(®ister_map, REG_COUNT*2); + for (u16 r = REG_INVALID+1; r < REG_COUNT; r++) { + string_map_set(®ister_map, register_strings[r], cast(Register)r); + } + return true; + } + + Mnemonic mnemonic_lookup(String const &name) { + Mnemonic *found = string_map_get(&mnemonic_map, name); + return found ? *found : M_INVALID; + } + Prefix prefix_lookup(String const &name) { + Prefix *found = string_map_get(&prefix_map, name); + return found ? *found : PREFIX_INVALID; + } + Register register_lookup(String const &name) { + Register *found = string_map_get(®ister_map, name); + return found ? *found : REG_INVALID; + } + Slice encoding_forms(/*Mnemonic*/ u16 m) const { + EncodeRun r = raw_encode_runs[m]; + Encoding *ENCODE_FORMS = cast(Encoding *)raw_encode_forms; + return Slice{ENCODE_FORMS+r.start, r.count}; + } + Slice clobber_forms(/*Mnemonic*/ u16 m) const { + EncodeRun r = raw_encode_runs[m]; + Clobber *CLOBBER_FORMS = cast(Clobber *)raw_clobber_forms; + return Slice{CLOBBER_FORMS+r.start, r.count}; + } + u16 reg_class(/*Register*/ u16 r) const { + return 0xFF00 & r; + } + // size in bits for register + u16 reg_size(Register r) const { + switch (reg_class(register_codes[r])) { + case REG_CLASS_GPR64: return 64; + case REG_CLASS_GPR32: return 32; + case REG_CLASS_GPR16: return 16; + case REG_CLASS_GPR8: return 8; + case REG_CLASS_GPR8H: return 8; + case REG_CLASS_XMM: return 128; + case REG_CLASS_YMM: return 256; + case REG_CLASS_ZMM: return 512; + case REG_CLASS_K: return 64; + case REG_CLASS_MM: return 64; + case REG_CLASS_ST: return 80; + case REG_CLASS_SEG: return 16; + case REG_CLASS_CR: return 64; + case REG_CLASS_DR: return 64; + case REG_CLASS_BND: return 128; + } + return 0; + } + """) + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + AsmOperandKind kind_from_operand_type(OperandType type) const { + switch (type) { + case OP_R8: case OP_R16: case OP_R32: case OP_R64: + case OP_SREG: case OP_CR: case OP_DR: + case OP_XMM: case OP_YMM: case OP_ZMM: + case OP_MM: case OP_K: case OP_STI: + case OP_AL_IMPL: case OP_AX_IMPL: case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + case OP_ST0_IMPL: case OP_XMM0_IMPL: + return AsmOperand_Register; + case OP_RM8: case OP_RM16: case OP_RM32: case OP_RM64: + case OP_XMM_M32: case OP_XMM_M64: case OP_XMM_M128: + case OP_YMM_M256: case OP_ZMM_M512: + case OP_MM_M64: + case OP_K_M8: case OP_K_M16: case OP_K_M32: case OP_K_M64: + return AsmOperand_Register_Or_Memory; + case OP_M: case OP_M8: case OP_M16: case OP_M32: case OP_M64: + case OP_M80: case OP_M128: case OP_M256: case OP_M512: + case OP_MOFFS8: case OP_MOFFS16: case OP_MOFFS32: case OP_MOFFS64: + case OP_M16_16: case OP_M16_32: case OP_M16_64: + return AsmOperand_Memory; + case OP_IMM8: case OP_IMM16: case OP_IMM32: case OP_IMM64: + case OP_IMM8SX: + case OP_ONE_IMPL: + case OP_PTR16_16: case OP_PTR16_32: case OP_PTR16_64: + return AsmOperand_Immediate; + case OP_REL8: case OP_REL32: + return AsmOperand_Label; + case OP_NONE: + default: + return AsmOperand_Invalid; + } + } + """) + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + AsmRegClass reg_class_from_operand_type(OperandType type) const { + switch (type) { + case OP_R8: case OP_R16: case OP_R32: case OP_R64: + case OP_RM8: case OP_RM16: case OP_RM32: case OP_RM64: + case OP_AL_IMPL: case OP_AX_IMPL: case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + return AsmRegClass_Integer; + + case OP_XMM: case OP_YMM: case OP_ZMM: + case OP_XMM_M32: case OP_XMM_M64: case OP_XMM_M128: + case OP_YMM_M256: case OP_ZMM_M512: + case OP_XMM0_IMPL: + return AsmRegClass_Vector; + + case OP_K: + case OP_K_M8: case OP_K_M16: case OP_K_M32: case OP_K_M64: + return AsmRegClass_Mask; + + case OP_STI: + case OP_ST0_IMPL: + return AsmRegClass_Float; + + case OP_MM: + case OP_MM_M64: + return AsmRegClass_Vector; + + case OP_SREG: case OP_CR: case OP_DR: + case OP_M: case OP_M8: case OP_M16: case OP_M32: case OP_M64: + case OP_M80: case OP_M128: case OP_M256: case OP_M512: + case OP_MOFFS8: case OP_MOFFS16: case OP_MOFFS32: case OP_MOFFS64: + case OP_M16_16: case OP_M16_32: case OP_M16_64: + case OP_IMM8: case OP_IMM16: case OP_IMM32: case OP_IMM64: + case OP_IMM8SX: + case OP_ONE_IMPL: + case OP_PTR16_16: case OP_PTR16_32: case OP_PTR16_64: + case OP_REL8: case OP_REL32: + case OP_NONE: + default: + return AsmRegClass_Unknown; + } + } + """) + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + bool operand_type_is_implicit(OperandType t) const { + switch (t) { + case OP_AL_IMPL: case OP_AX_IMPL: + case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + case OP_ONE_IMPL: + case OP_ST0_IMPL: case OP_XMM0_IMPL: + return true; + } + return false; + } + """) + + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + AsmRegClass operand_type_reg_class(OperandType t) const { + switch (t) { + case OP_R8: case OP_R16: case OP_R32: case OP_R64: + case OP_RM8: case OP_RM16: case OP_RM32: case OP_RM64: + case OP_AL_IMPL: case OP_AX_IMPL: case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + return AsmRegClass_Integer; + case OP_XMM: case OP_YMM: case OP_ZMM: + case OP_XMM_M32: case OP_XMM_M64: case OP_XMM_M128: + case OP_YMM_M256: case OP_ZMM_M512: + case OP_XMM0_IMPL: + return AsmRegClass_Vector; // xmm/ymm/zmm; float scalars also land here (see note) + case OP_K: + case OP_K_M8: case OP_K_M16: case OP_K_M32: case OP_K_M64: + return AsmRegClass_Mask; + } + return AsmRegClass_Unknown; // OP_M*, OP_IMM*, OP_REL*, OP_SREG/CR/DR/MM/STi, moffs, ptr, m16_16... : no GPR/XMM class constraint here + } + """) + + + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + u16 operand_type_bit_width(OperandType t) const { + switch (t) { + case OP_R8: case OP_RM8: case OP_M8: case OP_AL_IMPL: case OP_CL_IMPL: case OP_K_M8: return 8; + case OP_R16: case OP_RM16: case OP_M16: case OP_AX_IMPL: case OP_DX_IMPL: case OP_K_M16: return 16; + case OP_R32: case OP_RM32: case OP_M32: case OP_EAX_IMPL: case OP_XMM_M32: case OP_K_M32: return 32; + case OP_R64: case OP_RM64: case OP_M64: case OP_RAX_IMPL: case OP_XMM_M64: case OP_K_M64: case OP_MM: case OP_MM_M64: return 64; + case OP_M128: case OP_XMM: case OP_XMM_M128: case OP_XMM0_IMPL: return 128; + case OP_M256: case OP_YMM: case OP_YMM_M256: return 256; + case OP_M512: case OP_ZMM: case OP_ZMM_M512: return 512; + case OP_IMM8: return 8; + case OP_IMM16: return 16; + case OP_IMM32: return 32; + case OP_IMM64: return 64; + case OP_REL8: return 8; + case OP_REL32: return 32; + case OP_IMM8SX: return 8; + } + return 0; // OP_M (sizeless), OP_K (opmask width is data-dependent), OP_ONE_IMPL, moffs, ptr, sreg/cr/dr, etc. + } + """) + + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + int form_explicit_slot(Encoding const &form, int explicit_index) const { + int seen = 0; + for (int j = 0; j < gb_count_of(form.ops); j++) { + auto t = form.ops[j]; + if (!t) { + break; + } + if (operand_type_is_implicit(t)) { + continue; + } + if (seen == explicit_index) { + return j; + } + seen += 1; + } + return -1; + } + """) + + strings.write_string(&sb, "\n\n") + + strings.write_string(&sb, """ + bool prefix_kind_okay(u8 prefix, Encoding const &form, bool *requires_memory_dest_) const { + PrefixKind kind = PrefixKind_None; + if (prefix != 0) { + switch (prefix) { + case PREFIX_LOCK: kind = PrefixKind_Lock; break; + case PREFIX_REP: kind = PrefixKind_Rep; break; + case PREFIX_REPNE: kind = PrefixKind_Repne; break; + default: kind = PrefixKind_Other; break; + } + } + switch (kind) { + case PrefixKind_Lock: + if (!form.lock_ok()) { + return false; + } + if (requires_memory_dest_) *requires_memory_dest_ = true; + return true; + case PrefixKind_Rep: + return form.rep_ok(); + case PrefixKind_Repne: + return form.rep_ok(); + case PrefixKind_Other: + case PrefixKind_None: + return true; + } + return true; + } + """) + + strings.write_string(&sb, "\n};\n") + + strings.write_string(&sb, "\n\n\n") + + fmt.sbprintf(&sb, "gb_global Asm_{0:s} g_asm_{0:s};\n", ISA_NAME) + + strings.write_string(&sb, "\n\n\n") + + { + fmt.sbprintf(&sb, "String const Asm_{0:s}::mnemonic_strings[Asm_{0:s}::MNEMONIC_COUNT] {{\n", ISA_NAME) + defer strings.write_string(&sb, "};\n"); + + count := uint(0) + ROW_COUNT :: 16 + for mnemonic in gen.Mnemonic { + if count == 0 { + strings.write_string(&sb, "\t") + } + + #partial switch mnemonic { + case .INVALID: + strings.write_string(&sb, "str_lit(\"\"), ") + case: + str := strings.to_lower(reflect.enum_string(mnemonic)) + fmt.sbprintf(&sb, "str_lit(%q), ", str) + delete(str) + } + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n"); + } + { + fmt.sbprintf(&sb, "String const Asm_{0:s}::prefix_strings[Asm_{0:s}::PREFIX_COUNT] {{\n", ISA_NAME) + defer strings.write_string(&sb, "};\n"); + + count := uint(0) + ROW_COUNT :: 16 + for prefix in Prefix { + if count == 0 { + strings.write_string(&sb, "\t") + } + + if prefix == .INVALID { + strings.write_string(&sb, "str_lit(\"\"), ") + } else { + str := strings.to_lower(reflect.enum_string(prefix)) + fmt.sbprintf(&sb, "str_lit(%q), ", str) + delete(str) + } + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n"); + } + + { + fmt.sbprintf(&sb, "u16 const Asm_{0:s}::register_codes[Asm_{0:s}::REG_COUNT] {{\n", ISA_NAME) + defer strings.write_string(&sb, "};\n"); + + count := uint(0) + ROW_COUNT :: 16 + for reg in Register { + if count == 0 { + strings.write_string(&sb, "\t") + } + + fmt.sbprintf(&sb, "%d, ", REG_CODES[reg]) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n"); + } + + { + fmt.sbprintf(&sb, "String const Asm_{0:s}::register_strings[Asm_{0:s}::REG_COUNT] {{\n", ISA_NAME) + defer strings.write_string(&sb, "};\n"); + + count := uint(0) + ROW_COUNT :: 16 + for reg in Register { + if count == 0 { + strings.write_string(&sb, "\t") + } + + if reg == .INVALID { + strings.write_string(&sb, "str_lit(\"\"), ") + } else { + str := strings.to_lower(reflect.enum_string(reg)) + fmt.sbprintf(&sb, "str_lit(%q), ", str) + delete(str) + } + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + strings.write_string(&sb, "\n"); + } + + { + fmt.sbprintf(&sb, "Asm_{0:s}::EncodeRun const Asm_{0:s}::raw_encode_runs[{1:d}] = {{\n", ISA_NAME, len(raw_encode_runs)) + defer strings.write_string(&sb, "};\n"); + + ROW_COUNT :: 16 + count := 0 + for run in raw_encode_runs { + if count == 0 { + strings.write_string(&sb, "\t") + } + fmt.sbprintf(&sb, "{{% 4d, % 2d}}, ", run.start, run.count) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + defer strings.write_string(&sb, "\n"); + } + { + fmt.sbprintf(&sb, "u8 const Asm_{0:s}::raw_encode_forms[%d] = {{\n", ISA_NAME, len(raw_encode_forms)) + defer strings.write_string(&sb, "};\n"); + ROW_COUNT :: 64 + count := 0 + for the_byte in raw_encode_forms { + if count == 0 { + strings.write_string(&sb, "\t") + } + fmt.sbprintf(&sb, "%#02x, ", the_byte) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + defer strings.write_string(&sb, "\n"); + } + { + fmt.sbprintf(&sb, "u8 const Asm_{0:s}::raw_clobber_forms[%d] = {{\n", ISA_NAME, len(raw_clobber_forms)) + defer strings.write_string(&sb, "};\n"); + ROW_COUNT :: 64 + count := 0 + for the_byte in raw_clobber_forms { + if count == 0 { + strings.write_string(&sb, "\t") + } + fmt.sbprintf(&sb, "%#02x, ", the_byte) + + if count == ROW_COUNT-1 { + strings.write_string(&sb, "\n") + } + + count = (count + 1) % ROW_COUNT + } + defer strings.write_string(&sb, "\n"); + } + + + + path := fmt.tprintf("%s/src/asm_tables_%s.cpp", ODIN_ROOT, ISA_NAME) + + if err := os.write_entire_file(path, strings.to_string(sb)); err != nil { + fmt.eprintfln("rexcode tablegen: failed to write %s: %v", path, err) + os.exit(1) + } +} + +Operand_Encoding :: type_of(gen.Encoding{}.enc[0]) + +Asm_Operand_Kind :: enum u8 { + Invalid, + Register, + Memory, + Register_Or_Memory, + Immediate, + Label, +} + + +@(rodata) +operand_encoding_to_kind := [Operand_Encoding]Asm_Operand_Kind{ + .NONE = .Invalid, + .MR = .Register_Or_Memory, + .REG = .Register, + .VVVV = .Register, + .OP_R = .Register, + .IS4 = .Register, + .AAA = .Register, + .IMPL = .Register, + .IB = .Immediate, + .IW = .Immediate, + .ID = .Immediate, + .IQ = .Immediate, +} + + +Prefix :: enum u8 { + INVALID, + ES, + CS, + SS, + DS, + REX, + EVEX, + FS, + GS, + VEX, + LOCK, + REPNE, + REP, +} + + + +Register :: enum u16 { + INVALID, + RAX, + RCX, + RDX, + RBX, + RSP, + RBP, + RSI, + RDI, + R8, + R9, + R10, + R11, + R12, + R13, + R14, + R15, + EAX, + ECX, + EDX, + EBX, + ESP, + EBP, + ESI, + EDI, + R8D, + R9D, + R10D, + R11D, + R12D, + R13D, + R14D, + R15D, + AX, + CX, + DX, + BX, + SP, + BP, + SI, + DI, + R8W, + R9W, + R10W, + R11W, + R12W, + R13W, + R14W, + R15W, + AL, + CL, + DL, + BL, + SPL, + BPL, + SIL, + DIL, + R8B, + R9B, + R10B, + R11B, + R12B, + R13B, + R14B, + R15B, + AH, + CH, + DH, + BH, + XMM0, + XMM1, + XMM2, + XMM3, + XMM4, + XMM5, + XMM6, + XMM7, + XMM8, + XMM9, + XMM10, + XMM11, + XMM12, + XMM13, + XMM14, + XMM15, + XMM16, + XMM17, + XMM18, + XMM19, + XMM20, + XMM21, + XMM22, + XMM23, + XMM24, + XMM25, + XMM26, + XMM27, + XMM28, + XMM29, + XMM30, + XMM31, + YMM0, + YMM1, + YMM2, + YMM3, + YMM4, + YMM5, + YMM6, + YMM7, + YMM8, + YMM9, + YMM10, + YMM11, + YMM12, + YMM13, + YMM14, + YMM15, + YMM16, + YMM17, + YMM18, + YMM19, + YMM20, + YMM21, + YMM22, + YMM23, + YMM24, + YMM25, + YMM26, + YMM27, + YMM28, + YMM29, + YMM30, + YMM31, + ZMM0, + ZMM1, + ZMM2, + ZMM3, + ZMM4, + ZMM5, + ZMM6, + ZMM7, + ZMM8, + ZMM9, + ZMM10, + ZMM11, + ZMM12, + ZMM13, + ZMM14, + ZMM15, + ZMM16, + ZMM17, + ZMM18, + ZMM19, + ZMM20, + ZMM21, + ZMM22, + ZMM23, + ZMM24, + ZMM25, + ZMM26, + ZMM27, + ZMM28, + ZMM29, + ZMM30, + ZMM31, + K0, + K1, + K2, + K3, + K4, + K5, + K6, + K7, + ES, + CS, + SS, + DS, + FS, + GS, + CR0, + CR2, + CR3, + CR4, + CR8, + DR0, + DR1, + DR2, + DR3, + DR6, + DR7, + BND0, + BND1, + BND2, + BND3, + MM0, + MM1, + MM2, + MM3, + MM4, + MM5, + MM6, + MM7, + ST0, + ST1, + ST2, + ST3, + ST4, + ST5, + ST6, + ST7, + RIP, + +} + +@(rodata) +REG_CODES := [Register]x86.Register{ + .INVALID = 0, + + // GPR 64-bit + .RAX = x86.Register(x86.REG_GPR64 | 0), .RCX = x86.Register(x86.REG_GPR64 | 1), + .RDX = x86.Register(x86.REG_GPR64 | 2), .RBX = x86.Register(x86.REG_GPR64 | 3), + .RSP = x86.Register(x86.REG_GPR64 | 4), .RBP = x86.Register(x86.REG_GPR64 | 5), + .RSI = x86.Register(x86.REG_GPR64 | 6), .RDI = x86.Register(x86.REG_GPR64 | 7), + .R8 = x86.Register(x86.REG_GPR64 | 8), .R9 = x86.Register(x86.REG_GPR64 | 9), + .R10 = x86.Register(x86.REG_GPR64 | 10), .R11 = x86.Register(x86.REG_GPR64 | 11), + .R12 = x86.Register(x86.REG_GPR64 | 12), .R13 = x86.Register(x86.REG_GPR64 | 13), + .R14 = x86.Register(x86.REG_GPR64 | 14), .R15 = x86.Register(x86.REG_GPR64 | 15), + + // ----------------------------------------------------------------------------- + // SECTION: 1.3 GPR 32-bit Registers (EAX-R15D) + // ----------------------------------------------------------------------------- + + // GPR 32-bit + .EAX = x86.Register(x86.REG_GPR32 | 0), .ECX = x86.Register(x86.REG_GPR32 | 1), + .EDX = x86.Register(x86.REG_GPR32 | 2), .EBX = x86.Register(x86.REG_GPR32 | 3), + .ESP = x86.Register(x86.REG_GPR32 | 4), .EBP = x86.Register(x86.REG_GPR32 | 5), + .ESI = x86.Register(x86.REG_GPR32 | 6), .EDI = x86.Register(x86.REG_GPR32 | 7), + .R8D = x86.Register(x86.REG_GPR32 | 8), .R9D = x86.Register(x86.REG_GPR32 | 9), + .R10D = x86.Register(x86.REG_GPR32 | 10), .R11D = x86.Register(x86.REG_GPR32 | 11), + .R12D = x86.Register(x86.REG_GPR32 | 12), .R13D = x86.Register(x86.REG_GPR32 | 13), + .R14D = x86.Register(x86.REG_GPR32 | 14), .R15D = x86.Register(x86.REG_GPR32 | 15), + + // ----------------------------------------------------------------------------- + // SECTION: 1.4 GPR 16-bit Registers (AX-R15W) + // ----------------------------------------------------------------------------- + + // GPR 16-bit + .AX = x86.Register(x86.REG_GPR16 | 0), .CX = x86.Register(x86.REG_GPR16 | 1), + .DX = x86.Register(x86.REG_GPR16 | 2), .BX = x86.Register(x86.REG_GPR16 | 3), + .SP = x86.Register(x86.REG_GPR16 | 4), .BP = x86.Register(x86.REG_GPR16 | 5), + .SI = x86.Register(x86.REG_GPR16 | 6), .DI = x86.Register(x86.REG_GPR16 | 7), + .R8W = x86.Register(x86.REG_GPR16 | 8), .R9W = x86.Register(x86.REG_GPR16 | 9), + .R10W = x86.Register(x86.REG_GPR16 | 10), .R11W = x86.Register(x86.REG_GPR16 | 11), + .R12W = x86.Register(x86.REG_GPR16 | 12), .R13W = x86.Register(x86.REG_GPR16 | 13), + .R14W = x86.Register(x86.REG_GPR16 | 14), .R15W = x86.Register(x86.REG_GPR16 | 15), + + // ----------------------------------------------------------------------------- + // SECTION: 1.5 GPR 8-bit Registers (AL-R15B, AH-BH) + // ----------------------------------------------------------------------------- + + // GPR 8-bit (low) + .AL = x86.Register(x86.REG_GPR8 | 0), .CL = x86.Register(x86.REG_GPR8 | 1), + .DL = x86.Register(x86.REG_GPR8 | 2), .BL = x86.Register(x86.REG_GPR8 | 3), + .SPL = x86.Register(x86.REG_GPR8 | 4), .BPL = x86.Register(x86.REG_GPR8 | 5), + .SIL = x86.Register(x86.REG_GPR8 | 6), .DIL = x86.Register(x86.REG_GPR8 | 7), + .R8B = x86.Register(x86.REG_GPR8 | 8), .R9B = x86.Register(x86.REG_GPR8 | 9), + .R10B = x86.Register(x86.REG_GPR8 | 10), .R11B = x86.Register(x86.REG_GPR8 | 11), + .R12B = x86.Register(x86.REG_GPR8 | 12), .R13B = x86.Register(x86.REG_GPR8 | 13), + .R14B = x86.Register(x86.REG_GPR8 | 14), .R15B = x86.Register(x86.REG_GPR8 | 15), + + // GPR 8-bit (high) - no REX allowed with these + .AH = x86.Register(x86.REG_GPR8H | 4), .CH = x86.Register(x86.REG_GPR8H | 5), + .DH = x86.Register(x86.REG_GPR8H | 6), .BH = x86.Register(x86.REG_GPR8H | 7), + + // ----------------------------------------------------------------------------- + // SECTION: 1.6 XMM Registers (XMM0-XMM31) + // ----------------------------------------------------------------------------- + + // XMM (0-31) + .XMM0 = x86.Register(x86.REG_XMM | 0), .XMM1 = x86.Register(x86.REG_XMM | 1), + .XMM2 = x86.Register(x86.REG_XMM | 2), .XMM3 = x86.Register(x86.REG_XMM | 3), + .XMM4 = x86.Register(x86.REG_XMM | 4), .XMM5 = x86.Register(x86.REG_XMM | 5), + .XMM6 = x86.Register(x86.REG_XMM | 6), .XMM7 = x86.Register(x86.REG_XMM | 7), + .XMM8 = x86.Register(x86.REG_XMM | 8), .XMM9 = x86.Register(x86.REG_XMM | 9), + .XMM10 = x86.Register(x86.REG_XMM | 10), .XMM11 = x86.Register(x86.REG_XMM | 11), + .XMM12 = x86.Register(x86.REG_XMM | 12), .XMM13 = x86.Register(x86.REG_XMM | 13), + .XMM14 = x86.Register(x86.REG_XMM | 14), .XMM15 = x86.Register(x86.REG_XMM | 15), + .XMM16 = x86.Register(x86.REG_XMM | 16), .XMM17 = x86.Register(x86.REG_XMM | 17), + .XMM18 = x86.Register(x86.REG_XMM | 18), .XMM19 = x86.Register(x86.REG_XMM | 19), + .XMM20 = x86.Register(x86.REG_XMM | 20), .XMM21 = x86.Register(x86.REG_XMM | 21), + .XMM22 = x86.Register(x86.REG_XMM | 22), .XMM23 = x86.Register(x86.REG_XMM | 23), + .XMM24 = x86.Register(x86.REG_XMM | 24), .XMM25 = x86.Register(x86.REG_XMM | 25), + .XMM26 = x86.Register(x86.REG_XMM | 26), .XMM27 = x86.Register(x86.REG_XMM | 27), + .XMM28 = x86.Register(x86.REG_XMM | 28), .XMM29 = x86.Register(x86.REG_XMM | 29), + .XMM30 = x86.Register(x86.REG_XMM | 30), .XMM31 = x86.Register(x86.REG_XMM | 31), + + // ----------------------------------------------------------------------------- + // SECTION: 1.7 YMM Registers (YMM0-YMM31) + // ----------------------------------------------------------------------------- + + // YMM (0-31) + .YMM0 = x86.Register(x86.REG_YMM | 0), .YMM1 = x86.Register(x86.REG_YMM | 1), + .YMM2 = x86.Register(x86.REG_YMM | 2), .YMM3 = x86.Register(x86.REG_YMM | 3), + .YMM4 = x86.Register(x86.REG_YMM | 4), .YMM5 = x86.Register(x86.REG_YMM | 5), + .YMM6 = x86.Register(x86.REG_YMM | 6), .YMM7 = x86.Register(x86.REG_YMM | 7), + .YMM8 = x86.Register(x86.REG_YMM | 8), .YMM9 = x86.Register(x86.REG_YMM | 9), + .YMM10 = x86.Register(x86.REG_YMM | 10), .YMM11 = x86.Register(x86.REG_YMM | 11), + .YMM12 = x86.Register(x86.REG_YMM | 12), .YMM13 = x86.Register(x86.REG_YMM | 13), + .YMM14 = x86.Register(x86.REG_YMM | 14), .YMM15 = x86.Register(x86.REG_YMM | 15), + .YMM16 = x86.Register(x86.REG_YMM | 16), .YMM17 = x86.Register(x86.REG_YMM | 17), + .YMM18 = x86.Register(x86.REG_YMM | 18), .YMM19 = x86.Register(x86.REG_YMM | 19), + .YMM20 = x86.Register(x86.REG_YMM | 20), .YMM21 = x86.Register(x86.REG_YMM | 21), + .YMM22 = x86.Register(x86.REG_YMM | 22), .YMM23 = x86.Register(x86.REG_YMM | 23), + .YMM24 = x86.Register(x86.REG_YMM | 24), .YMM25 = x86.Register(x86.REG_YMM | 25), + .YMM26 = x86.Register(x86.REG_YMM | 26), .YMM27 = x86.Register(x86.REG_YMM | 27), + .YMM28 = x86.Register(x86.REG_YMM | 28), .YMM29 = x86.Register(x86.REG_YMM | 29), + .YMM30 = x86.Register(x86.REG_YMM | 30), .YMM31 = x86.Register(x86.REG_YMM | 31), + + // ----------------------------------------------------------------------------- + // SECTION: 1.8 ZMM Registers (ZMM0-ZMM31) + // ----------------------------------------------------------------------------- + + // ZMM (0-31) + .ZMM0 = x86.Register(x86.REG_ZMM | 0), .ZMM1 = x86.Register(x86.REG_ZMM | 1), + .ZMM2 = x86.Register(x86.REG_ZMM | 2), .ZMM3 = x86.Register(x86.REG_ZMM | 3), + .ZMM4 = x86.Register(x86.REG_ZMM | 4), .ZMM5 = x86.Register(x86.REG_ZMM | 5), + .ZMM6 = x86.Register(x86.REG_ZMM | 6), .ZMM7 = x86.Register(x86.REG_ZMM | 7), + .ZMM8 = x86.Register(x86.REG_ZMM | 8), .ZMM9 = x86.Register(x86.REG_ZMM | 9), + .ZMM10 = x86.Register(x86.REG_ZMM | 10), .ZMM11 = x86.Register(x86.REG_ZMM | 11), + .ZMM12 = x86.Register(x86.REG_ZMM | 12), .ZMM13 = x86.Register(x86.REG_ZMM | 13), + .ZMM14 = x86.Register(x86.REG_ZMM | 14), .ZMM15 = x86.Register(x86.REG_ZMM | 15), + .ZMM16 = x86.Register(x86.REG_ZMM | 16), .ZMM17 = x86.Register(x86.REG_ZMM | 17), + .ZMM18 = x86.Register(x86.REG_ZMM | 18), .ZMM19 = x86.Register(x86.REG_ZMM | 19), + .ZMM20 = x86.Register(x86.REG_ZMM | 20), .ZMM21 = x86.Register(x86.REG_ZMM | 21), + .ZMM22 = x86.Register(x86.REG_ZMM | 22), .ZMM23 = x86.Register(x86.REG_ZMM | 23), + .ZMM24 = x86.Register(x86.REG_ZMM | 24), .ZMM25 = x86.Register(x86.REG_ZMM | 25), + .ZMM26 = x86.Register(x86.REG_ZMM | 26), .ZMM27 = x86.Register(x86.REG_ZMM | 27), + .ZMM28 = x86.Register(x86.REG_ZMM | 28), .ZMM29 = x86.Register(x86.REG_ZMM | 29), + .ZMM30 = x86.Register(x86.REG_ZMM | 30), .ZMM31 = x86.Register(x86.REG_ZMM | 31), + + // ----------------------------------------------------------------------------- + // SECTION: 1.9 Opmask Registers (K0-K7) + // ----------------------------------------------------------------------------- + + // Opmask registers + .K0 = x86.Register(x86.REG_K | 0), .K1 = x86.Register(x86.REG_K | 1), + .K2 = x86.Register(x86.REG_K | 2), .K3 = x86.Register(x86.REG_K | 3), + .K4 = x86.Register(x86.REG_K | 4), .K5 = x86.Register(x86.REG_K | 5), + .K6 = x86.Register(x86.REG_K | 6), .K7 = x86.Register(x86.REG_K | 7), + + // ----------------------------------------------------------------------------- + // SECTION: 1.10 Segment Registers (ES-GS) + // ----------------------------------------------------------------------------- + + // Segment registers + .ES = x86.Register(x86.REG_SEG | 0), .CS = x86.Register(x86.REG_SEG | 1), + .SS = x86.Register(x86.REG_SEG | 2), .DS = x86.Register(x86.REG_SEG | 3), + .FS = x86.Register(x86.REG_SEG | 4), .GS = x86.Register(x86.REG_SEG | 5), + + // ----------------------------------------------------------------------------- + // SECTION: 1.11 Control and Debug Registers + // ----------------------------------------------------------------------------- + + // Control registers + .CR0 = x86.Register(x86.REG_CR | 0), .CR2 = x86.Register(x86.REG_CR | 2), + .CR3 = x86.Register(x86.REG_CR | 3), .CR4 = x86.Register(x86.REG_CR | 4), + .CR8 = x86.Register(x86.REG_CR | 8), + + // Debug registers + .DR0 = x86.Register(x86.REG_DR | 0), .DR1 = x86.Register(x86.REG_DR | 1), + .DR2 = x86.Register(x86.REG_DR | 2), .DR3 = x86.Register(x86.REG_DR | 3), + .DR6 = x86.Register(x86.REG_DR | 6), .DR7 = x86.Register(x86.REG_DR | 7), + + // ----------------------------------------------------------------------------- + // SECTION: 1.12 Other Registers (BND, MM, ST) + // ----------------------------------------------------------------------------- + + // Bound registers (MPX) + .BND0 = x86.Register(x86.REG_BND | 0), .BND1 = x86.Register(x86.REG_BND | 1), + .BND2 = x86.Register(x86.REG_BND | 2), .BND3 = x86.Register(x86.REG_BND | 3), + + // MMX registers + .MM0 = x86.Register(x86.REG_MM | 0), .MM1 = x86.Register(x86.REG_MM | 1), + .MM2 = x86.Register(x86.REG_MM | 2), .MM3 = x86.Register(x86.REG_MM | 3), + .MM4 = x86.Register(x86.REG_MM | 4), .MM5 = x86.Register(x86.REG_MM | 5), + .MM6 = x86.Register(x86.REG_MM | 6), .MM7 = x86.Register(x86.REG_MM | 7), + + // x87 FPU registers + .ST0 = x86.Register(x86.REG_ST | 0), .ST1 = x86.Register(x86.REG_ST | 1), + .ST2 = x86.Register(x86.REG_ST | 2), .ST3 = x86.Register(x86.REG_ST | 3), + .ST4 = x86.Register(x86.REG_ST | 4), .ST5 = x86.Register(x86.REG_ST | 5), + .ST6 = x86.Register(x86.REG_ST | 6), .ST7 = x86.Register(x86.REG_ST | 7), + + // Special: RIP for RIP-relative addressing + .RIP = x86.Register(0xFFFE), +} \ No newline at end of file diff --git a/core/rexcode/isa/x86/tablegen/encoding_table.odin b/core/rexcode/isa/x86/tablegen/encoding_table.odin index bcd20bf28..9390789f7 100644 --- a/core/rexcode/isa/x86/tablegen/encoding_table.odin +++ b/core/rexcode/isa/x86/tablegen/encoding_table.odin @@ -12,7 +12,7 @@ package rexcode_x86_tablegen // Operand_Type list satisfies the user's Instruction operands. @(rodata) -ENCODING_TABLE: [Mnemonic][]Encoding = { +ENCODING_TABLE := [Mnemonic][]Encoding{ .INVALID = {}, // ------------------------------------------------------------------------- @@ -1000,6 +1000,8 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { }, .MOVSD = { {.MOVSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA5, 0, {rep_ok=true}}, + {.MOVSD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x10, 0, {esc=._0F, prefix=PREFIX_F2}}, + {.MOVSD, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x11, 0, {esc=._0F, prefix=PREFIX_F2}}, }, .MOVSQ = { {.MOVSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA5, 0, {rep_ok=true, force_rex_w=true}}, @@ -1014,7 +1016,8 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { {.CMPSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {rep_ok=true, opsize_16=true}}, }, .CMPSD = { - {.CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {rep_ok=true}}, + {.CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {rep_ok=true}}, + {.CMPSD, {.XMM, .XMM_M64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=PREFIX_F2}}, }, .CMPSQ = { {.CMPSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {rep_ok=true, force_rex_w=true}}, @@ -1265,10 +1268,6 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { {.MOVSS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x10, 0, {esc=._0F, prefix=PREFIX_F3}}, {.MOVSS, {.XMM_M32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x11, 0, {esc=._0F, prefix=PREFIX_F3}}, }, - .MOVSD_SSE = { - {.MOVSD_SSE, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x10, 0, {esc=._0F, prefix=PREFIX_F2}}, - {.MOVSD_SSE, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x11, 0, {esc=._0F, prefix=PREFIX_F2}}, - }, .MOVDQA = { {.MOVDQA, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x6F, 0, {esc=._0F, prefix=PREFIX_66}}, {.MOVDQA, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x7F, 0, {esc=._0F, prefix=PREFIX_66}}, @@ -1462,9 +1461,6 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { .CMPSS = { {.CMPSS, {.XMM, .XMM_M32, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=PREFIX_F3}}, }, - .CMPSD_SSE = { - {.CMPSD_SSE, {.XMM, .XMM_M64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=PREFIX_F2}}, - }, .COMISS = { {.COMISS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x2F, 0, {esc=._0F}}, }, @@ -2396,6 +2392,84 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { {.VMOVNTDQA, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x2A, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0}}, {.VMOVNTDQA, {.YMM, .M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x2A, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1}}, }, + .VADDSUBPS = { + {.VADDSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L0}}, + {.VADDSUBPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L1}}, + }, + .VADDSUBPD = { + {.VADDSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0}}, + {.VADDSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1}}, + }, + .VHADDPS = { // <-- the instruction you named + {.VHADDPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L0}}, + {.VHADDPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L1}}, + }, + .VHADDPD = { + {.VHADDPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0}}, + {.VHADDPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1}}, + }, + .VHSUBPS = { + {.VHSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L0}}, + {.VHSUBPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L1}}, + }, + .VHSUBPD = { + {.VHSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0}}, + {.VHSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1}}, + }, + .VLDDQU = { // 2-operand (load only) + {.VLDDQU, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF0, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L0}}, + {.VLDDQU, {.YMM, .M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF0, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L1}}, + }, + .VMOVDDUP = { + {.VMOVDDUP, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L0}}, + {.VMOVDDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=PREFIX_F2, vex_type=.VEX, vex_l=.L1}}, + }, + .VMOVSLDUP = { + {.VMOVSLDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=PREFIX_F3, vex_type=.VEX, vex_l=.L0}}, + {.VMOVSLDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=PREFIX_F3, vex_type=.VEX, vex_l=.L1}}, + }, + .VMOVSHDUP = { + {.VMOVSHDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x16, 0, {esc=._0F, prefix=PREFIX_F3, vex_type=.VEX, vex_l=.L0}}, + {.VMOVSHDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x16, 0, {esc=._0F, prefix=PREFIX_F3, vex_type=.VEX, vex_l=.L1}}, + }, + // VEX.128.66.0F3A. — ESTR* also have a W1 (RAX/RDX) variant; W0 shown to match the SSE entries. + .VPCMPESTRI = { + {.VPCMPESTRI, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x61, 0, {esc=._0F3A, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + }, + .VPCMPESTRM = { + {.VPCMPESTRM, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x60, 0, {esc=._0F3A, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + }, + .VPCMPISTRI = { + {.VPCMPISTRI, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x63, 0, {esc=._0F3A, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0}}, + }, + .VPCMPISTRM = { + {.VPCMPISTRM, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x62, 0, {esc=._0F3A, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0}}, + }, + // VEX.128/256.66.0F38.W0 element broadcasts (AVX2). reg-source + memory-source forms, mirroring .VBROADCASTSS + .VPBROADCASTB = { + {.VPBROADCASTB, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTB, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + {.VPBROADCASTB, {.XMM, .M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTB, {.YMM, .M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + }, + .VPBROADCASTW = { + {.VPBROADCASTW, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTW, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + {.VPBROADCASTW, {.XMM, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTW, {.YMM, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + }, + .VPBROADCASTD = { + {.VPBROADCASTD, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTD, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + {.VPBROADCASTD, {.XMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTD, {.YMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + }, + .VPBROADCASTQ = { + {.VPBROADCASTQ, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTQ, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + {.VPBROADCASTQ, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L0, vex_w=.W0}}, + {.VPBROADCASTQ, {.YMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.VEX, vex_l=.L1, vex_w=.W0}}, + }, .VCVTPS2PD = { {.VCVTPS2PD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x5A, 0, {esc=._0F, vex_type=.VEX, vex_l=.L0}}, {.VCVTPS2PD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x5A, 0, {esc=._0F, vex_type=.VEX, vex_l=.L1}}, @@ -3733,7 +3807,7 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { {.VPRORVQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x14, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.EVEX, vex_l=.L1, vex_w=.W1}}, {.VPRORVQ, {.ZMM, .ZMM, .ZMM_M512, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x14, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.EVEX, vex_l=.L2, vex_w=.W1}}, }, - // AVX-512 scatter instructions (use M for VSIB addressing) + // AVX-512 scatter instructions (u. M for VSIB addressing) .VPSCATTERDD = { {.VPSCATTERDD, {.M, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xA0, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.EVEX, vex_l=.L0, vex_w=.W0}}, {.VPSCATTERDD, {.M, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xA0, 0, {esc=._0F38, prefix=PREFIX_66, vex_type=.EVEX, vex_l=.L1, vex_w=.W0}}, @@ -4843,4 +4917,183 @@ ENCODING_TABLE: [Mnemonic][]Encoding = { {.RDSEED, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, modrm_reg_ext=true}}, {.RDSEED, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, modrm_reg_ext=true, force_rex_w=true}}, }, + // ------------------------------------------------------------------------- + // SECTION: 8.23 Additional System / GPR Encodings + // ------------------------------------------------------------------------- + .SWAPGS = { // 0F 01 F8 + {.SWAPGS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xF8, {esc=._0F}}, + }, + .MONITOR = { // 0F 01 C8 + {.MONITOR, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xC8, {esc=._0F}}, + }, + .MWAIT = { // 0F 01 C9 + {.MWAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xC9, {esc=._0F}}, + }, + .CLAC = { // 0F 01 CA + {.CLAC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xCA, {esc=._0F}}, + }, + .STAC = { // 0F 01 CB + {.STAC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xCB, {esc=._0F}}, + }, + .RDFSBASE = { // F3 0F AE /0 + {.RDFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 0, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + {.RDFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 0, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3, force_rex_w=true}}, + }, + .RDGSBASE = { // F3 0F AE /1 + {.RDGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 1, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + {.RDGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 1, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3, force_rex_w=true}}, + }, + .WRFSBASE = { // F3 0F AE /2 + {.WRFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 2, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + {.WRFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 2, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3, force_rex_w=true}}, + }, + .WRGSBASE = { // F3 0F AE /3 + {.WRGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 3, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + {.WRGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 3, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3, force_rex_w=true}}, + }, + .PTWRITE = { // F3 0F AE /4 + {.PTWRITE, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 4, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + {.PTWRITE, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 4, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3, force_rex_w=true}}, + }, + .RDPID = { // F3 0F C7 /7 (r64 in 64-bit mode, no REX.W) + {.RDPID, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + }, + .WBNOINVD = { // F3 0F 09 + {.WBNOINVD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x09, 0, {esc=._0F, prefix=PREFIX_F3}}, + }, + .SERIALIZE = { // NP 0F 01 E8 + {.SERIALIZE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xE8, {esc=._0F}}, + }, + .PREFETCH = { // 0F 0D /0 + {.PREFETCH, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0x0D, 0, {esc=._0F, modrm_reg_ext=true}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.24 WAITPKG Encodings + // ------------------------------------------------------------------------- + .TPAUSE = { // 66 0F AE /6 + {.TPAUSE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_66}}, + }, + .UMONITOR = { // F3 0F AE /6 + {.UMONITOR, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F3}}, + }, + .UMWAIT = { // F2 0F AE /6 + {.UMWAIT, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, modrm_reg_ext=true, prefix=PREFIX_F2}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.25 Direct Store / Enqueue Store Encodings + // ------------------------------------------------------------------------- + .MOVDIRI = { // NP 0F 38 F9 /r (store r -> m) + {.MOVDIRI, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xF9, 0, {esc=._0F38}}, + {.MOVDIRI, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xF9, 0, {esc=._0F38, force_rex_w=true}}, + }, + .MOVDIR64B = { // 66 0F 38 F8 /r (r=dest addr, m512=src) + {.MOVDIR64B, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF8, 0, {esc=._0F38, prefix=PREFIX_66}}, + }, + .ENQCMD = { // F2 0F 38 F8 /r + {.ENQCMD, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF8, 0, {esc=._0F38, prefix=PREFIX_F2}}, + }, + .ENQCMDS = { // F3 0F 38 F8 /r + {.ENQCMDS, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF8, 0, {esc=._0F38, prefix=PREFIX_F3}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.26 Remote Atomic Operation (RAO-INT) Encodings + // ------------------------------------------------------------------------- + .AADD = { // NP 0F 38 FC /r + {.AADD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38}}, + {.AADD, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, force_rex_w=true}}, + }, + .AAND = { // 66 0F 38 FC /r + {.AAND, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=PREFIX_66}}, + {.AAND, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=PREFIX_66, force_rex_w=true}}, + }, + .AOR = { // F2 0F 38 FC /r + {.AOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=PREFIX_F2}}, + {.AOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=PREFIX_F2, force_rex_w=true}}, + }, + .AXOR = { // F3 0F 38 FC /r + {.AXOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=PREFIX_F3}}, + {.AXOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=PREFIX_F3, force_rex_w=true}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.27 Restricted Transactional Memory (RTM) Encodings + // ------------------------------------------------------------------------- + .XEND = { // NP 0F 01 D5 + {.XEND, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xD5, {esc=._0F}}, + }, + .XTEST = { // NP 0F 01 D6 + {.XTEST, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xD6, {esc=._0F}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.28 AMD SVM Encodings + // ------------------------------------------------------------------------- + .VMRUN = { // 0F 01 D8 + {.VMRUN, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xD8, {esc=._0F}}, + }, + .VMMCALL = { // 0F 01 D9 + {.VMMCALL, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xD9, {esc=._0F}}, + }, + .VMLOAD = { // 0F 01 DA + {.VMLOAD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xDA, {esc=._0F}}, + }, + .VMSAVE = { // 0F 01 DB + {.VMSAVE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xDB, {esc=._0F}}, + }, + .STGI = { // 0F 01 DC + {.STGI, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xDC, {esc=._0F}}, + }, + .CLGI = { // 0F 01 DD + {.CLGI, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xDD, {esc=._0F}}, + }, + .SKINIT = { // 0F 01 DE + {.SKINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xDE, {esc=._0F}}, + }, + .INVLPGA = { // 0F 01 DF + {.INVLPGA, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xDF, {esc=._0F}}, + }, + .INVLPGB = { // NP 0F 01 FE + {.INVLPGB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFE, {esc=._0F}}, + }, + .TLBSYNC = { // NP 0F 01 FF + {.TLBSYNC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFF, {esc=._0F}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.29 AMD SEV-SNP Encodings + // ------------------------------------------------------------------------- + .PVALIDATE = { // F2 0F 01 FF + {.PVALIDATE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFF, {esc=._0F, prefix=PREFIX_F2}}, + }, + .RMPADJUST = { // F3 0F 01 FE + {.RMPADJUST, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFE, {esc=._0F, prefix=PREFIX_F3}}, + }, + .RMPUPDATE = { // F2 0F 01 FE + {.RMPUPDATE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFE, {esc=._0F, prefix=PREFIX_F2}}, + }, + .PSMASH = { // F3 0F 01 FF + {.PSMASH, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFF, {esc=._0F, prefix=PREFIX_F3}}, + }, + + // ------------------------------------------------------------------------- + // SECTION: 8.30 AMD Miscellaneous Encodings + // ------------------------------------------------------------------------- + .CLZERO = { // 0F 01 FC + {.CLZERO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFC, {esc=._0F}}, + }, + .MONITORX = { // NP 0F 01 FA + {.MONITORX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFA, {esc=._0F}}, + }, + .MWAITX = { // NP 0F 01 FB + {.MWAITX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFB, {esc=._0F}}, + }, + .RDPRU = { // 0F 01 FD + {.RDPRU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFD, {esc=._0F}}, + }, + .MCOMMIT = { // F3 0F 01 FA + {.MCOMMIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 0xFA, {esc=._0F, prefix=PREFIX_F3}}, + }, } diff --git a/core/rexcode/isa/x86/tablegen/gen.odin b/core/rexcode/isa/x86/tablegen/gen.odin index 50c41129f..54da4475d 100644 --- a/core/rexcode/isa/x86/tablegen/gen.odin +++ b/core/rexcode/isa/x86/tablegen/gen.odin @@ -23,6 +23,7 @@ package rexcode_x86_tablegen // before Stage B dumps it to raw bytes, so the blobs can never drift from a // well-typed table. +import "base:intrinsics" import "core:fmt" import "core:os" import "core:strings" @@ -34,6 +35,7 @@ import lib "../" // `Mnemonic`/`Encoding` unqualified — its body stays byte-for-byte unedited. Encoding :: lib.Encoding Mnemonic :: lib.Mnemonic +Clobber :: lib.Clobber PREFIX_66 :: lib.PREFIX_66 PREFIX_F3 :: lib.PREFIX_F3 PREFIX_F2 :: lib.PREFIX_F2 @@ -47,21 +49,22 @@ BLOBS := [?]Blob{ {"ENCODE_FORMS", "x86.encode_forms.bin", "Encoding"}, {"ENCODE_RUNS", "x86.encode_runs.bin", "Encode_Run"}, {"ENCODE_RECIPES", "x86.encode_recipes.bin", "Form_Recipe"}, - {"MODRM_TABLE", "x86.modrm.bin", "ModRM_Info"}, - {"SIB_TABLE", "x86.sib.bin", "SIB_Info"}, - {"LEGACY_DECODE_ENTRIES", "x86.legacy.bin", "Decode_Entry"}, - {"VEX_DECODE_ENTRIES", "x86.vex.bin", "VEX_Decode_Entry"}, - {"EVEX_DECODE_ENTRIES", "x86.evex.bin", "VEX_Decode_Entry"}, - {"DECODE_INDEX_LEGACY", "x86.idx_legacy.bin", "Decode_Index"}, - {"DECODE_INDEX_ESC_0F", "x86.idx_0f.bin", "Decode_Index"}, - {"DECODE_INDEX_ESC_0F38", "x86.idx_0f38.bin", "Decode_Index"}, - {"DECODE_INDEX_ESC_0F3A", "x86.idx_0f3a.bin", "Decode_Index"}, - {"VEX_INDEX_0F", "x86.vex_idx_0f.bin", "Decode_Index"}, - {"VEX_INDEX_0F38", "x86.vex_idx_0f38.bin", "Decode_Index"}, - {"VEX_INDEX_0F3A", "x86.vex_idx_0f3a.bin", "Decode_Index"}, - {"EVEX_INDEX_0F", "x86.evex_idx_0f.bin", "Decode_Index"}, - {"EVEX_INDEX_0F38", "x86.evex_idx_0f38.bin","Decode_Index"}, - {"EVEX_INDEX_0F3A", "x86.evex_idx_0f3a.bin","Decode_Index"}, + {"MODRM_TABLE", "x86.modrm.bin", "ModRM_Info"}, + {"SIB_TABLE", "x86.sib.bin", "SIB_Info"}, + {"LEGACY_DECODE_ENTRIES", "x86.legacy.bin", "Decode_Entry"}, + {"VEX_DECODE_ENTRIES", "x86.vex.bin", "VEX_Decode_Entry"}, + {"EVEX_DECODE_ENTRIES", "x86.evex.bin", "VEX_Decode_Entry"}, + {"DECODE_INDEX_LEGACY", "x86.idx_legacy.bin", "Decode_Index"}, + {"DECODE_INDEX_ESC_0F", "x86.idx_0f.bin", "Decode_Index"}, + {"DECODE_INDEX_ESC_0F38", "x86.idx_0f38.bin", "Decode_Index"}, + {"DECODE_INDEX_ESC_0F3A", "x86.idx_0f3a.bin", "Decode_Index"}, + {"VEX_INDEX_0F", "x86.vex_idx_0f.bin", "Decode_Index"}, + {"VEX_INDEX_0F38", "x86.vex_idx_0f38.bin", "Decode_Index"}, + {"VEX_INDEX_0F3A", "x86.vex_idx_0f3a.bin", "Decode_Index"}, + {"EVEX_INDEX_0F", "x86.evex_idx_0f.bin", "Decode_Index"}, + {"EVEX_INDEX_0F38", "x86.evex_idx_0f38.bin", "Decode_Index"}, + {"EVEX_INDEX_0F3A", "x86.evex_idx_0f3a.bin", "Decode_Index"}, + {"CLOBBER_FORMS", "x86.clobber_forms.bin", "Clobber"}, } DIR_GEN :: #directory + "/generated/" @@ -109,6 +112,17 @@ emit_encode_tables :: proc() { } strings.write_string(&sb, "}\n\n") + strings.write_string(&sb, "@(rodata)\n") + fmt.sbprintfln(&sb, "CLOBBER_FORMS := [%d]lib.Clobber{{", total_forms()) + for m in Mnemonic { + forms := CLOBBER_TABLE[m] + assert(len(forms) == len(ENCODING_TABLE[m])) + if len(forms) == 0 { continue } + fmt.sbprintfln(&sb, "\t// .%v", m) + for f in forms { write_clobber(&sb, f, max_name) } + } + strings.write_string(&sb, "}\n\n") + // Run index, one entry per mnemonic (dense, enum-ordinal order). run_name := 0 for m in Mnemonic { run_name = max(run_name, len(reflect.enum_string(m))) } @@ -152,6 +166,63 @@ write_encoding :: proc(sb: ^strings.Builder, e: lib.Encoding, max_name: int) { strings.write_string(sb, "},\n") } +write_clobber :: proc(sb: ^strings.Builder, c: lib.Clobber, max_name: int) { + i := 0 + sep :: proc(sb: ^strings.Builder, i: ^int) { + if i^ > 0 { strings.write_string(sb, ", ") } + i^ += 1 + } + write_flags :: proc(sb: ^strings.Builder, name: string, flags: $T) { + strings.write_string(sb, name) + strings.write_string(sb, "={") + i := 0 + for flag in flags { + if i > 0 { strings.write_string(sb, ", ") } + when intrinsics.type_is_enum(type_of(flag)) { + fmt.sbprintf(sb, ".%s", flag) + } else { + fmt.sbprintf(sb, "%v", flag) + } + i += 1 + } + strings.write_string(sb, "}") + } + + strings.write_string(sb, "\t{") + if c.written != nil { + sep(sb, &i); write_flags(sb, "written", c.written) + } + if c.read != nil { + sep(sb, &i); write_flags(sb, "read", c.read) + } + if c.implicit_wr != nil { + sep(sb, &i); write_flags(sb, "implicit_wr", c.implicit_wr) + } + if c.implicit_rd != nil { + sep(sb, &i); write_flags(sb, "implicit_rd", c.implicit_rd) + } + if c.flags_wr != nil { + sep(sb, &i); write_flags(sb, "flags_wr", c.flags_wr) + } + if c.flags_undef != nil { + sep(sb, &i); write_flags(sb, "flags_undef", c.flags_undef) + } + if c.flags_rd != nil { + sep(sb, &i); write_flags(sb, "flags_rd", c.flags_rd) + } + if c.writes_mem { + sep(sb, &i); strings.write_string(sb, "writes_mem=true") + } + if c.reads_mem { + sep(sb, &i); strings.write_string(sb, "reads_mem=true") + } + if c.side_effects != nil { + sep(sb, &i); write_flags(sb, "side_effects", c.side_effects) + } + + strings.write_string(sb, "},\n") +} + // ----------------------------------------------------------------------------- // Decode side // ----------------------------------------------------------------------------- @@ -456,6 +527,7 @@ emit_writer :: proc() { strings.write_string(&sb, "// GENERATED by ../gen.odin -- DO NOT EDIT.\n") strings.write_string(&sb, "// Stage B: serialize the typed tables above to raw blobs under ../../tables/.\n\n") strings.write_string(&sb, "import \"core:os\"\nimport \"core:fmt\"\n\n") + strings.write_string(&sb, "import tablegen \"..\"\n\n") strings.write_string(&sb, "TABLES :: #directory + \"/../../tables/\"\n\n") strings.write_string(&sb, "raw :: #force_inline proc \"contextless\" (p: rawptr, n: int) -> []u8 {\n") strings.write_string(&sb, "\treturn (cast([^]u8)p)[:n]\n}\n\n") @@ -465,7 +537,11 @@ emit_writer :: proc() { strings.write_string(&sb, "\t\tos.exit(1)\n\t}\n}\n\n") strings.write_string(&sb, "main :: proc() {\n") for b in BLOBS { - fmt.sbprintfln(&sb, "\tw(TABLES + \"%s\", raw(&%s, size_of(%s)))", b.file, b.global, b.global) + if b.global == "CLOBBER_TABLE" { + fmt.sbprintfln(&sb, "\tw(TABLES + \"%s\", raw(&tablegen.%s, size_of(tablegen.%s)))", b.file, b.global, b.global) + } else { + fmt.sbprintfln(&sb, "\tw(TABLES + \"%s\", raw(&%s, size_of(%s)))", b.file, b.global, b.global) + } } strings.write_string(&sb, "}\n") emit_file(DIR_GEN + "writer.odin", &sb) @@ -542,6 +618,14 @@ encoding_forms :: #force_inline proc "contextless" (m: Mnemonic) -> []Encoding { return ENCODE_FORMS[r.start:][:r.count] } +// Per-mnemonic encode forms: the run of ENCODE_FORMS belonging to ` + "`m`" + `. +// Replaces the old ENCODING_TABLE[m] slice; the returned view is into rodata. +@(private, require_results) +clobber_forms :: #force_inline proc "contextless" (m: Mnemonic) -> []Clobber { + r := ENCODE_RUNS[u16(m)] + return CLOBBER_FORMS[r.start:][:r.count] +} + // Flat [prefix][opcode] lookup into a logical [4][256] index table. @(private, require_results) didx :: #force_inline proc "contextless" (t: []Decode_Index, prefix, opcode: u8) -> Decode_Index { diff --git a/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin b/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin index fb1c3c1d4..fc27b7a15 100644 --- a/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin +++ b/core/rexcode/isa/x86/tablegen/generated/decode_tables.odin @@ -144,55 +144,55 @@ SIB_TABLE := [256]lib.SIB_Info{ } @(rodata) -LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ +LEGACY_DECODE_ENTRIES := [1326]lib.Decode_Entry{ {.NONE, 0, 0x00, 0xFF, .ADD, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x01, 0xFF, .ADD, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x01, 0xFF, .ADD, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x01, 0xFF, .ADD, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x01, 0xFF, .ADD, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x02, 0xFF, .ADD, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x03, 0xFF, .ADD, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x03, 0xFF, .ADD, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x03, 0xFF, .ADD, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x03, 0xFF, .ADD, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x04, 0xFF, .ADD, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x05, 0xFF, .ADD, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x05, 0xFF, .ADD, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x05, 0xFF, .ADD, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x05, 0xFF, .ADD, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x08, 0xFF, .OR, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x09, 0xFF, .OR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x09, 0xFF, .OR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x09, 0xFF, .OR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0A, 0xFF, .OR, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x0B, 0xFF, .OR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0B, 0xFF, .OR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0B, 0xFF, .OR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x0B, 0xFF, .OR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x0C, 0xFF, .OR, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x0D, 0xFF, .OR, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x0D, 0xFF, .OR, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0x0D, 0xFF, .OR, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x0D, 0xFF, .OR, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x10, 0xFF, .ADC, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x11, 0xFF, .ADC, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x11, 0xFF, .ADC, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x11, 0xFF, .ADC, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x11, 0xFF, .ADC, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x11, 0xFF, .ADC, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x12, 0xFF, .ADC, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x13, 0xFF, .ADC, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x13, 0xFF, .ADC, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x13, 0xFF, .ADC, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x13, 0xFF, .ADC, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x14, 0xFF, .ADC, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x15, 0xFF, .ADC, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x15, 0xFF, .ADC, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x15, 0xFF, .ADC, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x15, 0xFF, .ADC, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x18, 0xFF, .SBB, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x19, 0xFF, .SBB, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x19, 0xFF, .SBB, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x19, 0xFF, .SBB, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x19, 0xFF, .SBB, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1A, 0xFF, .SBB, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1B, 0xFF, .SBB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x1B, 0xFF, .SBB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1B, 0xFF, .SBB, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x1B, 0xFF, .SBB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x1C, 0xFF, .SBB, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x1D, 0xFF, .SBB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x1D, 0xFF, .SBB, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x1D, 0xFF, .SBB, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x1D, 0xFF, .SBB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x20, 0xFF, .AND, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x21, 0xFF, .AND, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x21, 0xFF, .AND, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, @@ -206,74 +206,74 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0x25, 0xFF, .AND, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x25, 0xFF, .AND, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x28, 0xFF, .SUB, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x29, 0xFF, .SUB, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x29, 0xFF, .SUB, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x29, 0xFF, .SUB, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x29, 0xFF, .SUB, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2A, 0xFF, .SUB, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x2B, 0xFF, .SUB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2B, 0xFF, .SUB, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2B, 0xFF, .SUB, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x2B, 0xFF, .SUB, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x2C, 0xFF, .SUB, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x2D, 0xFF, .SUB, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x2D, 0xFF, .SUB, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x2D, 0xFF, .SUB, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0x2D, 0xFF, .SUB, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x30, 0xFF, .XOR, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x31, 0xFF, .XOR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x31, 0xFF, .XOR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x31, 0xFF, .XOR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x32, 0xFF, .XOR, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x33, 0xFF, .XOR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x33, 0xFF, .XOR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x33, 0xFF, .XOR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x33, 0xFF, .XOR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x34, 0xFF, .XOR, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x35, 0xFF, .XOR, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x35, 0xFF, .XOR, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x35, 0xFF, .XOR, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x38, 0xFF, .CMP, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x39, 0xFF, .CMP, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x39, 0xFF, .CMP, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x39, 0xFF, .CMP, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x39, 0xFF, .CMP, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3A, 0xFF, .CMP, {.R8, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x3B, 0xFF, .CMP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3B, 0xFF, .CMP, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3B, 0xFF, .CMP, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x3B, 0xFF, .CMP, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x3C, 0xFF, .CMP, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x3D, 0xFF, .CMP, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, - {.NONE, 0, 0x3D, 0xFF, .CMP, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x3D, 0xFF, .CMP, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0x40, 0xFF, .INC, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, + {.NONE, 0, 0x3D, 0xFF, .CMP, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0x3D, 0xFF, .CMP, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0x40, 0xFF, .INC, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, + {.NONE, 0, 0x40, 0xFF, .INC, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, {.NONE, 0, 0x48, 0xFF, .DEC, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, {.NONE, 0, 0x48, 0xFF, .DEC, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {mode_32_only=true, op_count=1}}, {.NONE, 0, 0x50, 0xFF, .PUSH, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x50, 0xFF, .PUSH, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {default_64=true, op_count=1}}, {.NONE, 0, 0x58, 0xFF, .POP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {default_64=true, op_count=1}}, {.NONE, 0, 0x58, 0xFF, .POP, {.R16, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x62, 0xFF, .BOUND, {.R16, .M16_16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {mode_32_only=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x62, 0xFF, .BOUND, {.R32, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {mode_32_only=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x62, 0xFF, .BOUND, {.R16, .M16_16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {mode_32_only=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x63, 0xFF, .MOVSXD, {.R64, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x63, 0xFF, .ARPL, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x68, 0xFF, .PUSH, {.IMM16, .NONE, .NONE, .NONE}, {.IW, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x68, 0xFF, .PUSH, {.IMM32, .NONE, .NONE, .NONE}, {.ID, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x69, 0xFF, .IMUL, {.R16, .RM16, .IMM16, .NONE}, {.REG, .MR, .IW, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x69, 0xFF, .IMUL, {.R64, .RM64, .IMM32, .NONE}, {.REG, .MR, .ID, .NONE}, {force_rex_w=true, op_count=3, needs_modrm=true}}, + {.NONE, 0, 0x69, 0xFF, .IMUL, {.R16, .RM16, .IMM16, .NONE}, {.REG, .MR, .IW, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x69, 0xFF, .IMUL, {.R32, .RM32, .IMM32, .NONE}, {.REG, .MR, .ID, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x6A, 0xFF, .PUSH, {.IMM8SX, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R32, .RM32, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R16, .RM16, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {op_count=3, needs_modrm=true}}, + {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R32, .RM32, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {op_count=3, needs_modrm=true}}, {.NONE, 0, 0x6B, 0xFF, .IMUL, {.R64, .RM64, .IMM8SX, .NONE}, {.REG, .MR, .IB, .NONE}, {force_rex_w=true, op_count=3, needs_modrm=true}}, {.NONE, 0, 0x70, 0xFF, .JO, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x71, 0xFF, .JNO, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x72, 0xFF, .JNAE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x72, 0xFF, .JC, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x72, 0xFF, .JB, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x73, 0xFF, .JAE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x72, 0xFF, .JNAE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x73, 0xFF, .JNB, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x73, 0xFF, .JAE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x73, 0xFF, .JNC, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x74, 0xFF, .JZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x74, 0xFF, .JE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x75, 0xFF, .JNZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x74, 0xFF, .JZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x75, 0xFF, .JNE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x75, 0xFF, .JNZ, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x76, 0xFF, .JBE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x76, 0xFF, .JNA, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x77, 0xFF, .JA, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, @@ -284,14 +284,14 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0x7A, 0xFF, .JPE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7B, 0xFF, .JNP, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7B, 0xFF, .JPO, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7C, 0xFF, .JNGE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7C, 0xFF, .JL, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7D, 0xFF, .JNL, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x7C, 0xFF, .JNGE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7D, 0xFF, .JGE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7E, 0xFF, .JLE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x7D, 0xFF, .JNL, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7E, 0xFF, .JNG, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0x7F, 0xFF, .JG, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x7E, 0xFF, .JLE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x7F, 0xFF, .JNLE, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0x7F, 0xFF, .JG, {.REL8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0x80, 0x00, .ADD, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x80, 0x01, .OR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x80, 0x02, .ADC, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -313,8 +313,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0x81, 0x03, .SBB, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x03, .SBB, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x04, .AND, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x81, 0x04, .AND, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x04, .AND, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x81, 0x04, .AND, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x05, .SUB, {.RM16, .IMM16, .NONE, .NONE}, {.MR, .IW, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x05, .SUB, {.RM32, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x81, 0x05, .SUB, {.RM64, .IMM32, .NONE, .NONE}, {.MR, .ID, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -327,8 +327,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0x83, 0x00, .ADD, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x00, .ADD, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x00, .ADD, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x01, .OR, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x01, .OR, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x01, .OR, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x01, .OR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x02, .ADC, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x02, .ADC, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -337,21 +337,21 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0x83, 0x03, .SBB, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x03, .SBB, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x04, .AND, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x04, .AND, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x04, .AND, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x04, .AND, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x05, .SUB, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x05, .SUB, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x05, .SUB, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x06, .XOR, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x83, 0x06, .XOR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x06, .XOR, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x83, 0x06, .XOR, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {lock_ok=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x07, .CMP, {.RM32, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x07, .CMP, {.RM64, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x83, 0x07, .CMP, {.RM16, .IMM8SX, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x84, 0xFF, .TEST, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, - {.NONE, 0, 0x85, 0xFF, .TEST, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x85, 0xFF, .TEST, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x85, 0xFF, .TEST, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, + {.NONE, 0, 0x85, 0xFF, .TEST, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {op_count=2, needs_modrm=true}}, {.NONE, 0, 0x86, 0xFF, .XCHG, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x87, 0xFF, .XCHG, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x87, 0xFF, .XCHG, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {lock_ok=true, op_count=2, needs_modrm=true}}, @@ -373,24 +373,24 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0x8E, 0xFF, .MOV, {.SREG, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {force_rex_w=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0x8F, 0x00, .POP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0x8F, 0x00, .POP, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {default_64=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0x90, 0xFF, .NOP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x90, 0xFF, .XCHG, {.EAX_IMPL, .R32, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x90, 0xFF, .XCHG, {.AX_IMPL, .R16, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0x90, 0xFF, .XCHG, {.RAX_IMPL, .R64, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, + {.NONE, 0, 0x90, 0xFF, .NOP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0x98, 0xFF, .CDQE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0x98, 0xFF, .CWDE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x98, 0xFF, .CBW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, - {.NONE, 0, 0x98, 0xFF, .CDQE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, - {.NONE, 0, 0x99, 0xFF, .CDQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x99, 0xFF, .CWD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, + {.NONE, 0, 0x99, 0xFF, .CDQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x99, 0xFF, .CQO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, - {.NONE, 0, 0x9B, 0xFF, .WAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9B, 0xFF, .FWAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0x9C, 0xFF, .PUSHFQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {default_64=true}}, - {.NONE, 0, 0x9C, 0xFF, .PUSHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, + {.NONE, 0, 0x9B, 0xFF, .WAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9C, 0xFF, .PUSHFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0x9C, 0xFF, .PUSHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, + {.NONE, 0, 0x9C, 0xFF, .PUSHFQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {default_64=true}}, + {.NONE, 0, 0x9D, 0xFF, .POPFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9D, 0xFF, .POPF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, {.NONE, 0, 0x9D, 0xFF, .POPFQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {default_64=true}}, - {.NONE, 0, 0x9D, 0xFF, .POPFD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9E, 0xFF, .SAHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0x9F, 0xFF, .LAHF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xA0, 0xFF, .MOVABS, {.AL_IMPL, .MOFFS8, .NONE, .NONE}, {.IMPL, .IQ, .NONE, .NONE}, {op_count=2}}, @@ -409,35 +409,35 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xA3, 0xFF, .MOV, {.MOFFS16, .AX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA3, 0xFF, .MOV, {.MOFFS32, .EAX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA3, 0xFF, .MOV, {.MOFFS64, .RAX_IMPL, .NONE, .NONE}, {.IQ, .IMPL, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, - {.NONE, 0, 0xA4, 0xFF, .MOVSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA4, 0xFF, .MOVS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA4, 0xFF, .MOVSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA5, 0xFF, .MOVSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA5, 0xFF, .MOVSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xA5, 0xFF, .MOVSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xA6, 0xFF, .CMPS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA6, 0xFF, .CMPSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xA7, 0xFF, .CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA7, 0xFF, .CMPSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xA7, 0xFF, .CMPSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, - {.NONE, 0, 0xA7, 0xFF, .CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xA8, 0xFF, .TEST, {.AL_IMPL, .IMM8, .NONE, .NONE}, {.IMPL, .IB, .NONE, .NONE}, {op_count=2}}, - {.NONE, 0, 0xA9, 0xFF, .TEST, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA9, 0xFF, .TEST, {.AX_IMPL, .IMM16, .NONE, .NONE}, {.IMPL, .IW, .NONE, .NONE}, {op_count=2}}, + {.NONE, 0, 0xA9, 0xFF, .TEST, {.EAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xA9, 0xFF, .TEST, {.RAX_IMPL, .IMM32, .NONE, .NONE}, {.IMPL, .ID, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, - {.NONE, 0, 0xAA, 0xFF, .STOS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAA, 0xFF, .STOSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xAB, 0xFF, .STOSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, + {.NONE, 0, 0xAA, 0xFF, .STOS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAB, 0xFF, .STOSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xAB, 0xFF, .STOSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, {.NONE, 0, 0xAB, 0xFF, .STOSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, - {.NONE, 0, 0xAC, 0xFF, .LODSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAC, 0xFF, .LODS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xAC, 0xFF, .LODSB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAD, 0xFF, .LODSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, - {.NONE, 0, 0xAD, 0xFF, .LODSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAD, 0xFF, .LODSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, - {.NONE, 0, 0xAE, 0xFF, .SCAS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xAD, 0xFF, .LODSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAE, 0xFF, .SCASB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, - {.NONE, 0, 0xAF, 0xFF, .SCASD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, + {.NONE, 0, 0xAE, 0xFF, .SCAS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xAF, 0xFF, .SCASQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true, rep_ok=true}}, {.NONE, 0, 0xAF, 0xFF, .SCASW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true, rep_ok=true}}, + {.NONE, 0, 0xAF, 0xFF, .SCASD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {rep_ok=true}}, {.NONE, 0, 0xB0, 0xFF, .MOV, {.R8, .IMM8, .NONE, .NONE}, {.OP_R, .IB, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xB8, 0xFF, .MOVABS, {.R64, .IMM64, .NONE, .NONE}, {.OP_R, .IQ, .NONE, .NONE}, {force_rex_w=true, op_count=2}}, {.NONE, 0, 0xB8, 0xFF, .MOV, {.R32, .IMM32, .NONE, .NONE}, {.OP_R, .ID, .NONE, .NONE}, {op_count=2}}, @@ -450,12 +450,12 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xC0, 0x04, .SHL, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x05, .SHR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC0, 0x07, .SAR, {.RM8, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x00, .ROL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x00, .ROL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x00, .ROL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x00, .ROL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x01, .ROR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, - {.NONE, 0, 0xC1, 0x01, .ROR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x01, .ROR, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x01, .ROR, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, + {.NONE, 0, 0xC1, 0x01, .ROR, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x02, .RCL, {.RM16, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x02, .RCL, {.RM64, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {force_rex_w=true, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xC1, 0x02, .RCL, {.RM32, .IMM8, .NONE, .NONE}, {.MR, .IB, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -482,9 +482,9 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xCC, 0xFF, .INT3, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xCD, 0xFF, .INT, {.IMM8, .NONE, .NONE, .NONE}, {.IB, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xCE, 0xFF, .INTO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xCF, 0xFF, .IRET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, - {.NONE, 0, 0xCF, 0xFF, .IRETQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, {.NONE, 0, 0xCF, 0xFF, .IRETD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0xCF, 0xFF, .IRETQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {force_rex_w=true}}, + {.NONE, 0, 0xCF, 0xFF, .IRET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {opsize_16=true}}, {.NONE, 0, 0xD0, 0x00, .ROL, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x01, .ROR, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, {.NONE, 0, 0xD0, 0x02, .RCL, {.RM8, .ONE_IMPL, .NONE, .NONE}, {.MR, .IMPL, .NONE, .NONE}, {modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -565,8 +565,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xD9, 0x03, .FSTP, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x04, .FLDENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x05, .FLDCW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xD9, 0x06, .FNSTENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x06, .FSTENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xD9, 0x06, .FNSTENV, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x07, .FSTCW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0x07, .FNSTCW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xD9, 0xC0, .FLD, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, @@ -625,8 +625,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xDB, 0xD8, .FCMOVNU, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xE2, .FNCLEX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xDB, 0xE2, .FCLEX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, - {.NONE, 0, 0xDB, 0xE3, .FINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xDB, 0xE3, .FNINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, + {.NONE, 0, 0xDB, 0xE3, .FINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {}}, {.NONE, 0, 0xDB, 0xE8, .FUCOMI, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xF0, .FCOMI, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDB, 0xFF, .FILD, {.M32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {op_count=1, needs_modrm=true}}, @@ -650,8 +650,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xDD, 0x04, .FRSTOR, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0x06, .FSAVE, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0x06, .FNSAVE, {.M, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {.NONE, 0, 0xDD, 0x07, .FNSTSW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0x07, .FSTSW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {.NONE, 0, 0xDD, 0x07, .FNSTSW, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDD, 0xC0, .FFREE, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDD, 0xD0, .FST, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDD, 0xD8, .FSTP, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, @@ -689,8 +689,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {.NONE, 0, 0xDF, 0x06, .FBSTP, {.M80, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDF, 0x07, .FISTP, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {.NONE, 0, 0xDF, 0xC0, .FFREEP, {.STI, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {op_count=1}}, - {.NONE, 0, 0xDF, 0xE0, .FSTSW, {.AX_IMPL, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDF, 0xE0, .FNSTSW, {.AX_IMPL, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {op_count=1}}, + {.NONE, 0, 0xDF, 0xE0, .FSTSW, {.AX_IMPL, .NONE, .NONE, .NONE}, {.IMPL, .NONE, .NONE, .NONE}, {op_count=1}}, {.NONE, 0, 0xDF, 0xE8, .FUCOMIP, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDF, 0xF0, .FCOMIP, {.ST0_IMPL, .STI, .NONE, .NONE}, {.IMPL, .OP_R, .NONE, .NONE}, {op_count=2}}, {.NONE, 0, 0xDF, 0xFF, .FILD, {.M16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {op_count=1, needs_modrm=true}}, @@ -769,16 +769,16 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0x00, 0x03, .LTR, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x04, .VERR, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x00, 0x05, .VERW, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x01, 0x00, .SGDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x00, .SGDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x01, 0x00, .SGDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x01, .SIDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x01, .SIDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x02, .LGDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x02, .LGDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x03, .LIDT, {.M16_64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x03, .LIDT, {.M16_32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x01, 0x04, .SMSW, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x04, .SMSW, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x01, 0x04, .SMSW, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x04, .SMSW, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x06, .LMSW, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x01, 0x07, .INVLPG, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -787,26 +787,49 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0x01, 0xC2, .VMLAUNCH, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xC3, .VMRESUME, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xC4, .VMXOFF, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xC8, .MONITOR, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xC9, .MWAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xCA, .CLAC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xCB, .STAC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xCF, .ENCLS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xD0, .XGETBV, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xD1, .XSETBV, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xD4, .VMFUNC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xD5, .XEND, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xD6, .XTEST, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xD7, .ENCLU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xD8, .VMRUN, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xD9, .VMMCALL, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xDA, .VMLOAD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xDB, .VMSAVE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xDC, .STGI, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xDD, .CLGI, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xDE, .SKINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xDF, .INVLPGA, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xE8, .SERIALIZE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xEE, .RDPKRU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xEF, .WRPKRU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xF8, .SWAPGS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x01, 0xF9, .RDTSCP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xFA, .MONITORX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xFB, .MWAITX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xFC, .CLZERO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xFD, .RDPRU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xFE, .INVLPGB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x01, 0xFF, .TLBSYNC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x02, 0xFF, .LAR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x02, 0xFF, .LAR, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x02, 0xFF, .LAR, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x02, 0xFF, .LAR, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x03, 0xFF, .LSL, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x03, 0xFF, .LSL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x03, 0xFF, .LSL, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x03, 0xFF, .LSL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x03, 0xFF, .LSL, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x05, 0xFF, .SYSCALL, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x06, 0xFF, .CLTS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x07, 0xFF, .SYSRET, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x08, 0xFF, .INVD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x09, 0xFF, .WBINVD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, {._0F, 0, 0x0B, 0xFF, .UD2, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F}}, + {._0F, 0, 0x0D, 0x00, .PREFETCH, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x0D, 0x01, .PREFETCHW, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x10, 0xFF, .MOVUPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x11, 0xFF, .MOVUPS, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -823,9 +846,9 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0x18, 0x02, .PREFETCHT1, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x18, 0x03, .PREFETCHT2, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x1C, 0x00, .CLDEMOTE, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0x1F, 0x00, .NOP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x1F, 0x00, .NOP, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x1F, 0x00, .NOP, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0x1F, 0x00, .NOP, {.RM16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0x20, 0xFF, .MOV, {.R64, .CR, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x21, 0xFF, .MOV, {.R64, .DR, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x22, 0xFF, .MOV, {.CR, .R64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -931,8 +954,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x4F, 0xFF, .CMOVG, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x50, 0xFF, .MOVMSKPS, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x50, 0xFF, .MOVMSKPS, {.R64, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x50, 0xFF, .MOVMSKPS, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x51, 0xFF, .SQRTPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x52, 0xFF, .RSQRTPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0x53, 0xFF, .RCPPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, @@ -1039,12 +1062,12 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM32, .R32, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM16, .R16, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xAD, 0xFF, .SHRD, {.RM64, .R64, .CL_IMPL, .NONE}, {.MR, .REG, .IMPL, .NONE}, {esc=._0F, force_rex_w=true, op_count=3, needs_modrm=true}}, - {._0F, 0, 0xAE, 0x00, .FXSAVE, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x00, .FXSAVE64, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xAE, 0x01, .FXRSTOR64, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xAE, 0x00, .FXSAVE, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x01, .FXRSTOR, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xAE, 0x04, .XSAVE64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xAE, 0x01, .FXRSTOR64, {.M512, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x04, .XSAVE, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xAE, 0x04, .XSAVE64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x05, .XRSTOR64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x05, .XRSTOR, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xAE, 0x06, .XSAVEOPT64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, @@ -1057,9 +1080,9 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0xAF, 0xFF, .IMUL, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xAF, 0xFF, .IMUL, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB0, 0xFF, .CMPXCHG, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xB1, 0xFF, .CMPXCHG, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB3, 0xFF, .BTR, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB3, 0xFF, .BTR, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xB3, 0xFF, .BTR, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, @@ -1096,29 +1119,29 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 0, 0xBF, 0xFF, .MOVSX, {.R64, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xBF, 0xFF, .MOVSX, {.R32, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC0, 0xFF, .XADD, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, - {._0F, 0, 0xC1, 0xFF, .XADD, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC1, 0xFF, .XADD, {.RM32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, + {._0F, 0, 0xC1, 0xFF, .XADD, {.RM64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC1, 0xFF, .XADD, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, lock_ok=true, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC2, 0xFF, .CMPPS, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xC6, 0xFF, .SHUFPS, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, op_count=3, needs_modrm=true}}, {._0F, 0, 0xC7, 0x01, .CMPXCHG8B, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x01, .CMPXCHG16B, {.M128, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, lock_ok=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x03, .XRSTORS64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x03, .XRSTORS, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x03, .XRSTORS64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x04, .XSAVEC64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x04, .XSAVEC, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x05, .XSAVES, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x05, .XSAVES64, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x06, .RDRAND, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x06, .VMPTRLD, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x06, .RDRAND, {.R16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x06, .VMPTRLD, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x06, .RDRAND, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x06, .RDRAND, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC7, 0x07, .RDSEED, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x07, .VMPTRST, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 0, 0xC7, 0x07, .RDSEED, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x07, .RDSEED, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 0, 0xC7, 0x07, .RDSEED, {.R16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, - {._0F, 0, 0xC8, 0xFF, .BSWAP, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xC8, 0xFF, .BSWAP, {.R64, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, force_rex_w=true, op_count=1}}, + {._0F, 0, 0xC8, 0xFF, .BSWAP, {.R32, .NONE, .NONE, .NONE}, {.OP_R, .NONE, .NONE, .NONE}, {esc=._0F, op_count=1}}, {._0F, 0, 0xFF, 0xFF, .UD0, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, op_count=2, needs_modrm=true}}, {._0F, 1, 0x10, 0xFF, .MOVUPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x11, 0xFF, .MOVUPD, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, @@ -1133,8 +1156,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 1, 0x2B, 0xFF, .MOVNTPD, {.M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x2E, 0xFF, .UCOMISD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x2F, 0xFF, .COMISD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x50, 0xFF, .MOVMSKPD, {.R64, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x50, 0xFF, .MOVMSKPD, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x50, 0xFF, .MOVMSKPD, {.R64, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x51, 0xFF, .SQRTPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x54, 0xFF, .ANDPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x55, 0xFF, .ANDNPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, @@ -1182,6 +1205,7 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 1, 0x7E, 0xFF, .MOVD, {.RM32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7E, 0xFF, .MOVQ, {.R64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7F, 0xFF, .MOVDQA, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0xAE, 0x06, .TPAUSE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 1, 0xAE, 0x06, .CLWB, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 1, 0xAE, 0x07, .CLFLUSHOPT, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=1, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 1, 0xC2, 0xFF, .CMPPD, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, op_count=3, needs_modrm=true}}, @@ -1241,12 +1265,16 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 2, 0x01, 0x05, .RSTORSSP, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0x01, 0xE8, .SETSSBSY, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, {._0F, 2, 0x01, 0xEA, .SAVEPREVSSP, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, + {._0F, 2, 0x01, 0xFA, .MCOMMIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, + {._0F, 2, 0x01, 0xFE, .RMPADJUST, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, + {._0F, 2, 0x01, 0xFF, .PSMASH, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, + {._0F, 2, 0x09, 0xFF, .WBNOINVD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, {._0F, 2, 0x10, 0xFF, .MOVSS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x11, 0xFF, .MOVSS, {.XMM_M32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x12, 0xFF, .MOVSLDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x16, 0xFF, .MOVSHDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0x1E, 0x01, .RDSSPQ, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0x1E, 0x01, .RDSSPD, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0x1E, 0x01, .RDSSPQ, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0x1E, 0xFA, .ENDBR64, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, {._0F, 2, 0x1E, 0xFB, .ENDBR32, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2}}, {._0F, 2, 0x2A, 0xFF, .CVTSI2SS, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, @@ -1270,9 +1298,20 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 2, 0x70, 0xFF, .PSHUFHW, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=2, op_count=3, needs_modrm=true}}, {._0F, 2, 0x7E, 0xFF, .MOVQ, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0x7F, 0xFF, .MOVDQU, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 2, 0xAE, 0x05, .INCSSPD, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x00, .RDFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x00, .RDFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x01, .RDGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x01, .RDGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x02, .WRFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x02, .WRFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x03, .WRGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x03, .WRGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x04, .PTWRITE, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x04, .PTWRITE, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x05, .INCSSPQ, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x05, .INCSSPD, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xAE, 0x06, .CLRSSBSY, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xAE, 0x06, .UMONITOR, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xB8, 0xFF, .POPCNT, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 2, 0xB8, 0xFF, .POPCNT, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0xB8, 0xFF, .POPCNT, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, @@ -1284,9 +1323,12 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 2, 0xBD, 0xFF, .LZCNT, {.R16, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, {._0F, 2, 0xC2, 0xFF, .CMPSS, {.XMM, .XMM_M32, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=2, op_count=3, needs_modrm=true}}, {._0F, 2, 0xC7, 0x06, .VMXON, {.M64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 2, 0xC7, 0x07, .RDPID, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=2, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, {._0F, 2, 0xE6, 0xFF, .CVTDQ2PD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, op_count=2, needs_modrm=true}}, - {._0F, 3, 0x10, 0xFF, .MOVSD_SSE, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, - {._0F, 3, 0x11, 0xFF, .MOVSD_SSE, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x01, 0xFE, .RMPUPDATE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=3}}, + {._0F, 3, 0x01, 0xFF, .PVALIDATE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, {esc=._0F, prefix=3}}, + {._0F, 3, 0x10, 0xFF, .MOVSD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x11, 0xFF, .MOVSD, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0x12, 0xFF, .MOVDDUP, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2A, 0xFF, .CVTSI2SD, {.XMM, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2A, 0xFF, .CVTSI2SD, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, @@ -1305,7 +1347,8 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F, 3, 0x70, 0xFF, .PSHUFLW, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=3, op_count=3, needs_modrm=true}}, {._0F, 3, 0x7C, 0xFF, .HADDPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0x7D, 0xFF, .HSUBPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, - {._0F, 3, 0xC2, 0xFF, .CMPSD_SSE, {.XMM, .XMM_M64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=3, op_count=3, needs_modrm=true}}, + {._0F, 3, 0xAE, 0x06, .UMWAIT, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, {esc=._0F, prefix=3, modrm_reg_ext=true, op_count=1, needs_modrm=true}}, + {._0F, 3, 0xC2, 0xFF, .CMPSD, {.XMM, .XMM_M64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=3, op_count=3, needs_modrm=true}}, {._0F, 3, 0xD0, 0xFF, .ADDSUBPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0xE6, 0xFF, .CVTPD2DQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, {._0F, 3, 0xF0, 0xFF, .LDDQU, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, op_count=2, needs_modrm=true}}, @@ -1316,13 +1359,17 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F38, 0, 0xCC, 0xFF, .SHA256MSG1, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xCD, 0xFF, .SHA256MSG2, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R32, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, - {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R16, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R64, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xF0, 0xFF, .MOVBE, {.R16, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F38, 0, 0xF6, 0xFF, .WRSSQ, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xF1, 0xFF, .MOVBE, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF6, 0xFF, .WRSSD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xF6, 0xFF, .WRSSQ, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xF9, 0xFF, .MOVDIRI, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xF9, 0xFF, .MOVDIRI, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xFC, 0xFF, .AADD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, op_count=2, needs_modrm=true}}, + {._0F38, 0, 0xFC, 0xFF, .AADD, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x00, 0xFF, .PSHUFB, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x01, 0xFF, .PHADDW, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x02, 0xFF, .PHADDD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, @@ -1380,15 +1427,24 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ {._0F38, 1, 0xDF, 0xFF, .AESDECLAST, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xF5, 0xFF, .WRUSSD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xF5, 0xFF, .WRUSSQ, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0xF6, 0xFF, .ADCX, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xF6, 0xFF, .ADCX, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0xF6, 0xFF, .ADCX, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0xF8, 0xFF, .MOVDIR64B, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0xFC, 0xFF, .AAND, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=1, force_rex_w=true, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0xFC, 0xFF, .AAND, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=1, op_count=2, needs_modrm=true}}, {._0F38, 2, 0xF6, 0xFF, .ADOX, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 2, 0xF6, 0xFF, .ADOX, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=2, op_count=2, needs_modrm=true}}, + {._0F38, 2, 0xF8, 0xFF, .ENQCMDS, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=2, op_count=2, needs_modrm=true}}, + {._0F38, 2, 0xFC, 0xFF, .AXOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=2, op_count=2, needs_modrm=true}}, + {._0F38, 2, 0xFC, 0xFF, .AXOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=2, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF0, 0xFF, .CRC32, {.R64, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF0, 0xFF, .CRC32, {.R32, .RM8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R64, .RM64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R32, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, {._0F38, 3, 0xF1, 0xFF, .CRC32, {.R32, .RM16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, + {._0F38, 3, 0xF8, 0xFF, .ENQCMD, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, + {._0F38, 3, 0xFC, 0xFF, .AOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=3, op_count=2, needs_modrm=true}}, + {._0F38, 3, 0xFC, 0xFF, .AOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F38, prefix=3, force_rex_w=true, op_count=2, needs_modrm=true}}, {._0F3A, 0, 0xCC, 0xFF, .SHA1RNDS4, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x08, 0xFF, .ROUNDPS, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x09, 0xFF, .ROUNDPD, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, op_count=3, needs_modrm=true}}, @@ -1418,20 +1474,20 @@ LEGACY_DECODE_ENTRIES := [1270]lib.Decode_Entry{ } @(rodata) -VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ +VEX_DECODE_ENTRIES := [707]lib.VEX_Decode_Entry{ {._0F, 0, 0x10, 0xFF, .WIG, .L1, .VMOVUPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x10, 0xFF, .WIG, .L0, .VMOVUPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x11, 0xFF, .WIG, .L0, .VMOVUPS, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x11, 0xFF, .WIG, .L1, .VMOVUPS, {.YMM_M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x12, 0xFF, .WIG, .L0, .VMOVHLPS, {.XMM, .XMM, .XMM, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x11, 0xFF, .WIG, .L0, .VMOVUPS, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x12, 0xFF, .WIG, .L0, .VMOVLPS, {.XMM, .XMM, .M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x12, 0xFF, .WIG, .L0, .VMOVHLPS, {.XMM, .XMM, .XMM, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 0, 0x13, 0xFF, .WIG, .L0, .VMOVLPS, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x14, 0xFF, .WIG, .L0, .VUNPCKLPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 0, 0x14, 0xFF, .WIG, .L1, .VUNPCKLPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x15, 0xFF, .WIG, .L1, .VUNPCKHPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x15, 0xFF, .WIG, .L0, .VUNPCKHPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x16, 0xFF, .WIG, .L0, .VMOVHPS, {.XMM, .XMM, .M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x15, 0xFF, .WIG, .L1, .VUNPCKHPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x16, 0xFF, .WIG, .L0, .VMOVLHPS, {.XMM, .XMM, .XMM, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x16, 0xFF, .WIG, .L0, .VMOVHPS, {.XMM, .XMM, .M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 0, 0x17, 0xFF, .WIG, .L0, .VMOVHPS, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x28, 0xFF, .WIG, .L0, .VMOVAPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x28, 0xFF, .WIG, .L1, .VMOVAPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, @@ -1443,30 +1499,30 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 0, 0x2F, 0xFF, .WIG, .LIG, .VCOMISS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 0, 0x41, 0xFF, .W0, .L1, .KANDW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x41, 0xFF, .W1, .L1, .KANDQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x42, 0xFF, .W1, .L1, .KANDNQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x42, 0xFF, .W0, .L1, .KANDNW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x42, 0xFF, .W1, .L1, .KANDNQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x44, 0xFF, .W1, .L0, .KNOTQ, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x44, 0xFF, .W0, .L0, .KNOTW, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x45, 0xFF, .W0, .L1, .KORW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x45, 0xFF, .W1, .L1, .KORQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x46, 0xFF, .W1, .L1, .KXNORQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x46, 0xFF, .W0, .L1, .KXNORW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x47, 0xFF, .W1, .L1, .KXORQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x46, 0xFF, .W1, .L1, .KXNORQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x47, 0xFF, .W0, .L1, .KXORW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x4A, 0xFF, .W0, .L1, .KADDW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x47, 0xFF, .W1, .L1, .KXORQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x4A, 0xFF, .W1, .L1, .KADDQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x4A, 0xFF, .W0, .L1, .KADDW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x4B, 0xFF, .W1, .L1, .KUNPCKDQ, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x4B, 0xFF, .W0, .L1, .KUNPCKWD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x50, 0xFF, .WIG, .L1, .VMOVMSKPS, {.R32, .YMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x50, 0xFF, .WIG, .L0, .VMOVMSKPS, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x51, 0xFF, .WIG, .L1, .VSQRTPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x51, 0xFF, .WIG, .L0, .VSQRTPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x52, 0xFF, .WIG, .L1, .VRSQRTPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x51, 0xFF, .WIG, .L1, .VSQRTPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x52, 0xFF, .WIG, .L0, .VRSQRTPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x53, 0xFF, .WIG, .L0, .VRCPPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x52, 0xFF, .WIG, .L1, .VRSQRTPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x53, 0xFF, .WIG, .L1, .VRCPPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x54, 0xFF, .WIG, .L0, .VANDPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x53, 0xFF, .WIG, .L0, .VRCPPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x54, 0xFF, .WIG, .L1, .VANDPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 0, 0x54, 0xFF, .WIG, .L0, .VANDPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 0, 0x55, 0xFF, .WIG, .L0, .VANDNPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 0, 0x55, 0xFF, .WIG, .L1, .VANDNPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x56, 0xFF, .WIG, .L0, .VORPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, @@ -1477,8 +1533,8 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 0, 0x58, 0xFF, .WIG, .L1, .VADDPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 0, 0x59, 0xFF, .WIG, .L0, .VMULPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 0, 0x59, 0xFF, .WIG, .L1, .VMULPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 0, 0x5A, 0xFF, .WIG, .L1, .VCVTPS2PD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x5A, 0xFF, .WIG, .L0, .VCVTPS2PD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x5A, 0xFF, .WIG, .L1, .VCVTPS2PD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x5B, 0xFF, .WIG, .L1, .VCVTDQ2PS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 0, 0x5B, 0xFF, .WIG, .L0, .VCVTDQ2PS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x5C, 0xFF, .WIG, .L0, .VSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, @@ -1497,10 +1553,10 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 0, 0x91, 0xFF, .W0, .L0, .KMOVW, {.M16, .K, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x92, 0xFF, .W0, .L0, .KMOVW, {.K, .R32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x93, 0xFF, .W0, .L0, .KMOVW, {.R32, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x98, 0xFF, .W0, .L0, .KORTESTW, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x98, 0xFF, .W1, .L0, .KORTESTQ, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 0, 0x99, 0xFF, .W1, .L0, .KTESTQ, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x98, 0xFF, .W0, .L0, .KORTESTW, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0x99, 0xFF, .W0, .L0, .KTESTW, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 0, 0x99, 0xFF, .W1, .L0, .KTESTQ, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 0, 0xC2, 0xFF, .WIG, .L0, .VCMPPS, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F, 0, 0xC2, 0xFF, .WIG, .L1, .VCMPPS, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F, 0, 0xC6, 0xFF, .WIG, .L1, .VSHUFPS, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, @@ -1511,22 +1567,22 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0x11, 0xFF, .WIG, .L0, .VMOVUPD, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x12, 0xFF, .WIG, .L0, .VMOVLPD, {.XMM, .XMM, .M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x13, 0xFF, .WIG, .L0, .VMOVLPD, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x14, 0xFF, .WIG, .L0, .VUNPCKLPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x14, 0xFF, .WIG, .L1, .VUNPCKLPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x15, 0xFF, .WIG, .L1, .VUNPCKHPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x14, 0xFF, .WIG, .L0, .VUNPCKLPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x15, 0xFF, .WIG, .L0, .VUNPCKHPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x15, 0xFF, .WIG, .L1, .VUNPCKHPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x16, 0xFF, .WIG, .L0, .VMOVHPD, {.XMM, .XMM, .M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x17, 0xFF, .WIG, .L0, .VMOVHPD, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x28, 0xFF, .WIG, .L0, .VMOVAPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x28, 0xFF, .WIG, .L1, .VMOVAPD, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x29, 0xFF, .WIG, .L1, .VMOVAPD, {.YMM_M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x28, 0xFF, .WIG, .L0, .VMOVAPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x29, 0xFF, .WIG, .L0, .VMOVAPD, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x29, 0xFF, .WIG, .L1, .VMOVAPD, {.YMM_M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x2B, 0xFF, .WIG, .L0, .VMOVNTPD, {.M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x2B, 0xFF, .WIG, .L1, .VMOVNTPD, {.M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x2E, 0xFF, .WIG, .LIG, .VUCOMISD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 1, 0x2F, 0xFF, .WIG, .LIG, .VCOMISD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x41, 0xFF, .W1, .L1, .KANDD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x41, 0xFF, .W0, .L1, .KANDB, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x41, 0xFF, .W1, .L1, .KANDD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x42, 0xFF, .W0, .L1, .KANDNB, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x42, 0xFF, .W1, .L1, .KANDND, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x44, 0xFF, .W1, .L0, .KNOTD, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, @@ -1535,13 +1591,13 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0x45, 0xFF, .W1, .L1, .KORD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x46, 0xFF, .W1, .L1, .KXNORD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x46, 0xFF, .W0, .L1, .KXNORB, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x47, 0xFF, .W1, .L1, .KXORD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x47, 0xFF, .W0, .L1, .KXORB, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x47, 0xFF, .W1, .L1, .KXORD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x4A, 0xFF, .W0, .L1, .KADDB, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x4A, 0xFF, .W1, .L1, .KADDD, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x4B, 0xFF, .W0, .L1, .KUNPCKBW, {.K, .K, .K, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x50, 0xFF, .WIG, .L0, .VMOVMSKPD, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x50, 0xFF, .WIG, .L1, .VMOVMSKPD, {.R32, .YMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x50, 0xFF, .WIG, .L0, .VMOVMSKPD, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x51, 0xFF, .WIG, .L1, .VSQRTPD, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x51, 0xFF, .WIG, .L0, .VSQRTPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x54, 0xFF, .WIG, .L1, .VANDPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, @@ -1558,8 +1614,8 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0x59, 0xFF, .WIG, .L0, .VMULPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x5A, 0xFF, .WIG, .L0, .VCVTPD2PS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x5A, 0xFF, .WIG, .L1, .VCVTPD2PS, {.XMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x5B, 0xFF, .WIG, .L0, .VCVTPS2DQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x5B, 0xFF, .WIG, .L1, .VCVTPS2DQ, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x5B, 0xFF, .WIG, .L0, .VCVTPS2DQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x5C, 0xFF, .WIG, .L1, .VSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x5C, 0xFF, .WIG, .L0, .VSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x5D, 0xFF, .WIG, .L0, .VMINPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, @@ -1568,32 +1624,32 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0x5E, 0xFF, .WIG, .L0, .VDIVPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x5F, 0xFF, .WIG, .L0, .VMAXPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x5F, 0xFF, .WIG, .L1, .VMAXPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x60, 0xFF, .WIG, .L1, .VPUNPCKLBW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x60, 0xFF, .WIG, .L0, .VPUNPCKLBW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x61, 0xFF, .WIG, .L0, .VPUNPCKLWD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x60, 0xFF, .WIG, .L1, .VPUNPCKLBW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x61, 0xFF, .WIG, .L1, .VPUNPCKLWD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x62, 0xFF, .WIG, .L1, .VPUNPCKLDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x61, 0xFF, .WIG, .L0, .VPUNPCKLWD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x62, 0xFF, .WIG, .L0, .VPUNPCKLDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x63, 0xFF, .WIG, .L0, .VPACKSSWB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x62, 0xFF, .WIG, .L1, .VPUNPCKLDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x63, 0xFF, .WIG, .L1, .VPACKSSWB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x63, 0xFF, .WIG, .L0, .VPACKSSWB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x64, 0xFF, .WIG, .L1, .VPCMPGTB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x64, 0xFF, .WIG, .L0, .VPCMPGTB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x65, 0xFF, .WIG, .L1, .VPCMPGTW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x65, 0xFF, .WIG, .L0, .VPCMPGTW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x66, 0xFF, .WIG, .L1, .VPCMPGTD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x66, 0xFF, .WIG, .L0, .VPCMPGTD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x67, 0xFF, .WIG, .L0, .VPACKUSWB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x66, 0xFF, .WIG, .L1, .VPCMPGTD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x67, 0xFF, .WIG, .L1, .VPACKUSWB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x67, 0xFF, .WIG, .L0, .VPACKUSWB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x68, 0xFF, .WIG, .L1, .VPUNPCKHBW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x68, 0xFF, .WIG, .L0, .VPUNPCKHBW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x69, 0xFF, .WIG, .L1, .VPUNPCKHWD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x69, 0xFF, .WIG, .L0, .VPUNPCKHWD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x69, 0xFF, .WIG, .L1, .VPUNPCKHWD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6A, 0xFF, .WIG, .L0, .VPUNPCKHDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6A, 0xFF, .WIG, .L1, .VPUNPCKHDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x6B, 0xFF, .WIG, .L0, .VPACKSSDW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6B, 0xFF, .WIG, .L1, .VPACKSSDW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x6C, 0xFF, .WIG, .L0, .VPUNPCKLQDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x6B, 0xFF, .WIG, .L0, .VPACKSSDW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6C, 0xFF, .WIG, .L1, .VPUNPCKLQDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x6C, 0xFF, .WIG, .L0, .VPUNPCKLQDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6D, 0xFF, .WIG, .L0, .VPUNPCKHQDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6D, 0xFF, .WIG, .L1, .VPUNPCKHQDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0x6E, 0xFF, .WIG, .L0, .VMOVD, {.XMM, .RM32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, @@ -1610,32 +1666,36 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0x71, 0x06, .WIG, .L0, .VPSLLW, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x72, 0x02, .WIG, .L0, .VPSRLD, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x72, 0x02, .WIG, .L1, .VPSRLD, {.YMM, .YMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x72, 0x04, .WIG, .L0, .VPSRAD, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x72, 0x04, .WIG, .L1, .VPSRAD, {.YMM, .YMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x72, 0x04, .WIG, .L0, .VPSRAD, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x72, 0x06, .WIG, .L1, .VPSLLD, {.YMM, .YMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x72, 0x06, .WIG, .L0, .VPSLLD, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x73, 0x02, .WIG, .L0, .VPSRLQ, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x73, 0x02, .WIG, .L1, .VPSRLQ, {.YMM, .YMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x73, 0x02, .WIG, .L0, .VPSRLQ, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x73, 0x06, .WIG, .L1, .VPSLLQ, {.YMM, .YMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x73, 0x06, .WIG, .L0, .VPSLLQ, {.XMM, .XMM, .IMM8, .NONE}, {.VVVV, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, modrm_reg_ext=true, op_count=3, needs_modrm=true}}, {._0F, 1, 0x74, 0xFF, .WIG, .L0, .VPCMPEQB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x74, 0xFF, .WIG, .L1, .VPCMPEQB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x75, 0xFF, .WIG, .L0, .VPCMPEQW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x75, 0xFF, .WIG, .L1, .VPCMPEQW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0x76, 0xFF, .WIG, .L0, .VPCMPEQD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x75, 0xFF, .WIG, .L0, .VPCMPEQW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x76, 0xFF, .WIG, .L1, .VPCMPEQD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x76, 0xFF, .WIG, .L0, .VPCMPEQD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x7C, 0xFF, .WIG, .L0, .VHADDPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x7C, 0xFF, .WIG, .L1, .VHADDPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x7D, 0xFF, .WIG, .L1, .VHSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0x7D, 0xFF, .WIG, .L0, .VHSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0x7E, 0xFF, .WIG, .L0, .VMOVD, {.RM32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7E, 0xFF, .W1, .L0, .VMOVQ, {.R64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7F, 0xFF, .WIG, .L1, .VMOVDQA, {.YMM_M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 1, 0x7F, 0xFF, .WIG, .L0, .VMOVDQA, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x90, 0xFF, .W1, .L0, .KMOVD, {.K, .K_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x90, 0xFF, .W0, .L0, .KMOVB, {.K, .K_M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x91, 0xFF, .W0, .L0, .KMOVB, {.M8, .K, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x91, 0xFF, .W1, .L0, .KMOVD, {.M32, .K, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x91, 0xFF, .W0, .L0, .KMOVB, {.M8, .K, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x92, 0xFF, .W0, .L0, .KMOVB, {.K, .R32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x93, 0xFF, .W0, .L0, .KMOVB, {.R32, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0x98, 0xFF, .W0, .L0, .KORTESTB, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x98, 0xFF, .W1, .L0, .KORTESTD, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 1, 0x98, 0xFF, .W0, .L0, .KORTESTB, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x99, 0xFF, .W1, .L0, .KTESTD, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0x99, 0xFF, .W0, .L0, .KTESTB, {.K, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0xC2, 0xFF, .WIG, .L1, .VCMPPD, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, @@ -1644,25 +1704,27 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0xC5, 0xFF, .WIG, .L0, .VPEXTRW, {.R32, .XMM, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xC6, 0xFF, .WIG, .L0, .VSHUFPD, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F, 1, 0xC6, 0xFF, .WIG, .L1, .VSHUFPD, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, + {._0F, 1, 0xD0, 0xFF, .WIG, .L1, .VADDSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xD0, 0xFF, .WIG, .L0, .VADDSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD1, 0xFF, .WIG, .L1, .VPSRLW, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD1, 0xFF, .WIG, .L0, .VPSRLW, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xD2, 0xFF, .WIG, .L0, .VPSRLD, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD2, 0xFF, .WIG, .L1, .VPSRLD, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xD2, 0xFF, .WIG, .L0, .VPSRLD, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD3, 0xFF, .WIG, .L1, .VPSRLQ, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD3, 0xFF, .WIG, .L0, .VPSRLQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xD4, 0xFF, .WIG, .L0, .VPADDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD4, 0xFF, .WIG, .L1, .VPADDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xD4, 0xFF, .WIG, .L0, .VPADDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD5, 0xFF, .WIG, .L0, .VPMULLW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD5, 0xFF, .WIG, .L1, .VPMULLW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xD6, 0xFF, .WIG, .L0, .VMOVQ, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0xD7, 0xFF, .WIG, .L0, .VPMOVMSKB, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0xD7, 0xFF, .WIG, .L1, .VPMOVMSKB, {.R32, .YMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 1, 0xD7, 0xFF, .WIG, .L0, .VPMOVMSKB, {.R32, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0xDB, 0xFF, .WIG, .L1, .VPAND, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xDB, 0xFF, .WIG, .L0, .VPAND, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xDF, 0xFF, .WIG, .L1, .VPANDN, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xDF, 0xFF, .WIG, .L0, .VPANDN, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xE1, 0xFF, .WIG, .L1, .VPSRAW, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xE1, 0xFF, .WIG, .L0, .VPSRAW, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xE1, 0xFF, .WIG, .L1, .VPSRAW, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xE2, 0xFF, .WIG, .L1, .VPSRAD, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xE2, 0xFF, .WIG, .L0, .VPSRAD, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xE4, 0xFF, .WIG, .L0, .VPMULHUW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, @@ -1673,52 +1735,56 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 1, 0xE6, 0xFF, .WIG, .L0, .VCVTTPD2DQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 1, 0xE7, 0xFF, .WIG, .L1, .VMOVNTDQ, {.M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 1, 0xE7, 0xFF, .WIG, .L0, .VMOVNTDQ, {.M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0xEB, 0xFF, .WIG, .L1, .VPOR, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xEB, 0xFF, .WIG, .L0, .VPOR, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xEF, 0xFF, .WIG, .L0, .VPXOR, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xEB, 0xFF, .WIG, .L1, .VPOR, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xEF, 0xFF, .WIG, .L1, .VPXOR, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xF1, 0xFF, .WIG, .L0, .VPSLLW, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xEF, 0xFF, .WIG, .L0, .VPXOR, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF1, 0xFF, .WIG, .L1, .VPSLLW, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xF1, 0xFF, .WIG, .L0, .VPSLLW, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF2, 0xFF, .WIG, .L0, .VPSLLD, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF2, 0xFF, .WIG, .L1, .VPSLLD, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF3, 0xFF, .WIG, .L1, .VPSLLQ, {.YMM, .YMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF3, 0xFF, .WIG, .L0, .VPSLLQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.VVVV, .REG, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF4, 0xFF, .WIG, .L0, .VPMULUDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF4, 0xFF, .WIG, .L1, .VPMULUDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xF5, 0xFF, .WIG, .L1, .VPMADDWD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF5, 0xFF, .WIG, .L0, .VPMADDWD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xF5, 0xFF, .WIG, .L1, .VPMADDWD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF7, 0xFF, .WIG, .L0, .VMASKMOVDQU, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F, 1, 0xF8, 0xFF, .WIG, .L1, .VPSUBB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF8, 0xFF, .WIG, .L0, .VPSUBB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xF8, 0xFF, .WIG, .L1, .VPSUBB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF9, 0xFF, .WIG, .L1, .VPSUBW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xF9, 0xFF, .WIG, .L0, .VPSUBW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xFA, 0xFF, .WIG, .L0, .VPSUBD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xFA, 0xFF, .WIG, .L1, .VPSUBD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xFB, 0xFF, .WIG, .L1, .VPSUBQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xFA, 0xFF, .WIG, .L0, .VPSUBD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xFB, 0xFF, .WIG, .L0, .VPSUBQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xFC, 0xFF, .WIG, .L0, .VPADDB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xFB, 0xFF, .WIG, .L1, .VPSUBQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 1, 0xFC, 0xFF, .WIG, .L1, .VPADDB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xFD, 0xFF, .WIG, .L0, .VPADDW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xFC, 0xFF, .WIG, .L0, .VPADDB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xFD, 0xFF, .WIG, .L1, .VPADDW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F, 1, 0xFE, 0xFF, .WIG, .L0, .VPADDD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xFD, 0xFF, .WIG, .L0, .VPADDW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 1, 0xFE, 0xFF, .WIG, .L1, .VPADDD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 1, 0xFE, 0xFF, .WIG, .L0, .VPADDD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 2, 0x10, 0xFF, .WIG, .LIG, .VMOVSS, {.XMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 2, 0x10, 0xFF, .WIG, .LIG, .VMOVSS, {.XMM, .XMM, .XMM, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x11, 0xFF, .WIG, .LIG, .VMOVSS, {.M32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=2, needs_modrm=true}}, - {._0F, 2, 0x2A, 0xFF, .W1, .LIG, .VCVTSI2SS, {.XMM, .XMM, .RM64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F, 2, 0x12, 0xFF, .WIG, .L0, .VMOVSLDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x12, 0xFF, .WIG, .L1, .VMOVSLDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x16, 0xFF, .WIG, .L1, .VMOVSHDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x16, 0xFF, .WIG, .L0, .VMOVSHDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 2, 0x2A, 0xFF, .WIG, .LIG, .VCVTSI2SS, {.XMM, .XMM, .RM32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, - {._0F, 2, 0x2C, 0xFF, .WIG, .LIG, .VCVTTSS2SI, {.R32, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x2A, 0xFF, .W1, .LIG, .VCVTSI2SS, {.XMM, .XMM, .RM64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F, 2, 0x2C, 0xFF, .W1, .LIG, .VCVTTSS2SI, {.R64, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_w=.W1, op_count=2, needs_modrm=true}}, - {._0F, 2, 0x2D, 0xFF, .WIG, .LIG, .VCVTSS2SI, {.R32, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x2C, 0xFF, .WIG, .LIG, .VCVTTSS2SI, {.R32, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 2, 0x2D, 0xFF, .W1, .LIG, .VCVTSS2SI, {.R64, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_w=.W1, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x2D, 0xFF, .WIG, .LIG, .VCVTSS2SI, {.R32, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 2, 0x51, 0xFF, .WIG, .LIG, .VSQRTSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x52, 0xFF, .WIG, .LIG, .VRSQRTSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x53, 0xFF, .WIG, .LIG, .VRCPSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x58, 0xFF, .WIG, .LIG, .VADDSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x59, 0xFF, .WIG, .LIG, .VMULSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x5A, 0xFF, .WIG, .LIG, .VCVTSS2SD, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, - {._0F, 2, 0x5B, 0xFF, .WIG, .L1, .VCVTTPS2DQ, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 2, 0x5B, 0xFF, .WIG, .L0, .VCVTTPS2DQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 2, 0x5B, 0xFF, .WIG, .L1, .VCVTTPS2DQ, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 2, 0x5C, 0xFF, .WIG, .LIG, .VSUBSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x5D, 0xFF, .WIG, .LIG, .VMINSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 2, 0x5E, 0xFF, .WIG, .LIG, .VDIVSS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=3, needs_modrm=true}}, @@ -1731,15 +1797,17 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 2, 0x7F, 0xFF, .WIG, .L1, .VMOVDQU, {.YMM_M256, .YMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 2, 0x7F, 0xFF, .WIG, .L0, .VMOVDQU, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 2, 0xC2, 0xFF, .WIG, .LIG, .VCMPSS, {.XMM, .XMM, .XMM_M32, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, prefix=2, vex_type=.VEX, op_count=4, needs_modrm=true}}, - {._0F, 2, 0xE6, 0xFF, .WIG, .L1, .VCVTDQ2PD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 2, 0xE6, 0xFF, .WIG, .L0, .VCVTDQ2PD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 2, 0xE6, 0xFF, .WIG, .L1, .VCVTDQ2PD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 3, 0x10, 0xFF, .WIG, .LIG, .VMOVSD, {.XMM, .XMM, .XMM, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 3, 0x10, 0xFF, .WIG, .LIG, .VMOVSD, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 3, 0x11, 0xFF, .WIG, .LIG, .VMOVSD, {.M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=2, needs_modrm=true}}, - {._0F, 3, 0x2A, 0xFF, .WIG, .LIG, .VCVTSI2SD, {.XMM, .XMM, .RM32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, + {._0F, 3, 0x12, 0xFF, .WIG, .L0, .VMOVDDUP, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x12, 0xFF, .WIG, .L1, .VMOVDDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2A, 0xFF, .W1, .LIG, .VCVTSI2SD, {.XMM, .XMM, .RM64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, - {._0F, 3, 0x2C, 0xFF, .W1, .LIG, .VCVTTSD2SI, {.R64, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x2A, 0xFF, .WIG, .LIG, .VCVTSI2SD, {.XMM, .XMM, .RM32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 3, 0x2C, 0xFF, .WIG, .LIG, .VCVTTSD2SI, {.R32, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x2C, 0xFF, .W1, .LIG, .VCVTTSD2SI, {.R64, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2D, 0xFF, .WIG, .LIG, .VCVTSD2SI, {.R32, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=2, needs_modrm=true}}, {._0F, 3, 0x2D, 0xFF, .W1, .LIG, .VCVTSD2SI, {.R64, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, op_count=2, needs_modrm=true}}, {._0F, 3, 0x51, 0xFF, .WIG, .LIG, .VSQRTSD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, @@ -1750,15 +1818,23 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F, 3, 0x5D, 0xFF, .WIG, .LIG, .VMINSD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 3, 0x5E, 0xFF, .WIG, .LIG, .VDIVSD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, {._0F, 3, 0x5F, 0xFF, .WIG, .LIG, .VMAXSD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=3, needs_modrm=true}}, - {._0F, 3, 0x70, 0xFF, .WIG, .L1, .VPSHUFLW, {.YMM, .YMM_M256, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 3, 0x70, 0xFF, .WIG, .L0, .VPSHUFLW, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F, 3, 0x92, 0xFF, .W1, .L0, .KMOVQ, {.K, .R64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x70, 0xFF, .WIG, .L1, .VPSHUFLW, {.YMM, .YMM_M256, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 3, 0x7C, 0xFF, .WIG, .L0, .VHADDPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 3, 0x7C, 0xFF, .WIG, .L1, .VHADDPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 3, 0x7D, 0xFF, .WIG, .L1, .VHSUBPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F, 3, 0x7D, 0xFF, .WIG, .L0, .VHSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F, 3, 0x92, 0xFF, .W0, .L0, .KMOVD, {.K, .R32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 3, 0x92, 0xFF, .W1, .L0, .KMOVQ, {.K, .R64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 3, 0x93, 0xFF, .W0, .L0, .KMOVD, {.R32, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 3, 0x93, 0xFF, .W1, .L0, .KMOVQ, {.R64, .K, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F, 3, 0xC2, 0xFF, .WIG, .LIG, .VCMPSD, {.XMM, .XMM, .XMM_M64, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F, prefix=3, vex_type=.VEX, op_count=4, needs_modrm=true}}, + {._0F, 3, 0xD0, 0xFF, .WIG, .L0, .VADDSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F, 3, 0xD0, 0xFF, .WIG, .L1, .VADDSUBPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F, 3, 0xE6, 0xFF, .WIG, .L1, .VCVTPD2DQ, {.XMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F, 3, 0xE6, 0xFF, .WIG, .L0, .VCVTPD2DQ, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F, 3, 0xF0, 0xFF, .WIG, .L1, .VLDDQU, {.YMM, .M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F, 3, 0xF0, 0xFF, .WIG, .L0, .VLDDQU, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 0, 0xF2, 0xFF, .W1, .L0, .ANDN, {.R64, .R64, .RM64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 0, 0xF2, 0xFF, .W0, .L0, .ANDN, {.R32, .R32, .RM32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 0, 0xF3, 0x01, .W1, .L0, .BLSR, {.R64, .RM64, .NONE, .NONE}, {.VVVV, .MR, .NONE, .NONE}, {esc=._0F38, vex_type=.VEX, vex_w=.W1, vex_l=.L0, modrm_reg_ext=true, op_count=2, needs_modrm=true}}, @@ -1771,36 +1847,36 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F38, 0, 0xF5, 0xFF, .W1, .L0, .BZHI, {.R64, .RM64, .R64, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 0, 0xF7, 0xFF, .W1, .L0, .BEXTR, {.R64, .RM64, .R64, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 0, 0xF7, 0xFF, .W0, .L0, .BEXTR, {.R32, .RM32, .R32, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x00, 0xFF, .WIG, .L0, .VPSHUFB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x00, 0xFF, .WIG, .L1, .VPSHUFB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x00, 0xFF, .WIG, .L0, .VPSHUFB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x01, 0xFF, .WIG, .L0, .VPHADDW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x01, 0xFF, .WIG, .L1, .VPHADDW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x02, 0xFF, .WIG, .L1, .VPHADDD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x02, 0xFF, .WIG, .L0, .VPHADDD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x02, 0xFF, .WIG, .L1, .VPHADDD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x03, 0xFF, .WIG, .L0, .VPHADDSW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x03, 0xFF, .WIG, .L1, .VPHADDSW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x04, 0xFF, .WIG, .L0, .VPMADDUBSW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x04, 0xFF, .WIG, .L1, .VPMADDUBSW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x05, 0xFF, .WIG, .L0, .VPHSUBW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x05, 0xFF, .WIG, .L1, .VPHSUBW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x06, 0xFF, .WIG, .L1, .VPHSUBD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x06, 0xFF, .WIG, .L0, .VPHSUBD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x07, 0xFF, .WIG, .L1, .VPHSUBSW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x06, 0xFF, .WIG, .L1, .VPHSUBD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x07, 0xFF, .WIG, .L0, .VPHSUBSW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x07, 0xFF, .WIG, .L1, .VPHSUBSW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x08, 0xFF, .WIG, .L1, .VPSIGNB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x08, 0xFF, .WIG, .L0, .VPSIGNB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x09, 0xFF, .WIG, .L0, .VPSIGNW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x09, 0xFF, .WIG, .L1, .VPSIGNW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x0A, 0xFF, .WIG, .L0, .VPSIGND, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x0A, 0xFF, .WIG, .L1, .VPSIGND, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x0A, 0xFF, .WIG, .L0, .VPSIGND, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x0B, 0xFF, .WIG, .L1, .VPMULHRSW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x0B, 0xFF, .WIG, .L0, .VPMULHRSW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x0E, 0xFF, .WIG, .L1, .VTESTPS, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x0E, 0xFF, .WIG, .L0, .VTESTPS, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x0F, 0xFF, .WIG, .L0, .VTESTPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x0F, 0xFF, .WIG, .L1, .VTESTPD, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x13, 0xFF, .WIG, .L0, .VCVTPH2PS, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x0F, 0xFF, .WIG, .L0, .VTESTPD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x13, 0xFF, .WIG, .L1, .VCVTPH2PS, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x13, 0xFF, .WIG, .L0, .VCVTPH2PS, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x16, 0xFF, .W0, .L1, .VPERMPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x17, 0xFF, .WIG, .L0, .VPTEST, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x17, 0xFF, .WIG, .L1, .VPTEST, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, @@ -1811,205 +1887,221 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F38, 1, 0x19, 0xFF, .WIG, .L1, .VBROADCASTSD, {.YMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x19, 0xFF, .WIG, .L1, .VBROADCASTSD, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x1A, 0xFF, .WIG, .L1, .VBROADCASTF128, {.YMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x1C, 0xFF, .WIG, .L1, .VPABSB, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x1C, 0xFF, .WIG, .L0, .VPABSB, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x1C, 0xFF, .WIG, .L1, .VPABSB, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x1D, 0xFF, .WIG, .L0, .VPABSW, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x1D, 0xFF, .WIG, .L1, .VPABSW, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x1E, 0xFF, .WIG, .L0, .VPABSD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x1E, 0xFF, .WIG, .L1, .VPABSD, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x20, 0xFF, .WIG, .L1, .VPMOVSXBW, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x1E, 0xFF, .WIG, .L0, .VPABSD, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x20, 0xFF, .WIG, .L0, .VPMOVSXBW, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x21, 0xFF, .WIG, .L0, .VPMOVSXBD, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x20, 0xFF, .WIG, .L1, .VPMOVSXBW, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x21, 0xFF, .WIG, .L1, .VPMOVSXBD, {.YMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x21, 0xFF, .WIG, .L0, .VPMOVSXBD, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x22, 0xFF, .WIG, .L1, .VPMOVSXBQ, {.YMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x22, 0xFF, .WIG, .L0, .VPMOVSXBQ, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x23, 0xFF, .WIG, .L0, .VPMOVSXWD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x23, 0xFF, .WIG, .L1, .VPMOVSXWD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x23, 0xFF, .WIG, .L0, .VPMOVSXWD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x24, 0xFF, .WIG, .L0, .VPMOVSXWQ, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x24, 0xFF, .WIG, .L1, .VPMOVSXWQ, {.YMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x25, 0xFF, .WIG, .L1, .VPMOVSXDQ, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x25, 0xFF, .WIG, .L0, .VPMOVSXDQ, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x28, 0xFF, .WIG, .L1, .VPMULDQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x28, 0xFF, .WIG, .L0, .VPMULDQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x29, 0xFF, .WIG, .L1, .VPCMPEQQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x29, 0xFF, .WIG, .L0, .VPCMPEQQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x29, 0xFF, .WIG, .L1, .VPCMPEQQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2A, 0xFF, .WIG, .L0, .VMOVNTDQA, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x2A, 0xFF, .WIG, .L1, .VMOVNTDQA, {.YMM, .M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x2B, 0xFF, .WIG, .L1, .VPACKUSDW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2B, 0xFF, .WIG, .L0, .VPACKUSDW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2C, 0xFF, .WIG, .L0, .VMASKMOVPS, {.XMM, .XMM, .M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2C, 0xFF, .WIG, .L1, .VMASKMOVPS, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x2D, 0xFF, .WIG, .L1, .VMASKMOVPD, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2D, 0xFF, .WIG, .L0, .VMASKMOVPD, {.XMM, .XMM, .M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x2D, 0xFF, .WIG, .L1, .VMASKMOVPD, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2E, 0xFF, .WIG, .L0, .VMASKMOVPS, {.M128, .XMM, .XMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2E, 0xFF, .WIG, .L1, .VMASKMOVPS, {.M256, .YMM, .YMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2F, 0xFF, .WIG, .L1, .VMASKMOVPD, {.M256, .YMM, .YMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x2F, 0xFF, .WIG, .L0, .VMASKMOVPD, {.M128, .XMM, .XMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x30, 0xFF, .WIG, .L1, .VPMOVZXBW, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x30, 0xFF, .WIG, .L0, .VPMOVZXBW, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x30, 0xFF, .WIG, .L1, .VPMOVZXBW, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x31, 0xFF, .WIG, .L1, .VPMOVZXBD, {.YMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x31, 0xFF, .WIG, .L0, .VPMOVZXBD, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x32, 0xFF, .WIG, .L1, .VPMOVZXBQ, {.YMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x32, 0xFF, .WIG, .L0, .VPMOVZXBQ, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x32, 0xFF, .WIG, .L1, .VPMOVZXBQ, {.YMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x33, 0xFF, .WIG, .L0, .VPMOVZXWD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x33, 0xFF, .WIG, .L1, .VPMOVZXWD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x34, 0xFF, .WIG, .L0, .VPMOVZXWQ, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x34, 0xFF, .WIG, .L1, .VPMOVZXWQ, {.YMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x35, 0xFF, .WIG, .L1, .VPMOVZXDQ, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x34, 0xFF, .WIG, .L0, .VPMOVZXWQ, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x35, 0xFF, .WIG, .L0, .VPMOVZXDQ, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x35, 0xFF, .WIG, .L1, .VPMOVZXDQ, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x36, 0xFF, .W0, .L1, .VPERMD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x37, 0xFF, .WIG, .L0, .VPCMPGTQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x37, 0xFF, .WIG, .L1, .VPCMPGTQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x37, 0xFF, .WIG, .L0, .VPCMPGTQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x38, 0xFF, .WIG, .L0, .VPMINSB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x38, 0xFF, .WIG, .L1, .VPMINSB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x39, 0xFF, .WIG, .L0, .VPMINSD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x39, 0xFF, .WIG, .L1, .VPMINSD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3A, 0xFF, .WIG, .L0, .VPMINUW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3A, 0xFF, .WIG, .L1, .VPMINUW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x3B, 0xFF, .WIG, .L0, .VPMINUD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3B, 0xFF, .WIG, .L1, .VPMINUD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x3B, 0xFF, .WIG, .L0, .VPMINUD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3C, 0xFF, .WIG, .L1, .VPMAXSB, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3C, 0xFF, .WIG, .L0, .VPMAXSB, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x3D, 0xFF, .WIG, .L0, .VPMAXSD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3D, 0xFF, .WIG, .L1, .VPMAXSD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x3E, 0xFF, .WIG, .L1, .VPMAXUW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x3D, 0xFF, .WIG, .L0, .VPMAXSD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3E, 0xFF, .WIG, .L0, .VPMAXUW, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x3F, 0xFF, .WIG, .L0, .VPMAXUD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x3E, 0xFF, .WIG, .L1, .VPMAXUW, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x3F, 0xFF, .WIG, .L1, .VPMAXUD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x3F, 0xFF, .WIG, .L0, .VPMAXUD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x40, 0xFF, .WIG, .L1, .VPMULLD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x40, 0xFF, .WIG, .L0, .VPMULLD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x41, 0xFF, .WIG, .L0, .VPHMINPOSUW, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x45, 0xFF, .W1, .L0, .VPSRLVQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x45, 0xFF, .W0, .L1, .VPSRLVD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x45, 0xFF, .W1, .L1, .VPSRLVQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x45, 0xFF, .W0, .L0, .VPSRLVD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x46, 0xFF, .W0, .L0, .VPSRAVD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x45, 0xFF, .W1, .L0, .VPSRLVQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x45, 0xFF, .W1, .L1, .VPSRLVQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x45, 0xFF, .W0, .L1, .VPSRLVD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x46, 0xFF, .W0, .L1, .VPSRAVD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x47, 0xFF, .W1, .L1, .VPSLLVQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x47, 0xFF, .W1, .L0, .VPSLLVQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x46, 0xFF, .W0, .L0, .VPSRAVD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x47, 0xFF, .W0, .L0, .VPSLLVD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x47, 0xFF, .W1, .L1, .VPSLLVQ, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x47, 0xFF, .W0, .L1, .VPSLLVD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x47, 0xFF, .W1, .L0, .VPSLLVQ, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x58, 0xFF, .W0, .L1, .VPBROADCASTD, {.YMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x58, 0xFF, .W0, .L0, .VPBROADCASTD, {.XMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x58, 0xFF, .W0, .L0, .VPBROADCASTD, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x58, 0xFF, .W0, .L1, .VPBROADCASTD, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x59, 0xFF, .W0, .L1, .VPBROADCASTQ, {.YMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x59, 0xFF, .W0, .L0, .VPBROADCASTQ, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x59, 0xFF, .W0, .L0, .VPBROADCASTQ, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x59, 0xFF, .W0, .L1, .VPBROADCASTQ, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x5A, 0xFF, .WIG, .L1, .VBROADCASTI128, {.YMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=2, needs_modrm=true}}, - {._0F38, 1, 0x8C, 0xFF, .W1, .L1, .VPMASKMOVQ, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x78, 0xFF, .W0, .L1, .VPBROADCASTB, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x78, 0xFF, .W0, .L0, .VPBROADCASTB, {.XMM, .M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x78, 0xFF, .W0, .L0, .VPBROADCASTB, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x78, 0xFF, .W0, .L1, .VPBROADCASTB, {.YMM, .M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x79, 0xFF, .W0, .L0, .VPBROADCASTW, {.XMM, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x79, 0xFF, .W0, .L1, .VPBROADCASTW, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x79, 0xFF, .W0, .L1, .VPBROADCASTW, {.YMM, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=2, needs_modrm=true}}, + {._0F38, 1, 0x79, 0xFF, .W0, .L0, .VPBROADCASTW, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0x8C, 0xFF, .W0, .L0, .VPMASKMOVD, {.XMM, .XMM, .M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x8C, 0xFF, .W0, .L1, .VPMASKMOVD, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x8C, 0xFF, .W1, .L0, .VPMASKMOVQ, {.XMM, .XMM, .M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x8E, 0xFF, .W0, .L0, .VPMASKMOVD, {.M128, .XMM, .XMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x8C, 0xFF, .W0, .L1, .VPMASKMOVD, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x8C, 0xFF, .W1, .L1, .VPMASKMOVQ, {.YMM, .YMM, .M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x8E, 0xFF, .W1, .L1, .VPMASKMOVQ, {.M256, .YMM, .YMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x8E, 0xFF, .W1, .L0, .VPMASKMOVQ, {.M128, .XMM, .XMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x8E, 0xFF, .W0, .L1, .VPMASKMOVD, {.M256, .YMM, .YMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x90, 0xFF, .W0, .L1, .VPGATHERDD, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x90, 0xFF, .W0, .L0, .VPGATHERDD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x8E, 0xFF, .W0, .L0, .VPMASKMOVD, {.M128, .XMM, .XMM, .NONE}, {.MR, .VVVV, .REG, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x90, 0xFF, .W1, .L1, .VPGATHERDQ, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x90, 0xFF, .W0, .L1, .VPGATHERDD, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x90, 0xFF, .W1, .L0, .VPGATHERDQ, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x91, 0xFF, .W1, .L1, .VPGATHERQQ, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x90, 0xFF, .W0, .L0, .VPGATHERDD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x91, 0xFF, .W0, .L1, .VPGATHERQD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x91, 0xFF, .W1, .L0, .VPGATHERQQ, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x91, 0xFF, .W0, .L0, .VPGATHERQD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x92, 0xFF, .W1, .L0, .VGATHERDPD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x92, 0xFF, .W0, .L0, .VGATHERDPS, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x91, 0xFF, .W1, .L1, .VPGATHERQQ, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x92, 0xFF, .W0, .L1, .VGATHERDPS, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x92, 0xFF, .W1, .L1, .VGATHERDPD, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x92, 0xFF, .W1, .L0, .VGATHERDPD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x92, 0xFF, .W0, .L0, .VGATHERDPS, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x93, 0xFF, .W0, .L1, .VGATHERQPS, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x93, 0xFF, .W1, .L1, .VGATHERQPD, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x93, 0xFF, .W1, .L0, .VGATHERQPD, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x93, 0xFF, .W0, .L0, .VGATHERQPS, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x93, 0xFF, .W1, .L1, .VGATHERQPD, {.YMM, .M, .YMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x93, 0xFF, .W0, .L1, .VGATHERQPS, {.XMM, .M, .XMM, .NONE}, {.REG, .MR, .VVVV, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x96, 0xFF, .W1, .L0, .VFMADDSUB132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x96, 0xFF, .W0, .L1, .VFMADDSUB132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x96, 0xFF, .W1, .L1, .VFMADDSUB132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x96, 0xFF, .W1, .L0, .VFMADDSUB132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x96, 0xFF, .W0, .L0, .VFMADDSUB132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x97, 0xFF, .W1, .L0, .VFMSUBADD132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x96, 0xFF, .W0, .L1, .VFMADDSUB132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x97, 0xFF, .W1, .L1, .VFMSUBADD132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x97, 0xFF, .W0, .L1, .VFMSUBADD132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x97, 0xFF, .W0, .L0, .VFMSUBADD132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x97, 0xFF, .W1, .L0, .VFMSUBADD132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x98, 0xFF, .W1, .L0, .VFMADD132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x98, 0xFF, .W1, .L1, .VFMADD132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x98, 0xFF, .W0, .L0, .VFMADD132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x98, 0xFF, .W0, .L1, .VFMADD132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x98, 0xFF, .W0, .L0, .VFMADD132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x99, 0xFF, .W1, .LIG, .VFMADD132SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x99, 0xFF, .W0, .LIG, .VFMADD132SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9A, 0xFF, .W1, .L0, .VFMSUB132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x9A, 0xFF, .W0, .L1, .VFMSUB132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9A, 0xFF, .W1, .L1, .VFMSUB132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9A, 0xFF, .W0, .L0, .VFMSUB132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x9A, 0xFF, .W0, .L1, .VFMSUB132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9B, 0xFF, .W0, .LIG, .VFMSUB132SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9B, 0xFF, .W1, .LIG, .VFMSUB132SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x9C, 0xFF, .W1, .L0, .VFNMADD132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x9C, 0xFF, .W0, .L1, .VFNMADD132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9C, 0xFF, .W0, .L0, .VFNMADD132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9C, 0xFF, .W1, .L1, .VFNMADD132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x9C, 0xFF, .W0, .L1, .VFNMADD132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x9C, 0xFF, .W1, .L0, .VFNMADD132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x9D, 0xFF, .W1, .LIG, .VFNMADD132SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9D, 0xFF, .W0, .LIG, .VFNMADD132SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x9E, 0xFF, .W0, .L1, .VFNMSUB132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x9D, 0xFF, .W1, .LIG, .VFNMADD132SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x9E, 0xFF, .W1, .L1, .VFNMSUB132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9E, 0xFF, .W0, .L0, .VFNMSUB132PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9E, 0xFF, .W1, .L0, .VFNMSUB132PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0x9E, 0xFF, .W1, .L1, .VFNMSUB132PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0x9E, 0xFF, .W0, .L1, .VFNMSUB132PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9F, 0xFF, .W0, .LIG, .VFNMSUB132SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0x9F, 0xFF, .W1, .LIG, .VFNMSUB132SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xA6, 0xFF, .W1, .L1, .VFMADDSUB213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xA6, 0xFF, .W0, .L0, .VFMADDSUB213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA6, 0xFF, .W1, .L0, .VFMADDSUB213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xA6, 0xFF, .W0, .L0, .VFMADDSUB213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA6, 0xFF, .W0, .L1, .VFMADDSUB213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xA7, 0xFF, .W1, .L0, .VFMSUBADD213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xA6, 0xFF, .W1, .L1, .VFMADDSUB213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA7, 0xFF, .W1, .L1, .VFMSUBADD213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xA7, 0xFF, .W1, .L0, .VFMSUBADD213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA7, 0xFF, .W0, .L0, .VFMSUBADD213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA7, 0xFF, .W0, .L1, .VFMSUBADD213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xA8, 0xFF, .W1, .L0, .VFMADD213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA8, 0xFF, .W1, .L1, .VFMADD213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xA8, 0xFF, .W1, .L0, .VFMADD213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA8, 0xFF, .W0, .L1, .VFMADD213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA8, 0xFF, .W0, .L0, .VFMADD213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xA9, 0xFF, .W0, .LIG, .VFMADD213SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xA9, 0xFF, .W1, .LIG, .VFMADD213SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xA9, 0xFF, .W0, .LIG, .VFMADD213SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAA, 0xFF, .W1, .L0, .VFMSUB213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAA, 0xFF, .W1, .L1, .VFMSUB213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAA, 0xFF, .W0, .L0, .VFMSUB213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAA, 0xFF, .W0, .L1, .VFMSUB213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAA, 0xFF, .W1, .L1, .VFMSUB213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAB, 0xFF, .W1, .LIG, .VFMSUB213SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAB, 0xFF, .W0, .LIG, .VFMSUB213SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAC, 0xFF, .W0, .L1, .VFNMADD213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAC, 0xFF, .W1, .L1, .VFNMADD213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAC, 0xFF, .W0, .L0, .VFNMADD213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAC, 0xFF, .W1, .L1, .VFNMADD213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAC, 0xFF, .W1, .L0, .VFNMADD213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAD, 0xFF, .W1, .LIG, .VFNMADD213SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAC, 0xFF, .W0, .L1, .VFNMADD213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAD, 0xFF, .W0, .LIG, .VFNMADD213SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAE, 0xFF, .W0, .L1, .VFNMSUB213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAE, 0xFF, .W1, .L0, .VFNMSUB213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAE, 0xFF, .W1, .L1, .VFNMSUB213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAD, 0xFF, .W1, .LIG, .VFNMADD213SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAE, 0xFF, .W0, .L0, .VFNMSUB213PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xAF, 0xFF, .W0, .LIG, .VFNMSUB213SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAE, 0xFF, .W1, .L1, .VFNMSUB213PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAE, 0xFF, .W1, .L0, .VFNMSUB213PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAE, 0xFF, .W0, .L1, .VFNMSUB213PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xAF, 0xFF, .W1, .LIG, .VFNMSUB213SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB6, 0xFF, .W0, .L1, .VFMADDSUB231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xAF, 0xFF, .W0, .LIG, .VFNMSUB213SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xB6, 0xFF, .W0, .L0, .VFMADDSUB231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xB6, 0xFF, .W1, .L0, .VFMADDSUB231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xB6, 0xFF, .W1, .L1, .VFMADDSUB231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB7, 0xFF, .W1, .L0, .VFMSUBADD231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB7, 0xFF, .W0, .L1, .VFMSUBADD231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB7, 0xFF, .W0, .L0, .VFMSUBADD231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB6, 0xFF, .W0, .L1, .VFMADDSUB231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xB7, 0xFF, .W1, .L1, .VFMSUBADD231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB8, 0xFF, .W1, .L1, .VFMADD231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB8, 0xFF, .W0, .L1, .VFMADD231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB8, 0xFF, .W0, .L0, .VFMADD231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB7, 0xFF, .W1, .L0, .VFMSUBADD231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB7, 0xFF, .W0, .L0, .VFMSUBADD231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB7, 0xFF, .W0, .L1, .VFMSUBADD231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xB8, 0xFF, .W1, .L0, .VFMADD231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xB9, 0xFF, .W1, .LIG, .VFMADD231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB8, 0xFF, .W0, .L0, .VFMADD231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB8, 0xFF, .W0, .L1, .VFMADD231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB8, 0xFF, .W1, .L1, .VFMADD231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xB9, 0xFF, .W0, .LIG, .VFMADD231SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xBA, 0xFF, .W1, .L1, .VFMSUB231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xBA, 0xFF, .W1, .L0, .VFMSUB231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xB9, 0xFF, .W1, .LIG, .VFMADD231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBA, 0xFF, .W0, .L1, .VFMSUB231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBA, 0xFF, .W0, .L0, .VFMSUB231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xBA, 0xFF, .W1, .L0, .VFMSUB231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xBA, 0xFF, .W1, .L1, .VFMSUB231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBB, 0xFF, .W1, .LIG, .VFMSUB231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBB, 0xFF, .W0, .LIG, .VFMSUB231SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBC, 0xFF, .W1, .L0, .VFNMADD231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBC, 0xFF, .W1, .L1, .VFNMADD231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBC, 0xFF, .W0, .L0, .VFNMADD231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBC, 0xFF, .W0, .L1, .VFNMADD231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xBD, 0xFF, .W1, .LIG, .VFNMADD231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBD, 0xFF, .W0, .LIG, .VFNMADD231SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xBD, 0xFF, .W1, .LIG, .VFNMADD231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xBE, 0xFF, .W0, .L1, .VFNMSUB231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBE, 0xFF, .W1, .L1, .VFNMSUB231PD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBE, 0xFF, .W1, .L0, .VFNMSUB231PD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xBE, 0xFF, .W0, .L1, .VFNMSUB231PS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBE, 0xFF, .W0, .L0, .VFNMSUB231PS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F38, 1, 0xBF, 0xFF, .W1, .LIG, .VFNMSUB231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xBF, 0xFF, .W0, .LIG, .VFNMSUB231SS, {.XMM, .XMM, .XMM_M32, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, op_count=3, needs_modrm=true}}, + {._0F38, 1, 0xBF, 0xFF, .W1, .LIG, .VFNMSUB231SD, {.XMM, .XMM, .XMM_M64, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W1, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xDB, 0xFF, .WIG, .L0, .VAESIMC, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=2, needs_modrm=true}}, {._0F38, 1, 0xDC, 0xFF, .WIG, .L0, .VAESENC, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F38, 1, 0xDD, 0xFF, .WIG, .L0, .VAESENCLAST, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, @@ -2044,27 +2136,27 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F3A, 1, 0x0D, 0xFF, .WIG, .L0, .VBLENDPD, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x0E, 0xFF, .WIG, .L1, .VPBLENDW, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x0E, 0xFF, .WIG, .L0, .VPBLENDW, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, - {._0F3A, 1, 0x0F, 0xFF, .WIG, .L1, .VPALIGNR, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x0F, 0xFF, .WIG, .L0, .VPALIGNR, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, + {._0F3A, 1, 0x0F, 0xFF, .WIG, .L1, .VPALIGNR, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x14, 0xFF, .WIG, .L0, .VPEXTRB, {.RM8, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x15, 0xFF, .WIG, .L0, .VPEXTRW, {.RM16, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F3A, 1, 0x16, 0xFF, .WIG, .L0, .VPEXTRD, {.RM32, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x16, 0xFF, .W1, .L0, .VPEXTRQ, {.RM64, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x16, 0xFF, .WIG, .L0, .VPEXTRD, {.RM32, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x17, 0xFF, .WIG, .L0, .VEXTRACTPS, {.RM32, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x18, 0xFF, .WIG, .L1, .VINSERTF128, {.YMM, .YMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x19, 0xFF, .WIG, .L1, .VEXTRACTF128, {.XMM_M128, .YMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, - {._0F3A, 1, 0x1D, 0xFF, .WIG, .L1, .VCVTPS2PH, {.XMM_M128, .YMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x1D, 0xFF, .WIG, .L0, .VCVTPS2PH, {.XMM_M64, .XMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x1D, 0xFF, .WIG, .L1, .VCVTPS2PH, {.XMM_M128, .YMM, .IMM8, .NONE}, {.MR, .REG, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x20, 0xFF, .WIG, .L0, .VPINSRB, {.XMM, .XMM, .RM8, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x21, 0xFF, .WIG, .L0, .VINSERTPS, {.XMM, .XMM, .XMM_M32, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, - {._0F3A, 1, 0x22, 0xFF, .WIG, .L0, .VPINSRD, {.XMM, .XMM, .RM32, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x22, 0xFF, .W1, .L0, .VPINSRQ, {.XMM, .XMM, .RM64, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=4, needs_modrm=true}}, - {._0F3A, 1, 0x30, 0xFF, .W0, .L0, .KSHIFTRB, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x22, 0xFF, .WIG, .L0, .VPINSRD, {.XMM, .XMM, .RM32, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x30, 0xFF, .W1, .L0, .KSHIFTRW, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x30, 0xFF, .W0, .L0, .KSHIFTRB, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x31, 0xFF, .W0, .L0, .KSHIFTRD, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x31, 0xFF, .W1, .L0, .KSHIFTRQ, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, - {._0F3A, 1, 0x32, 0xFF, .W1, .L0, .KSHIFTLW, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x32, 0xFF, .W0, .L0, .KSHIFTLB, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x32, 0xFF, .W1, .L0, .KSHIFTLW, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x33, 0xFF, .W0, .L0, .KSHIFTLD, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x33, 0xFF, .W1, .L0, .KSHIFTLQ, {.K, .K, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0x38, 0xFF, .WIG, .L1, .VINSERTI128, {.YMM, .YMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, @@ -2072,8 +2164,8 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F3A, 1, 0x40, 0xFF, .WIG, .L1, .VDPPS, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x40, 0xFF, .WIG, .L0, .VDPPS, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x41, 0xFF, .WIG, .L0, .VDPPD, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, - {._0F3A, 1, 0x42, 0xFF, .WIG, .L0, .VMPSADBW, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x42, 0xFF, .WIG, .L1, .VMPSADBW, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, + {._0F3A, 1, 0x42, 0xFF, .WIG, .L0, .VMPSADBW, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x44, 0xFF, .WIG, .L0, .VPCLMULQDQ, {.XMM, .XMM, .XMM_M128, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x44, 0xFF, .WIG, .L1, .VPCLMULQDQ, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x46, 0xFF, .WIG, .L1, .VPERM2I128, {.YMM, .YMM, .YMM_M256, .IMM8}, {.REG, .VVVV, .MR, .IB}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L1, op_count=4, needs_modrm=true}}, @@ -2081,8 +2173,12 @@ VEX_DECODE_ENTRIES := [667]lib.VEX_Decode_Entry{ {._0F3A, 1, 0x4A, 0xFF, .W0, .L1, .VBLENDVPS, {.YMM, .YMM, .YMM_M256, .YMM}, {.REG, .VVVV, .MR, .IS4}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x4B, 0xFF, .W0, .L1, .VBLENDVPD, {.YMM, .YMM, .YMM_M256, .YMM}, {.REG, .VVVV, .MR, .IS4}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x4B, 0xFF, .W0, .L0, .VBLENDVPD, {.XMM, .XMM, .XMM_M128, .XMM}, {.REG, .VVVV, .MR, .IS4}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=4, needs_modrm=true}}, - {._0F3A, 1, 0x4C, 0xFF, .W0, .L1, .VPBLENDVB, {.YMM, .YMM, .YMM_M256, .YMM}, {.REG, .VVVV, .MR, .IS4}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=4, needs_modrm=true}}, {._0F3A, 1, 0x4C, 0xFF, .W0, .L0, .VPBLENDVB, {.XMM, .XMM, .XMM_M128, .XMM}, {.REG, .VVVV, .MR, .IS4}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=4, needs_modrm=true}}, + {._0F3A, 1, 0x4C, 0xFF, .W0, .L1, .VPBLENDVB, {.YMM, .YMM, .YMM_M256, .YMM}, {.REG, .VVVV, .MR, .IS4}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, op_count=4, needs_modrm=true}}, + {._0F3A, 1, 0x60, 0xFF, .W0, .L0, .VPCMPESTRM, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x61, 0xFF, .W0, .L0, .VPCMPESTRI, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x62, 0xFF, .WIG, .L0, .VPCMPISTRM, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, + {._0F3A, 1, 0x63, 0xFF, .WIG, .L0, .VPCMPISTRI, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 1, 0xDF, 0xFF, .WIG, .L0, .VAESKEYGENASSIST, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 3, 0xF0, 0xFF, .W0, .L0, .RORX, {.R32, .RM32, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=3, vex_type=.VEX, vex_w=.W0, vex_l=.L0, op_count=3, needs_modrm=true}}, {._0F3A, 3, 0xF0, 0xFF, .W1, .L0, .RORX, {.R64, .RM64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, {esc=._0F3A, prefix=3, vex_type=.VEX, vex_w=.W1, vex_l=.L0, op_count=3, needs_modrm=true}}, @@ -2687,422 +2783,433 @@ DECODE_INDEX_LEGACY := [4][256]lib.Decode_Index{ DECODE_INDEX_ESC_0F := [4][256]lib.Decode_Index{ { // prefix = none 0x00 = { 614, 10}, - 0x01 = { 624, 26}, - 0x02 = { 650, 3}, - 0x03 = { 653, 3}, - 0x05 = { 656, 1}, - 0x06 = { 657, 1}, - 0x07 = { 658, 1}, - 0x08 = { 659, 1}, - 0x09 = { 660, 1}, - 0x0B = { 661, 1}, - 0x0D = { 662, 1}, - 0x10 = { 663, 1}, - 0x11 = { 664, 1}, - 0x12 = { 665, 2}, - 0x13 = { 667, 1}, - 0x14 = { 668, 1}, - 0x15 = { 669, 1}, - 0x16 = { 670, 2}, - 0x17 = { 672, 1}, - 0x18 = { 673, 4}, - 0x1C = { 677, 1}, - 0x1F = { 678, 3}, - 0x20 = { 681, 1}, - 0x21 = { 682, 1}, - 0x22 = { 683, 1}, - 0x23 = { 684, 1}, - 0x28 = { 685, 1}, - 0x29 = { 686, 1}, - 0x2B = { 687, 1}, - 0x2E = { 688, 1}, - 0x2F = { 689, 1}, - 0x30 = { 690, 1}, - 0x31 = { 691, 1}, - 0x32 = { 692, 1}, - 0x33 = { 693, 1}, - 0x34 = { 694, 1}, - 0x35 = { 695, 1}, - 0x40 = { 696, 3}, - 0x41 = { 699, 3}, - 0x42 = { 702, 9}, - 0x43 = { 711, 9}, - 0x44 = { 720, 6}, - 0x45 = { 726, 6}, - 0x46 = { 732, 6}, - 0x47 = { 738, 6}, - 0x48 = { 744, 3}, - 0x49 = { 747, 3}, - 0x4A = { 750, 6}, - 0x4B = { 756, 6}, - 0x4C = { 762, 6}, - 0x4D = { 768, 6}, - 0x4E = { 774, 6}, - 0x4F = { 780, 6}, - 0x50 = { 786, 2}, - 0x51 = { 788, 1}, - 0x52 = { 789, 1}, - 0x53 = { 790, 1}, - 0x54 = { 791, 1}, - 0x55 = { 792, 1}, - 0x56 = { 793, 1}, - 0x57 = { 794, 1}, - 0x58 = { 795, 1}, - 0x59 = { 796, 1}, - 0x5A = { 797, 1}, - 0x5B = { 798, 1}, - 0x5C = { 799, 1}, - 0x5D = { 800, 1}, - 0x5E = { 801, 1}, - 0x5F = { 802, 1}, - 0x6E = { 803, 1}, - 0x6F = { 804, 1}, - 0x70 = { 805, 1}, - 0x78 = { 806, 1}, - 0x79 = { 807, 1}, - 0x7E = { 808, 1}, - 0x7F = { 809, 1}, - 0x80 = { 810, 1}, - 0x81 = { 811, 1}, - 0x82 = { 812, 3}, - 0x83 = { 815, 3}, - 0x84 = { 818, 2}, - 0x85 = { 820, 2}, - 0x86 = { 822, 2}, - 0x87 = { 824, 2}, - 0x88 = { 826, 1}, - 0x89 = { 827, 1}, - 0x8A = { 828, 2}, - 0x8B = { 830, 2}, - 0x8C = { 832, 2}, - 0x8D = { 834, 2}, - 0x8E = { 836, 2}, - 0x8F = { 838, 2}, - 0x90 = { 840, 1}, - 0x91 = { 841, 1}, - 0x92 = { 842, 3}, - 0x93 = { 845, 3}, - 0x94 = { 848, 2}, - 0x95 = { 850, 2}, - 0x96 = { 852, 2}, - 0x97 = { 854, 2}, - 0x98 = { 856, 1}, - 0x99 = { 857, 1}, - 0x9A = { 858, 2}, - 0x9B = { 860, 2}, - 0x9C = { 862, 2}, - 0x9D = { 864, 2}, - 0x9E = { 866, 2}, - 0x9F = { 868, 2}, - 0xA0 = { 870, 1}, - 0xA1 = { 871, 1}, - 0xA2 = { 872, 1}, - 0xA3 = { 873, 3}, - 0xA4 = { 876, 3}, - 0xA5 = { 879, 3}, - 0xA8 = { 882, 1}, - 0xA9 = { 883, 1}, - 0xAA = { 884, 1}, - 0xAB = { 885, 3}, - 0xAC = { 888, 3}, - 0xAD = { 891, 3}, - 0xAE = { 894, 14}, - 0xAF = { 908, 3}, - 0xB0 = { 911, 1}, - 0xB1 = { 912, 3}, - 0xB3 = { 915, 3}, - 0xB6 = { 918, 3}, - 0xB7 = { 921, 2}, - 0xB9 = { 923, 1}, - 0xBA = { 924, 12}, - 0xBB = { 936, 3}, - 0xBC = { 939, 3}, - 0xBD = { 942, 3}, - 0xBE = { 945, 3}, - 0xBF = { 948, 2}, - 0xC0 = { 950, 1}, - 0xC1 = { 951, 3}, - 0xC2 = { 954, 1}, - 0xC6 = { 955, 1}, - 0xC7 = { 956, 16}, - 0xC8 = { 972, 2}, - 0xFF = { 974, 1}, + 0x01 = { 624, 48}, + 0x02 = { 672, 3}, + 0x03 = { 675, 3}, + 0x05 = { 678, 1}, + 0x06 = { 679, 1}, + 0x07 = { 680, 1}, + 0x08 = { 681, 1}, + 0x09 = { 682, 1}, + 0x0B = { 683, 1}, + 0x0D = { 684, 2}, + 0x10 = { 686, 1}, + 0x11 = { 687, 1}, + 0x12 = { 688, 2}, + 0x13 = { 690, 1}, + 0x14 = { 691, 1}, + 0x15 = { 692, 1}, + 0x16 = { 693, 2}, + 0x17 = { 695, 1}, + 0x18 = { 696, 4}, + 0x1C = { 700, 1}, + 0x1F = { 701, 3}, + 0x20 = { 704, 1}, + 0x21 = { 705, 1}, + 0x22 = { 706, 1}, + 0x23 = { 707, 1}, + 0x28 = { 708, 1}, + 0x29 = { 709, 1}, + 0x2B = { 710, 1}, + 0x2E = { 711, 1}, + 0x2F = { 712, 1}, + 0x30 = { 713, 1}, + 0x31 = { 714, 1}, + 0x32 = { 715, 1}, + 0x33 = { 716, 1}, + 0x34 = { 717, 1}, + 0x35 = { 718, 1}, + 0x40 = { 719, 3}, + 0x41 = { 722, 3}, + 0x42 = { 725, 9}, + 0x43 = { 734, 9}, + 0x44 = { 743, 6}, + 0x45 = { 749, 6}, + 0x46 = { 755, 6}, + 0x47 = { 761, 6}, + 0x48 = { 767, 3}, + 0x49 = { 770, 3}, + 0x4A = { 773, 6}, + 0x4B = { 779, 6}, + 0x4C = { 785, 6}, + 0x4D = { 791, 6}, + 0x4E = { 797, 6}, + 0x4F = { 803, 6}, + 0x50 = { 809, 2}, + 0x51 = { 811, 1}, + 0x52 = { 812, 1}, + 0x53 = { 813, 1}, + 0x54 = { 814, 1}, + 0x55 = { 815, 1}, + 0x56 = { 816, 1}, + 0x57 = { 817, 1}, + 0x58 = { 818, 1}, + 0x59 = { 819, 1}, + 0x5A = { 820, 1}, + 0x5B = { 821, 1}, + 0x5C = { 822, 1}, + 0x5D = { 823, 1}, + 0x5E = { 824, 1}, + 0x5F = { 825, 1}, + 0x6E = { 826, 1}, + 0x6F = { 827, 1}, + 0x70 = { 828, 1}, + 0x78 = { 829, 1}, + 0x79 = { 830, 1}, + 0x7E = { 831, 1}, + 0x7F = { 832, 1}, + 0x80 = { 833, 1}, + 0x81 = { 834, 1}, + 0x82 = { 835, 3}, + 0x83 = { 838, 3}, + 0x84 = { 841, 2}, + 0x85 = { 843, 2}, + 0x86 = { 845, 2}, + 0x87 = { 847, 2}, + 0x88 = { 849, 1}, + 0x89 = { 850, 1}, + 0x8A = { 851, 2}, + 0x8B = { 853, 2}, + 0x8C = { 855, 2}, + 0x8D = { 857, 2}, + 0x8E = { 859, 2}, + 0x8F = { 861, 2}, + 0x90 = { 863, 1}, + 0x91 = { 864, 1}, + 0x92 = { 865, 3}, + 0x93 = { 868, 3}, + 0x94 = { 871, 2}, + 0x95 = { 873, 2}, + 0x96 = { 875, 2}, + 0x97 = { 877, 2}, + 0x98 = { 879, 1}, + 0x99 = { 880, 1}, + 0x9A = { 881, 2}, + 0x9B = { 883, 2}, + 0x9C = { 885, 2}, + 0x9D = { 887, 2}, + 0x9E = { 889, 2}, + 0x9F = { 891, 2}, + 0xA0 = { 893, 1}, + 0xA1 = { 894, 1}, + 0xA2 = { 895, 1}, + 0xA3 = { 896, 3}, + 0xA4 = { 899, 3}, + 0xA5 = { 902, 3}, + 0xA8 = { 905, 1}, + 0xA9 = { 906, 1}, + 0xAA = { 907, 1}, + 0xAB = { 908, 3}, + 0xAC = { 911, 3}, + 0xAD = { 914, 3}, + 0xAE = { 917, 14}, + 0xAF = { 931, 3}, + 0xB0 = { 934, 1}, + 0xB1 = { 935, 3}, + 0xB3 = { 938, 3}, + 0xB6 = { 941, 3}, + 0xB7 = { 944, 2}, + 0xB9 = { 946, 1}, + 0xBA = { 947, 12}, + 0xBB = { 959, 3}, + 0xBC = { 962, 3}, + 0xBD = { 965, 3}, + 0xBE = { 968, 3}, + 0xBF = { 971, 2}, + 0xC0 = { 973, 1}, + 0xC1 = { 974, 3}, + 0xC2 = { 977, 1}, + 0xC6 = { 978, 1}, + 0xC7 = { 979, 16}, + 0xC8 = { 995, 2}, + 0xFF = { 997, 1}, }, { // prefix = 66 - 0x10 = { 975, 1}, - 0x11 = { 976, 1}, - 0x12 = { 977, 1}, - 0x13 = { 978, 1}, - 0x14 = { 979, 1}, - 0x15 = { 980, 1}, - 0x16 = { 981, 1}, - 0x17 = { 982, 1}, - 0x28 = { 983, 1}, - 0x29 = { 984, 1}, - 0x2B = { 985, 1}, - 0x2E = { 986, 1}, - 0x2F = { 987, 1}, - 0x50 = { 988, 2}, - 0x51 = { 990, 1}, - 0x54 = { 991, 1}, - 0x55 = { 992, 1}, - 0x56 = { 993, 1}, - 0x57 = { 994, 1}, - 0x58 = { 995, 1}, - 0x59 = { 996, 1}, - 0x5A = { 997, 1}, - 0x5B = { 998, 1}, - 0x5C = { 999, 1}, - 0x5D = {1000, 1}, - 0x5E = {1001, 1}, - 0x5F = {1002, 1}, - 0x60 = {1003, 1}, - 0x61 = {1004, 1}, - 0x62 = {1005, 1}, - 0x63 = {1006, 1}, - 0x64 = {1007, 1}, - 0x65 = {1008, 1}, - 0x66 = {1009, 1}, - 0x67 = {1010, 1}, - 0x68 = {1011, 1}, - 0x69 = {1012, 1}, - 0x6A = {1013, 1}, - 0x6B = {1014, 1}, - 0x6C = {1015, 1}, - 0x6D = {1016, 1}, - 0x6E = {1017, 2}, - 0x6F = {1019, 1}, - 0x70 = {1020, 1}, - 0x71 = {1021, 3}, - 0x72 = {1024, 3}, - 0x73 = {1027, 2}, - 0x74 = {1029, 1}, - 0x75 = {1030, 1}, - 0x76 = {1031, 1}, - 0x7C = {1032, 1}, - 0x7D = {1033, 1}, - 0x7E = {1034, 2}, - 0x7F = {1036, 1}, - 0xAE = {1037, 2}, - 0xC2 = {1039, 1}, - 0xC4 = {1040, 2}, - 0xC5 = {1042, 2}, - 0xC6 = {1044, 1}, - 0xC7 = {1045, 1}, - 0xD0 = {1046, 1}, - 0xD1 = {1047, 1}, - 0xD2 = {1048, 1}, - 0xD3 = {1049, 1}, - 0xD4 = {1050, 1}, - 0xD5 = {1051, 1}, - 0xD6 = {1052, 1}, - 0xD7 = {1053, 2}, - 0xD8 = {1055, 1}, - 0xD9 = {1056, 1}, - 0xDA = {1057, 1}, - 0xDB = {1058, 1}, - 0xDC = {1059, 1}, - 0xDD = {1060, 1}, - 0xDE = {1061, 1}, - 0xDF = {1062, 1}, - 0xE0 = {1063, 1}, - 0xE1 = {1064, 1}, - 0xE2 = {1065, 1}, - 0xE3 = {1066, 1}, - 0xE4 = {1067, 1}, - 0xE5 = {1068, 1}, - 0xE6 = {1069, 1}, - 0xE7 = {1070, 1}, - 0xE8 = {1071, 1}, - 0xE9 = {1072, 1}, - 0xEA = {1073, 1}, - 0xEB = {1074, 1}, - 0xEC = {1075, 1}, - 0xED = {1076, 1}, - 0xEE = {1077, 1}, - 0xEF = {1078, 1}, - 0xF1 = {1079, 1}, - 0xF2 = {1080, 1}, - 0xF3 = {1081, 1}, - 0xF4 = {1082, 1}, - 0xF5 = {1083, 1}, - 0xF6 = {1084, 1}, - 0xF7 = {1085, 1}, - 0xF8 = {1086, 1}, - 0xF9 = {1087, 1}, - 0xFA = {1088, 1}, - 0xFB = {1089, 1}, - 0xFC = {1090, 1}, - 0xFD = {1091, 1}, - 0xFE = {1092, 1}, + 0x10 = { 998, 1}, + 0x11 = { 999, 1}, + 0x12 = {1000, 1}, + 0x13 = {1001, 1}, + 0x14 = {1002, 1}, + 0x15 = {1003, 1}, + 0x16 = {1004, 1}, + 0x17 = {1005, 1}, + 0x28 = {1006, 1}, + 0x29 = {1007, 1}, + 0x2B = {1008, 1}, + 0x2E = {1009, 1}, + 0x2F = {1010, 1}, + 0x50 = {1011, 2}, + 0x51 = {1013, 1}, + 0x54 = {1014, 1}, + 0x55 = {1015, 1}, + 0x56 = {1016, 1}, + 0x57 = {1017, 1}, + 0x58 = {1018, 1}, + 0x59 = {1019, 1}, + 0x5A = {1020, 1}, + 0x5B = {1021, 1}, + 0x5C = {1022, 1}, + 0x5D = {1023, 1}, + 0x5E = {1024, 1}, + 0x5F = {1025, 1}, + 0x60 = {1026, 1}, + 0x61 = {1027, 1}, + 0x62 = {1028, 1}, + 0x63 = {1029, 1}, + 0x64 = {1030, 1}, + 0x65 = {1031, 1}, + 0x66 = {1032, 1}, + 0x67 = {1033, 1}, + 0x68 = {1034, 1}, + 0x69 = {1035, 1}, + 0x6A = {1036, 1}, + 0x6B = {1037, 1}, + 0x6C = {1038, 1}, + 0x6D = {1039, 1}, + 0x6E = {1040, 2}, + 0x6F = {1042, 1}, + 0x70 = {1043, 1}, + 0x71 = {1044, 3}, + 0x72 = {1047, 3}, + 0x73 = {1050, 2}, + 0x74 = {1052, 1}, + 0x75 = {1053, 1}, + 0x76 = {1054, 1}, + 0x7C = {1055, 1}, + 0x7D = {1056, 1}, + 0x7E = {1057, 2}, + 0x7F = {1059, 1}, + 0xAE = {1060, 3}, + 0xC2 = {1063, 1}, + 0xC4 = {1064, 2}, + 0xC5 = {1066, 2}, + 0xC6 = {1068, 1}, + 0xC7 = {1069, 1}, + 0xD0 = {1070, 1}, + 0xD1 = {1071, 1}, + 0xD2 = {1072, 1}, + 0xD3 = {1073, 1}, + 0xD4 = {1074, 1}, + 0xD5 = {1075, 1}, + 0xD6 = {1076, 1}, + 0xD7 = {1077, 2}, + 0xD8 = {1079, 1}, + 0xD9 = {1080, 1}, + 0xDA = {1081, 1}, + 0xDB = {1082, 1}, + 0xDC = {1083, 1}, + 0xDD = {1084, 1}, + 0xDE = {1085, 1}, + 0xDF = {1086, 1}, + 0xE0 = {1087, 1}, + 0xE1 = {1088, 1}, + 0xE2 = {1089, 1}, + 0xE3 = {1090, 1}, + 0xE4 = {1091, 1}, + 0xE5 = {1092, 1}, + 0xE6 = {1093, 1}, + 0xE7 = {1094, 1}, + 0xE8 = {1095, 1}, + 0xE9 = {1096, 1}, + 0xEA = {1097, 1}, + 0xEB = {1098, 1}, + 0xEC = {1099, 1}, + 0xED = {1100, 1}, + 0xEE = {1101, 1}, + 0xEF = {1102, 1}, + 0xF1 = {1103, 1}, + 0xF2 = {1104, 1}, + 0xF3 = {1105, 1}, + 0xF4 = {1106, 1}, + 0xF5 = {1107, 1}, + 0xF6 = {1108, 1}, + 0xF7 = {1109, 1}, + 0xF8 = {1110, 1}, + 0xF9 = {1111, 1}, + 0xFA = {1112, 1}, + 0xFB = {1113, 1}, + 0xFC = {1114, 1}, + 0xFD = {1115, 1}, + 0xFE = {1116, 1}, }, { // prefix = F3 - 0x01 = {1093, 3}, - 0x10 = {1096, 1}, - 0x11 = {1097, 1}, - 0x12 = {1098, 1}, - 0x16 = {1099, 1}, - 0x1E = {1100, 4}, - 0x2A = {1104, 2}, - 0x2C = {1106, 2}, - 0x2D = {1108, 2}, - 0x51 = {1110, 1}, - 0x52 = {1111, 1}, - 0x53 = {1112, 1}, - 0x58 = {1113, 1}, - 0x59 = {1114, 1}, - 0x5A = {1115, 1}, - 0x5B = {1116, 1}, - 0x5C = {1117, 1}, - 0x5D = {1118, 1}, - 0x5E = {1119, 1}, - 0x5F = {1120, 1}, - 0x6F = {1121, 1}, - 0x70 = {1122, 1}, - 0x7E = {1123, 1}, - 0x7F = {1124, 1}, - 0xAE = {1125, 3}, - 0xB8 = {1128, 3}, - 0xBC = {1131, 3}, - 0xBD = {1134, 3}, - 0xC2 = {1137, 1}, - 0xC7 = {1138, 1}, - 0xE6 = {1139, 1}, + 0x01 = {1117, 6}, + 0x09 = {1123, 1}, + 0x10 = {1124, 1}, + 0x11 = {1125, 1}, + 0x12 = {1126, 1}, + 0x16 = {1127, 1}, + 0x1E = {1128, 4}, + 0x2A = {1132, 2}, + 0x2C = {1134, 2}, + 0x2D = {1136, 2}, + 0x51 = {1138, 1}, + 0x52 = {1139, 1}, + 0x53 = {1140, 1}, + 0x58 = {1141, 1}, + 0x59 = {1142, 1}, + 0x5A = {1143, 1}, + 0x5B = {1144, 1}, + 0x5C = {1145, 1}, + 0x5D = {1146, 1}, + 0x5E = {1147, 1}, + 0x5F = {1148, 1}, + 0x6F = {1149, 1}, + 0x70 = {1150, 1}, + 0x7E = {1151, 1}, + 0x7F = {1152, 1}, + 0xAE = {1153, 14}, + 0xB8 = {1167, 3}, + 0xBC = {1170, 3}, + 0xBD = {1173, 3}, + 0xC2 = {1176, 1}, + 0xC7 = {1177, 2}, + 0xE6 = {1179, 1}, }, { // prefix = F2 - 0x10 = {1140, 1}, - 0x11 = {1141, 1}, - 0x12 = {1142, 1}, - 0x2A = {1143, 2}, - 0x2C = {1145, 2}, - 0x2D = {1147, 2}, - 0x51 = {1149, 1}, - 0x58 = {1150, 1}, - 0x59 = {1151, 1}, - 0x5A = {1152, 1}, - 0x5C = {1153, 1}, - 0x5D = {1154, 1}, - 0x5E = {1155, 1}, - 0x5F = {1156, 1}, - 0x70 = {1157, 1}, - 0x7C = {1158, 1}, - 0x7D = {1159, 1}, - 0xC2 = {1160, 1}, - 0xD0 = {1161, 1}, - 0xE6 = {1162, 1}, - 0xF0 = {1163, 1}, + 0x01 = {1180, 2}, + 0x10 = {1182, 1}, + 0x11 = {1183, 1}, + 0x12 = {1184, 1}, + 0x2A = {1185, 2}, + 0x2C = {1187, 2}, + 0x2D = {1189, 2}, + 0x51 = {1191, 1}, + 0x58 = {1192, 1}, + 0x59 = {1193, 1}, + 0x5A = {1194, 1}, + 0x5C = {1195, 1}, + 0x5D = {1196, 1}, + 0x5E = {1197, 1}, + 0x5F = {1198, 1}, + 0x70 = {1199, 1}, + 0x7C = {1200, 1}, + 0x7D = {1201, 1}, + 0xAE = {1202, 1}, + 0xC2 = {1203, 1}, + 0xD0 = {1204, 1}, + 0xE6 = {1205, 1}, + 0xF0 = {1206, 1}, }, } @(rodata) DECODE_INDEX_ESC_0F38 := [4][256]lib.Decode_Index{ { // prefix = none - 0xC8 = {1164, 1}, - 0xC9 = {1165, 1}, - 0xCA = {1166, 1}, - 0xCB = {1167, 1}, - 0xCC = {1168, 1}, - 0xCD = {1169, 1}, - 0xF0 = {1170, 3}, - 0xF1 = {1173, 3}, - 0xF6 = {1176, 2}, + 0xC8 = {1207, 1}, + 0xC9 = {1208, 1}, + 0xCA = {1209, 1}, + 0xCB = {1210, 1}, + 0xCC = {1211, 1}, + 0xCD = {1212, 1}, + 0xF0 = {1213, 3}, + 0xF1 = {1216, 3}, + 0xF6 = {1219, 2}, + 0xF9 = {1221, 2}, + 0xFC = {1223, 2}, }, { // prefix = 66 - 0x00 = {1178, 1}, - 0x01 = {1179, 1}, - 0x02 = {1180, 1}, - 0x03 = {1181, 1}, - 0x04 = {1182, 1}, - 0x05 = {1183, 1}, - 0x06 = {1184, 1}, - 0x07 = {1185, 1}, - 0x08 = {1186, 1}, - 0x09 = {1187, 1}, - 0x0A = {1188, 1}, - 0x0B = {1189, 1}, - 0x10 = {1190, 1}, - 0x14 = {1191, 1}, - 0x15 = {1192, 1}, - 0x17 = {1193, 1}, - 0x1C = {1194, 1}, - 0x1D = {1195, 1}, - 0x1E = {1196, 1}, - 0x20 = {1197, 1}, - 0x21 = {1198, 1}, - 0x22 = {1199, 1}, - 0x23 = {1200, 1}, - 0x24 = {1201, 1}, - 0x25 = {1202, 1}, - 0x28 = {1203, 1}, - 0x29 = {1204, 1}, - 0x2A = {1205, 1}, - 0x2B = {1206, 1}, - 0x30 = {1207, 1}, - 0x31 = {1208, 1}, - 0x32 = {1209, 1}, - 0x33 = {1210, 1}, - 0x34 = {1211, 1}, - 0x35 = {1212, 1}, - 0x37 = {1213, 1}, - 0x38 = {1214, 1}, - 0x39 = {1215, 1}, - 0x3A = {1216, 1}, - 0x3B = {1217, 1}, - 0x3C = {1218, 1}, - 0x3D = {1219, 1}, - 0x3E = {1220, 1}, - 0x3F = {1221, 1}, - 0x40 = {1222, 1}, - 0x41 = {1223, 1}, - 0x80 = {1224, 1}, - 0x81 = {1225, 1}, - 0x82 = {1226, 2}, - 0xDB = {1228, 1}, - 0xDC = {1229, 1}, - 0xDD = {1230, 1}, - 0xDE = {1231, 1}, - 0xDF = {1232, 1}, - 0xF5 = {1233, 2}, - 0xF6 = {1235, 2}, + 0x00 = {1225, 1}, + 0x01 = {1226, 1}, + 0x02 = {1227, 1}, + 0x03 = {1228, 1}, + 0x04 = {1229, 1}, + 0x05 = {1230, 1}, + 0x06 = {1231, 1}, + 0x07 = {1232, 1}, + 0x08 = {1233, 1}, + 0x09 = {1234, 1}, + 0x0A = {1235, 1}, + 0x0B = {1236, 1}, + 0x10 = {1237, 1}, + 0x14 = {1238, 1}, + 0x15 = {1239, 1}, + 0x17 = {1240, 1}, + 0x1C = {1241, 1}, + 0x1D = {1242, 1}, + 0x1E = {1243, 1}, + 0x20 = {1244, 1}, + 0x21 = {1245, 1}, + 0x22 = {1246, 1}, + 0x23 = {1247, 1}, + 0x24 = {1248, 1}, + 0x25 = {1249, 1}, + 0x28 = {1250, 1}, + 0x29 = {1251, 1}, + 0x2A = {1252, 1}, + 0x2B = {1253, 1}, + 0x30 = {1254, 1}, + 0x31 = {1255, 1}, + 0x32 = {1256, 1}, + 0x33 = {1257, 1}, + 0x34 = {1258, 1}, + 0x35 = {1259, 1}, + 0x37 = {1260, 1}, + 0x38 = {1261, 1}, + 0x39 = {1262, 1}, + 0x3A = {1263, 1}, + 0x3B = {1264, 1}, + 0x3C = {1265, 1}, + 0x3D = {1266, 1}, + 0x3E = {1267, 1}, + 0x3F = {1268, 1}, + 0x40 = {1269, 1}, + 0x41 = {1270, 1}, + 0x80 = {1271, 1}, + 0x81 = {1272, 1}, + 0x82 = {1273, 2}, + 0xDB = {1275, 1}, + 0xDC = {1276, 1}, + 0xDD = {1277, 1}, + 0xDE = {1278, 1}, + 0xDF = {1279, 1}, + 0xF5 = {1280, 2}, + 0xF6 = {1282, 2}, + 0xF8 = {1284, 1}, + 0xFC = {1285, 2}, }, { // prefix = F3 - 0xF6 = {1237, 2}, + 0xF6 = {1287, 2}, + 0xF8 = {1289, 1}, + 0xFC = {1290, 2}, }, { // prefix = F2 - 0xF0 = {1239, 2}, - 0xF1 = {1241, 3}, + 0xF0 = {1292, 2}, + 0xF1 = {1294, 3}, + 0xF8 = {1297, 1}, + 0xFC = {1298, 2}, }, } @(rodata) DECODE_INDEX_ESC_0F3A := [4][256]lib.Decode_Index{ { // prefix = none - 0xCC = {1244, 1}, + 0xCC = {1300, 1}, }, { // prefix = 66 - 0x08 = {1245, 1}, - 0x09 = {1246, 1}, - 0x0A = {1247, 1}, - 0x0B = {1248, 1}, - 0x0C = {1249, 1}, - 0x0D = {1250, 1}, - 0x0E = {1251, 1}, - 0x0F = {1252, 1}, - 0x14 = {1253, 1}, - 0x16 = {1254, 2}, - 0x17 = {1256, 1}, - 0x20 = {1257, 1}, - 0x21 = {1258, 1}, - 0x22 = {1259, 2}, - 0x40 = {1261, 1}, - 0x41 = {1262, 1}, - 0x42 = {1263, 1}, - 0x44 = {1264, 1}, - 0x60 = {1265, 1}, - 0x61 = {1266, 1}, - 0x62 = {1267, 1}, - 0x63 = {1268, 1}, - 0xDF = {1269, 1}, + 0x08 = {1301, 1}, + 0x09 = {1302, 1}, + 0x0A = {1303, 1}, + 0x0B = {1304, 1}, + 0x0C = {1305, 1}, + 0x0D = {1306, 1}, + 0x0E = {1307, 1}, + 0x0F = {1308, 1}, + 0x14 = {1309, 1}, + 0x16 = {1310, 2}, + 0x17 = {1312, 1}, + 0x20 = {1313, 1}, + 0x21 = {1314, 1}, + 0x22 = {1315, 2}, + 0x40 = {1317, 1}, + 0x41 = {1318, 1}, + 0x42 = {1319, 1}, + 0x44 = {1320, 1}, + 0x60 = {1321, 1}, + 0x61 = {1322, 1}, + 0x62 = {1323, 1}, + 0x63 = {1324, 1}, + 0xDF = {1325, 1}, }, { // prefix = F3 }, @@ -3219,214 +3326,228 @@ VEX_INDEX_0F := [4][256]lib.Decode_Index{ 0x74 = {199, 2}, 0x75 = {201, 2}, 0x76 = {203, 2}, - 0x7E = {205, 2}, - 0x7F = {207, 2}, - 0x90 = {209, 2}, - 0x91 = {211, 2}, - 0x92 = {213, 1}, - 0x93 = {214, 1}, - 0x98 = {215, 2}, - 0x99 = {217, 2}, - 0xC2 = {219, 2}, - 0xC4 = {221, 1}, - 0xC5 = {222, 1}, - 0xC6 = {223, 2}, - 0xD1 = {225, 2}, - 0xD2 = {227, 2}, - 0xD3 = {229, 2}, - 0xD4 = {231, 2}, - 0xD5 = {233, 2}, - 0xD6 = {235, 1}, - 0xD7 = {236, 2}, - 0xDB = {238, 2}, - 0xDF = {240, 2}, - 0xE1 = {242, 2}, - 0xE2 = {244, 2}, - 0xE4 = {246, 2}, - 0xE5 = {248, 2}, - 0xE6 = {250, 2}, - 0xE7 = {252, 2}, - 0xEB = {254, 2}, - 0xEF = {256, 2}, - 0xF1 = {258, 2}, - 0xF2 = {260, 2}, - 0xF3 = {262, 2}, - 0xF4 = {264, 2}, - 0xF5 = {266, 2}, - 0xF7 = {268, 1}, - 0xF8 = {269, 2}, - 0xF9 = {271, 2}, - 0xFA = {273, 2}, - 0xFB = {275, 2}, - 0xFC = {277, 2}, - 0xFD = {279, 2}, - 0xFE = {281, 2}, + 0x7C = {205, 2}, + 0x7D = {207, 2}, + 0x7E = {209, 2}, + 0x7F = {211, 2}, + 0x90 = {213, 2}, + 0x91 = {215, 2}, + 0x92 = {217, 1}, + 0x93 = {218, 1}, + 0x98 = {219, 2}, + 0x99 = {221, 2}, + 0xC2 = {223, 2}, + 0xC4 = {225, 1}, + 0xC5 = {226, 1}, + 0xC6 = {227, 2}, + 0xD0 = {229, 2}, + 0xD1 = {231, 2}, + 0xD2 = {233, 2}, + 0xD3 = {235, 2}, + 0xD4 = {237, 2}, + 0xD5 = {239, 2}, + 0xD6 = {241, 1}, + 0xD7 = {242, 2}, + 0xDB = {244, 2}, + 0xDF = {246, 2}, + 0xE1 = {248, 2}, + 0xE2 = {250, 2}, + 0xE4 = {252, 2}, + 0xE5 = {254, 2}, + 0xE6 = {256, 2}, + 0xE7 = {258, 2}, + 0xEB = {260, 2}, + 0xEF = {262, 2}, + 0xF1 = {264, 2}, + 0xF2 = {266, 2}, + 0xF3 = {268, 2}, + 0xF4 = {270, 2}, + 0xF5 = {272, 2}, + 0xF7 = {274, 1}, + 0xF8 = {275, 2}, + 0xF9 = {277, 2}, + 0xFA = {279, 2}, + 0xFB = {281, 2}, + 0xFC = {283, 2}, + 0xFD = {285, 2}, + 0xFE = {287, 2}, }, 2 = { /* prefix = F3 */ - 0x10 = {283, 2}, - 0x11 = {285, 1}, - 0x2A = {286, 2}, - 0x2C = {288, 2}, - 0x2D = {290, 2}, - 0x51 = {292, 1}, - 0x52 = {293, 1}, - 0x53 = {294, 1}, - 0x58 = {295, 1}, - 0x59 = {296, 1}, - 0x5A = {297, 1}, - 0x5B = {298, 2}, - 0x5C = {300, 1}, - 0x5D = {301, 1}, - 0x5E = {302, 1}, - 0x5F = {303, 1}, - 0x6F = {304, 2}, - 0x70 = {306, 2}, - 0x7E = {308, 1}, - 0x7F = {309, 2}, - 0xC2 = {311, 1}, - 0xE6 = {312, 2}, + 0x10 = {289, 2}, + 0x11 = {291, 1}, + 0x12 = {292, 2}, + 0x16 = {294, 2}, + 0x2A = {296, 2}, + 0x2C = {298, 2}, + 0x2D = {300, 2}, + 0x51 = {302, 1}, + 0x52 = {303, 1}, + 0x53 = {304, 1}, + 0x58 = {305, 1}, + 0x59 = {306, 1}, + 0x5A = {307, 1}, + 0x5B = {308, 2}, + 0x5C = {310, 1}, + 0x5D = {311, 1}, + 0x5E = {312, 1}, + 0x5F = {313, 1}, + 0x6F = {314, 2}, + 0x70 = {316, 2}, + 0x7E = {318, 1}, + 0x7F = {319, 2}, + 0xC2 = {321, 1}, + 0xE6 = {322, 2}, }, 3 = { /* prefix = F2 */ - 0x10 = {314, 2}, - 0x11 = {316, 1}, - 0x2A = {317, 2}, - 0x2C = {319, 2}, - 0x2D = {321, 2}, - 0x51 = {323, 1}, - 0x58 = {324, 1}, - 0x59 = {325, 1}, - 0x5A = {326, 1}, - 0x5C = {327, 1}, - 0x5D = {328, 1}, - 0x5E = {329, 1}, - 0x5F = {330, 1}, - 0x70 = {331, 2}, - 0x92 = {333, 2}, - 0x93 = {335, 2}, - 0xC2 = {337, 1}, - 0xE6 = {338, 2}, + 0x10 = {324, 2}, + 0x11 = {326, 1}, + 0x12 = {327, 2}, + 0x2A = {329, 2}, + 0x2C = {331, 2}, + 0x2D = {333, 2}, + 0x51 = {335, 1}, + 0x58 = {336, 1}, + 0x59 = {337, 1}, + 0x5A = {338, 1}, + 0x5C = {339, 1}, + 0x5D = {340, 1}, + 0x5E = {341, 1}, + 0x5F = {342, 1}, + 0x70 = {343, 2}, + 0x7C = {345, 2}, + 0x7D = {347, 2}, + 0x92 = {349, 2}, + 0x93 = {351, 2}, + 0xC2 = {353, 1}, + 0xD0 = {354, 2}, + 0xE6 = {356, 2}, + 0xF0 = {358, 2}, }, } @(rodata) VEX_INDEX_0F38 := [4][256]lib.Decode_Index{ 0 = { /* prefix = none */ - 0xF2 = {340, 2}, - 0xF3 = {342, 6}, - 0xF5 = {348, 2}, - 0xF7 = {350, 2}, + 0xF2 = {360, 2}, + 0xF3 = {362, 6}, + 0xF5 = {368, 2}, + 0xF7 = {370, 2}, }, 1 = { /* prefix = 66 */ - 0x00 = {352, 2}, - 0x01 = {354, 2}, - 0x02 = {356, 2}, - 0x03 = {358, 2}, - 0x04 = {360, 2}, - 0x05 = {362, 2}, - 0x06 = {364, 2}, - 0x07 = {366, 2}, - 0x08 = {368, 2}, - 0x09 = {370, 2}, - 0x0A = {372, 2}, - 0x0B = {374, 2}, - 0x0E = {376, 2}, - 0x0F = {378, 2}, - 0x13 = {380, 2}, - 0x16 = {382, 1}, - 0x17 = {383, 2}, - 0x18 = {385, 4}, - 0x19 = {389, 2}, - 0x1A = {391, 1}, - 0x1C = {392, 2}, - 0x1D = {394, 2}, - 0x1E = {396, 2}, - 0x20 = {398, 2}, - 0x21 = {400, 2}, - 0x22 = {402, 2}, - 0x23 = {404, 2}, - 0x24 = {406, 2}, - 0x25 = {408, 2}, - 0x28 = {410, 2}, - 0x29 = {412, 2}, - 0x2A = {414, 2}, - 0x2B = {416, 2}, - 0x2C = {418, 2}, - 0x2D = {420, 2}, - 0x2E = {422, 2}, - 0x2F = {424, 2}, - 0x30 = {426, 2}, - 0x31 = {428, 2}, - 0x32 = {430, 2}, - 0x33 = {432, 2}, - 0x34 = {434, 2}, - 0x35 = {436, 2}, - 0x36 = {438, 1}, - 0x37 = {439, 2}, - 0x38 = {441, 2}, - 0x39 = {443, 2}, - 0x3A = {445, 2}, - 0x3B = {447, 2}, - 0x3C = {449, 2}, - 0x3D = {451, 2}, - 0x3E = {453, 2}, - 0x3F = {455, 2}, - 0x40 = {457, 2}, - 0x41 = {459, 1}, - 0x45 = {460, 4}, - 0x46 = {464, 2}, - 0x47 = {466, 4}, - 0x5A = {470, 1}, - 0x8C = {471, 4}, - 0x8E = {475, 4}, - 0x90 = {479, 4}, - 0x91 = {483, 4}, - 0x92 = {487, 4}, - 0x93 = {491, 4}, - 0x96 = {495, 4}, - 0x97 = {499, 4}, - 0x98 = {503, 4}, - 0x99 = {507, 2}, - 0x9A = {509, 4}, - 0x9B = {513, 2}, - 0x9C = {515, 4}, - 0x9D = {519, 2}, - 0x9E = {521, 4}, - 0x9F = {525, 2}, - 0xA6 = {527, 4}, - 0xA7 = {531, 4}, - 0xA8 = {535, 4}, - 0xA9 = {539, 2}, - 0xAA = {541, 4}, - 0xAB = {545, 2}, - 0xAC = {547, 4}, - 0xAD = {551, 2}, - 0xAE = {553, 4}, - 0xAF = {557, 2}, - 0xB6 = {559, 4}, - 0xB7 = {563, 4}, - 0xB8 = {567, 4}, - 0xB9 = {571, 2}, - 0xBA = {573, 4}, - 0xBB = {577, 2}, - 0xBC = {579, 4}, - 0xBD = {583, 2}, - 0xBE = {585, 4}, - 0xBF = {589, 2}, - 0xDB = {591, 1}, - 0xDC = {592, 1}, - 0xDD = {593, 1}, - 0xDE = {594, 1}, - 0xDF = {595, 1}, - 0xF7 = {596, 2}, + 0x00 = {372, 2}, + 0x01 = {374, 2}, + 0x02 = {376, 2}, + 0x03 = {378, 2}, + 0x04 = {380, 2}, + 0x05 = {382, 2}, + 0x06 = {384, 2}, + 0x07 = {386, 2}, + 0x08 = {388, 2}, + 0x09 = {390, 2}, + 0x0A = {392, 2}, + 0x0B = {394, 2}, + 0x0E = {396, 2}, + 0x0F = {398, 2}, + 0x13 = {400, 2}, + 0x16 = {402, 1}, + 0x17 = {403, 2}, + 0x18 = {405, 4}, + 0x19 = {409, 2}, + 0x1A = {411, 1}, + 0x1C = {412, 2}, + 0x1D = {414, 2}, + 0x1E = {416, 2}, + 0x20 = {418, 2}, + 0x21 = {420, 2}, + 0x22 = {422, 2}, + 0x23 = {424, 2}, + 0x24 = {426, 2}, + 0x25 = {428, 2}, + 0x28 = {430, 2}, + 0x29 = {432, 2}, + 0x2A = {434, 2}, + 0x2B = {436, 2}, + 0x2C = {438, 2}, + 0x2D = {440, 2}, + 0x2E = {442, 2}, + 0x2F = {444, 2}, + 0x30 = {446, 2}, + 0x31 = {448, 2}, + 0x32 = {450, 2}, + 0x33 = {452, 2}, + 0x34 = {454, 2}, + 0x35 = {456, 2}, + 0x36 = {458, 1}, + 0x37 = {459, 2}, + 0x38 = {461, 2}, + 0x39 = {463, 2}, + 0x3A = {465, 2}, + 0x3B = {467, 2}, + 0x3C = {469, 2}, + 0x3D = {471, 2}, + 0x3E = {473, 2}, + 0x3F = {475, 2}, + 0x40 = {477, 2}, + 0x41 = {479, 1}, + 0x45 = {480, 4}, + 0x46 = {484, 2}, + 0x47 = {486, 4}, + 0x58 = {490, 4}, + 0x59 = {494, 4}, + 0x5A = {498, 1}, + 0x78 = {499, 4}, + 0x79 = {503, 4}, + 0x8C = {507, 4}, + 0x8E = {511, 4}, + 0x90 = {515, 4}, + 0x91 = {519, 4}, + 0x92 = {523, 4}, + 0x93 = {527, 4}, + 0x96 = {531, 4}, + 0x97 = {535, 4}, + 0x98 = {539, 4}, + 0x99 = {543, 2}, + 0x9A = {545, 4}, + 0x9B = {549, 2}, + 0x9C = {551, 4}, + 0x9D = {555, 2}, + 0x9E = {557, 4}, + 0x9F = {561, 2}, + 0xA6 = {563, 4}, + 0xA7 = {567, 4}, + 0xA8 = {571, 4}, + 0xA9 = {575, 2}, + 0xAA = {577, 4}, + 0xAB = {581, 2}, + 0xAC = {583, 4}, + 0xAD = {587, 2}, + 0xAE = {589, 4}, + 0xAF = {593, 2}, + 0xB6 = {595, 4}, + 0xB7 = {599, 4}, + 0xB8 = {603, 4}, + 0xB9 = {607, 2}, + 0xBA = {609, 4}, + 0xBB = {613, 2}, + 0xBC = {615, 4}, + 0xBD = {619, 2}, + 0xBE = {621, 4}, + 0xBF = {625, 2}, + 0xDB = {627, 1}, + 0xDC = {628, 1}, + 0xDD = {629, 1}, + 0xDE = {630, 1}, + 0xDF = {631, 1}, + 0xF7 = {632, 2}, }, 2 = { /* prefix = F3 */ - 0xF5 = {598, 2}, - 0xF7 = {600, 2}, + 0xF5 = {634, 2}, + 0xF7 = {636, 2}, }, 3 = { /* prefix = F2 */ - 0xF5 = {602, 2}, - 0xF6 = {604, 2}, - 0xF7 = {606, 2}, + 0xF5 = {638, 2}, + 0xF6 = {640, 2}, + 0xF7 = {642, 2}, }, } @@ -3434,47 +3555,51 @@ VEX_INDEX_0F38 := [4][256]lib.Decode_Index{ VEX_INDEX_0F3A := [4][256]lib.Decode_Index{ 0 = { /* prefix = none */ }, 1 = { /* prefix = 66 */ - 0x00 = {608, 1}, - 0x01 = {609, 1}, - 0x02 = {610, 2}, - 0x06 = {612, 1}, - 0x08 = {613, 2}, - 0x09 = {615, 2}, - 0x0A = {617, 1}, - 0x0B = {618, 1}, - 0x0C = {619, 2}, - 0x0D = {621, 2}, - 0x0E = {623, 2}, - 0x0F = {625, 2}, - 0x14 = {627, 1}, - 0x15 = {628, 1}, - 0x16 = {629, 2}, - 0x17 = {631, 1}, - 0x18 = {632, 1}, - 0x19 = {633, 1}, - 0x1D = {634, 2}, - 0x20 = {636, 1}, - 0x21 = {637, 1}, - 0x22 = {638, 2}, - 0x30 = {640, 2}, - 0x31 = {642, 2}, - 0x32 = {644, 2}, - 0x33 = {646, 2}, - 0x38 = {648, 1}, - 0x39 = {649, 1}, - 0x40 = {650, 2}, - 0x41 = {652, 1}, - 0x42 = {653, 2}, - 0x44 = {655, 2}, - 0x46 = {657, 1}, - 0x4A = {658, 2}, - 0x4B = {660, 2}, - 0x4C = {662, 2}, - 0xDF = {664, 1}, + 0x00 = {644, 1}, + 0x01 = {645, 1}, + 0x02 = {646, 2}, + 0x06 = {648, 1}, + 0x08 = {649, 2}, + 0x09 = {651, 2}, + 0x0A = {653, 1}, + 0x0B = {654, 1}, + 0x0C = {655, 2}, + 0x0D = {657, 2}, + 0x0E = {659, 2}, + 0x0F = {661, 2}, + 0x14 = {663, 1}, + 0x15 = {664, 1}, + 0x16 = {665, 2}, + 0x17 = {667, 1}, + 0x18 = {668, 1}, + 0x19 = {669, 1}, + 0x1D = {670, 2}, + 0x20 = {672, 1}, + 0x21 = {673, 1}, + 0x22 = {674, 2}, + 0x30 = {676, 2}, + 0x31 = {678, 2}, + 0x32 = {680, 2}, + 0x33 = {682, 2}, + 0x38 = {684, 1}, + 0x39 = {685, 1}, + 0x40 = {686, 2}, + 0x41 = {688, 1}, + 0x42 = {689, 2}, + 0x44 = {691, 2}, + 0x46 = {693, 1}, + 0x4A = {694, 2}, + 0x4B = {696, 2}, + 0x4C = {698, 2}, + 0x60 = {700, 1}, + 0x61 = {701, 1}, + 0x62 = {702, 1}, + 0x63 = {703, 1}, + 0xDF = {704, 1}, }, 2 = { /* prefix = F3 */ }, 3 = { /* prefix = F2 */ - 0xF0 = {665, 2}, + 0xF0 = {705, 2}, }, } diff --git a/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin b/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin index 3cbdec673..83a1046f6 100644 --- a/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin +++ b/core/rexcode/isa/x86/tablegen/generated/encode_tables.odin @@ -8,7 +8,7 @@ package rexcode_x86_generated import lib "../.." @(rodata) -ENCODE_FORMS := [2355]lib.Encoding{ +ENCODE_FORMS := [2451]lib.Encoding{ // .MOV {.MOV, {.RM8, .R8, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x88, 0, {explicit_count=2}}, {.MOV, {.RM16, .R16, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x89, 0, {explicit_count=2}}, @@ -800,6 +800,8 @@ ENCODE_FORMS := [2355]lib.Encoding{ {.MOVSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA5, 0, {opsize_16=true, rep_ok=true}}, // .MOVSD {.MOVSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA5, 0, {rep_ok=true}}, + {.MOVSD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x10, 0, {esc=._0F, prefix=3, explicit_count=2}}, + {.MOVSD, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x11, 0, {esc=._0F, prefix=3, explicit_count=2}}, // .MOVSQ {.MOVSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA5, 0, {force_rex_w=true, rep_ok=true}}, // .CMPS @@ -810,6 +812,7 @@ ENCODE_FORMS := [2355]lib.Encoding{ {.CMPSW, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {opsize_16=true, rep_ok=true}}, // .CMPSD {.CMPSD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {rep_ok=true}}, + {.CMPSD, {.XMM, .XMM_M64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=3, explicit_count=3}}, // .CMPSQ {.CMPSQ, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0xA7, 0, {force_rex_w=true, rep_ok=true}}, // .SCAS @@ -973,9 +976,6 @@ ENCODE_FORMS := [2355]lib.Encoding{ // .MOVSS {.MOVSS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x10, 0, {esc=._0F, prefix=2, explicit_count=2}}, {.MOVSS, {.XMM_M32, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x11, 0, {esc=._0F, prefix=2, explicit_count=2}}, - // .MOVSD_SSE - {.MOVSD_SSE, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x10, 0, {esc=._0F, prefix=3, explicit_count=2}}, - {.MOVSD_SSE, {.XMM_M64, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x11, 0, {esc=._0F, prefix=3, explicit_count=2}}, // .MOVDQA {.MOVDQA, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x6F, 0, {esc=._0F, prefix=1, explicit_count=2}}, {.MOVDQA, {.XMM_M128, .XMM, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0x7F, 0, {esc=._0F, prefix=1, explicit_count=2}}, @@ -1110,8 +1110,6 @@ ENCODE_FORMS := [2355]lib.Encoding{ {.CMPPD, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=1, explicit_count=3}}, // .CMPSS {.CMPSS, {.XMM, .XMM_M32, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=2, explicit_count=3}}, - // .CMPSD_SSE - {.CMPSD_SSE, {.XMM, .XMM_M64, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0xC2, 0, {esc=._0F, prefix=3, explicit_count=3}}, // .COMISS {.COMISS, {.XMM, .XMM_M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x2F, 0, {esc=._0F, explicit_count=2}}, // .COMISD @@ -1762,6 +1760,64 @@ ENCODE_FORMS := [2355]lib.Encoding{ // .VMOVNTDQA {.VMOVNTDQA, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x2A, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L0, explicit_count=2}}, {.VMOVNTDQA, {.YMM, .M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x2A, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_l=.L1, explicit_count=2}}, + // .VADDSUBPS + {.VADDSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + {.VADDSUBPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, explicit_count=3}}, + // .VADDSUBPD + {.VADDSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + {.VADDSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0xD0, 0, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, explicit_count=3}}, + // .VHADDPS + {.VHADDPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + {.VHADDPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, explicit_count=3}}, + // .VHADDPD + {.VHADDPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + {.VHADDPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7C, 0, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, explicit_count=3}}, + // .VHSUBPS + {.VHSUBPS, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + {.VHSUBPS, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, explicit_count=3}}, + // .VHSUBPD + {.VHSUBPD, {.XMM, .XMM, .XMM_M128, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + {.VHSUBPD, {.YMM, .YMM, .YMM_M256, .NONE}, {.REG, .VVVV, .MR, .NONE}, 0x7D, 0, {esc=._0F, prefix=1, vex_type=.VEX, vex_l=.L1, explicit_count=3}}, + // .VLDDQU + {.VLDDQU, {.XMM, .M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF0, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, explicit_count=2}}, + {.VLDDQU, {.YMM, .M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF0, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, explicit_count=2}}, + // .VMOVDDUP + {.VMOVDDUP, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L0, explicit_count=2}}, + {.VMOVDDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=3, vex_type=.VEX, vex_l=.L1, explicit_count=2}}, + // .VMOVSLDUP + {.VMOVSLDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, explicit_count=2}}, + {.VMOVSLDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x12, 0, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, explicit_count=2}}, + // .VMOVSHDUP + {.VMOVSHDUP, {.XMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x16, 0, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L0, explicit_count=2}}, + {.VMOVSHDUP, {.YMM, .YMM_M256, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x16, 0, {esc=._0F, prefix=2, vex_type=.VEX, vex_l=.L1, explicit_count=2}}, + // .VPCMPESTRI + {.VPCMPESTRI, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x61, 0, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=3}}, + // .VPCMPESTRM + {.VPCMPESTRM, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x60, 0, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=3}}, + // .VPCMPISTRI + {.VPCMPISTRI, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x63, 0, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + // .VPCMPISTRM + {.VPCMPISTRM, {.XMM, .XMM_M128, .IMM8, .NONE}, {.REG, .MR, .IB, .NONE}, 0x62, 0, {esc=._0F3A, prefix=1, vex_type=.VEX, vex_l=.L0, explicit_count=3}}, + // .VPBROADCASTB + {.VPBROADCASTB, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTB, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + {.VPBROADCASTB, {.XMM, .M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTB, {.YMM, .M8, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x78, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + // .VPBROADCASTW + {.VPBROADCASTW, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTW, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + {.VPBROADCASTW, {.XMM, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTW, {.YMM, .M16, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x79, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + // .VPBROADCASTD + {.VPBROADCASTD, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTD, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + {.VPBROADCASTD, {.XMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTD, {.YMM, .M32, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x58, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + // .VPBROADCASTQ + {.VPBROADCASTQ, {.XMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTQ, {.YMM, .XMM, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, + {.VPBROADCASTQ, {.XMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L0, explicit_count=2}}, + {.VPBROADCASTQ, {.YMM, .M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x59, 0, {esc=._0F38, prefix=1, vex_type=.VEX, vex_w=.W0, vex_l=.L1, explicit_count=2}}, // .VCVTPS2PD {.VCVTPS2PD, {.XMM, .XMM_M64, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x5A, 0, {esc=._0F, vex_type=.VEX, vex_l=.L0, explicit_count=2}}, {.VCVTPS2PD, {.YMM, .XMM_M128, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0x5A, 0, {esc=._0F, vex_type=.VEX, vex_l=.L1, explicit_count=2}}, @@ -3539,6 +3595,3800 @@ ENCODE_FORMS := [2355]lib.Encoding{ {.RDSEED, {.R16, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, modrm_reg_ext=true, explicit_count=1}}, {.RDSEED, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, modrm_reg_ext=true, explicit_count=1}}, {.RDSEED, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, force_rex_w=true, modrm_reg_ext=true, explicit_count=1}}, + // .SWAPGS + {.SWAPGS, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 248, {esc=._0F}}, + // .MONITOR + {.MONITOR, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 200, {esc=._0F}}, + // .MWAIT + {.MWAIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 201, {esc=._0F}}, + // .CLAC + {.CLAC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 202, {esc=._0F}}, + // .STAC + {.STAC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 203, {esc=._0F}}, + // .RDFSBASE + {.RDFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 0, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + {.RDFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 0, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, explicit_count=1}}, + // .RDGSBASE + {.RDGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 1, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + {.RDGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 1, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, explicit_count=1}}, + // .WRFSBASE + {.WRFSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 2, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + {.WRFSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 2, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, explicit_count=1}}, + // .WRGSBASE + {.WRGSBASE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 3, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + {.WRGSBASE, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 3, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, explicit_count=1}}, + // .PTWRITE + {.PTWRITE, {.RM32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 4, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + {.PTWRITE, {.RM64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 4, {esc=._0F, prefix=2, force_rex_w=true, modrm_reg_ext=true, explicit_count=1}}, + // .RDPID + {.RDPID, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xC7, 7, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + // .WBNOINVD + {.WBNOINVD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x09, 0, {esc=._0F, prefix=2}}, + // .SERIALIZE + {.SERIALIZE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 232, {esc=._0F}}, + // .PREFETCH + {.PREFETCH, {.M8, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0x0D, 0, {esc=._0F, modrm_reg_ext=true, explicit_count=1}}, + // .TPAUSE + {.TPAUSE, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, prefix=1, modrm_reg_ext=true, explicit_count=1}}, + // .UMONITOR + {.UMONITOR, {.R64, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, prefix=2, modrm_reg_ext=true, explicit_count=1}}, + // .UMWAIT + {.UMWAIT, {.R32, .NONE, .NONE, .NONE}, {.MR, .NONE, .NONE, .NONE}, 0xAE, 6, {esc=._0F, prefix=3, modrm_reg_ext=true, explicit_count=1}}, + // .MOVDIRI + {.MOVDIRI, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xF9, 0, {esc=._0F38, explicit_count=2}}, + {.MOVDIRI, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xF9, 0, {esc=._0F38, force_rex_w=true, explicit_count=2}}, + // .MOVDIR64B + {.MOVDIR64B, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF8, 0, {esc=._0F38, prefix=1, explicit_count=2}}, + // .ENQCMD + {.ENQCMD, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF8, 0, {esc=._0F38, prefix=3, explicit_count=2}}, + // .ENQCMDS + {.ENQCMDS, {.R64, .M512, .NONE, .NONE}, {.REG, .MR, .NONE, .NONE}, 0xF8, 0, {esc=._0F38, prefix=2, explicit_count=2}}, + // .AADD + {.AADD, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, explicit_count=2}}, + {.AADD, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, force_rex_w=true, explicit_count=2}}, + // .AAND + {.AAND, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=1, explicit_count=2}}, + {.AAND, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=1, force_rex_w=true, explicit_count=2}}, + // .AOR + {.AOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=3, explicit_count=2}}, + {.AOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=3, force_rex_w=true, explicit_count=2}}, + // .AXOR + {.AXOR, {.M32, .R32, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=2, explicit_count=2}}, + {.AXOR, {.M64, .R64, .NONE, .NONE}, {.MR, .REG, .NONE, .NONE}, 0xFC, 0, {esc=._0F38, prefix=2, force_rex_w=true, explicit_count=2}}, + // .XEND + {.XEND, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 213, {esc=._0F}}, + // .XTEST + {.XTEST, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 214, {esc=._0F}}, + // .VMRUN + {.VMRUN, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 216, {esc=._0F}}, + // .VMMCALL + {.VMMCALL, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 217, {esc=._0F}}, + // .VMLOAD + {.VMLOAD, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 218, {esc=._0F}}, + // .VMSAVE + {.VMSAVE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 219, {esc=._0F}}, + // .STGI + {.STGI, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 220, {esc=._0F}}, + // .CLGI + {.CLGI, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 221, {esc=._0F}}, + // .SKINIT + {.SKINIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 222, {esc=._0F}}, + // .INVLPGA + {.INVLPGA, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 223, {esc=._0F}}, + // .INVLPGB + {.INVLPGB, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 254, {esc=._0F}}, + // .TLBSYNC + {.TLBSYNC, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 255, {esc=._0F}}, + // .PVALIDATE + {.PVALIDATE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 255, {esc=._0F, prefix=3}}, + // .RMPADJUST + {.RMPADJUST, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 254, {esc=._0F, prefix=2}}, + // .RMPUPDATE + {.RMPUPDATE, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 254, {esc=._0F, prefix=3}}, + // .PSMASH + {.PSMASH, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 255, {esc=._0F, prefix=2}}, + // .CLZERO + {.CLZERO, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 252, {esc=._0F}}, + // .MONITORX + {.MONITORX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 250, {esc=._0F}}, + // .MWAITX + {.MWAITX, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 251, {esc=._0F}}, + // .RDPRU + {.RDPRU, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 253, {esc=._0F}}, + // .MCOMMIT + {.MCOMMIT, {.NONE, .NONE, .NONE, .NONE}, {.NONE, .NONE, .NONE, .NONE}, 0x01, 250, {esc=._0F, prefix=2}}, +} + +@(rodata) +CLOBBER_FORMS := [2451]lib.Clobber{ + // .MOV + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .MOVABS + {written={0}, read={1}}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + // .MOVZX + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .MOVSX + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .MOVSXD + {written={0}, read={1}, reads_mem=true}, + // .XCHG + {written={1}, read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}}, + {written={1}, read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}}, + {written={1}, read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, writes_mem=true, reads_mem=true}, + // .PUSH + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true}, + // .POP + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + {written={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true}, + // .LEA + {written={0}}, + {written={0}}, + {written={0}}, + // .ADD + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .ADC + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + // .SUB + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .SBB + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + // .MUL + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + // .IMUL + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .OF}, flags_undef={.PF, .AF, .ZF, .SF}, reads_mem=true}, + // .DIV + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .IDIV + {read={0}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RDX}, flags_undef={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .INC + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .DEC + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .NEG + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .CMP + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .AND + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + // .OR + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + // .XOR + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + // .NOT + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, writes_mem=true, reads_mem=true}, + // .TEST + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={1}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, reads_mem=true}, + // .SHL + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + // .SHR + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + // .SAR + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .PF, .ZF, .SF, .OF}, flags_undef={.AF}, writes_mem=true, reads_mem=true}, + // .ROL + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + // .ROR + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, writes_mem=true, reads_mem=true}, + // .RCL + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + // .RCR + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0}, implicit_rd={.RCX}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF, .OF}, flags_rd={.CF}, writes_mem=true, reads_mem=true}, + // .SHLD + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + // .SHRD + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1, 2}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_rd={.RCX}, flags_wr={.CF, .PF, .ZF, .SF}, flags_undef={.AF, .OF}, writes_mem=true, reads_mem=true}, + // .BT + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .BTS + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .BTR + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .BTC + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_undef={.PF, .AF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .BSF + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + // .BSR + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, flags_undef={.CF, .PF, .AF, .SF, .OF}, reads_mem=true}, + // .POPCNT + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .LZCNT + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .TZCNT + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .JMP + {read={0}, side_effects={.CONTROL}}, + {read={0}, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, reads_mem=true, side_effects={.CONTROL}}, + // .JA + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + // .JAE + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + // .JB + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + // .JBE + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + // .JC + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + // .JE + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + // .JZ + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + // .JG + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + // .JGE + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + // .JL + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + // .JLE + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + // .JNA + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + // .JNAE + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + // .JNB + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + // .JNBE + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + {flags_rd={.CF, .ZF}, side_effects={.CONTROL}}, + // .JNC + {flags_rd={.CF}, side_effects={.CONTROL}}, + {flags_rd={.CF}, side_effects={.CONTROL}}, + // .JNE + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + // .JNZ + {flags_rd={.ZF}, side_effects={.CONTROL}}, + {flags_rd={.ZF}, side_effects={.CONTROL}}, + // .JNG + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + // .JNGE + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + // .JNL + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.SF, .OF}, side_effects={.CONTROL}}, + // .JNLE + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + {flags_rd={.ZF, .SF, .OF}, side_effects={.CONTROL}}, + // .JNO + {flags_rd={.OF}, side_effects={.CONTROL}}, + {flags_rd={.OF}, side_effects={.CONTROL}}, + // .JNP + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + // .JNS + {flags_rd={.SF}, side_effects={.CONTROL}}, + {flags_rd={.SF}, side_effects={.CONTROL}}, + // .JO + {flags_rd={.OF}, side_effects={.CONTROL}}, + {flags_rd={.OF}, side_effects={.CONTROL}}, + // .JP + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + // .JPE + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + // .JPO + {flags_rd={.PF}, side_effects={.CONTROL}}, + {flags_rd={.PF}, side_effects={.CONTROL}}, + // .JS + {flags_rd={.SF}, side_effects={.CONTROL}}, + {flags_rd={.SF}, side_effects={.CONTROL}}, + // .JCXZ + {implicit_rd={.RCX}, side_effects={.CONTROL}}, + // .JECXZ + {implicit_rd={.RCX}, side_effects={.CONTROL}}, + // .JRCXZ + {implicit_rd={.RCX}, side_effects={.CONTROL}}, + // .LOOP + {implicit_wr={.RCX}, implicit_rd={.RCX}, side_effects={.CONTROL}}, + // .LOOPE + {implicit_wr={.RCX}, implicit_rd={.RCX}, flags_rd={.ZF}, side_effects={.CONTROL}}, + // .LOOPNE + {implicit_wr={.RCX}, implicit_rd={.RCX}, flags_rd={.ZF}, side_effects={.CONTROL}}, + // .CALL + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + {read={0}, implicit_wr={.RSP}, implicit_rd={.RSP}, writes_mem=true, reads_mem=true, side_effects={.CONTROL}}, + // .RET + {implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true, side_effects={.CONTROL}}, + {implicit_wr={.RSP}, implicit_rd={.RSP}, reads_mem=true, side_effects={.CONTROL}}, + // .IRET + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true, side_effects={.SERIALIZING, .CONTROL}}, + // .IRETD + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true, side_effects={.SERIALIZING, .CONTROL}}, + // .IRETQ + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true, side_effects={.SERIALIZING, .CONTROL}}, + // .INT + {read={0}, implicit_wr={.RSP}, flags_wr={.IF}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true, side_effects={.INTERRUPT, .CONTROL}}, + // .INT3 + {implicit_wr={.RSP}, flags_wr={.IF}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true, side_effects={.INTERRUPT, .CONTROL}}, + // .INTO + {implicit_wr={.RSP}, flags_wr={.IF}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true, side_effects={.INTERRUPT, .CONTROL}}, + // .SYSCALL + {implicit_wr={.RCX, .R11}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, side_effects={.INTERRUPT, .CONTROL}}, + // .SYSRET + {implicit_rd={.RCX, .R11}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, side_effects={.SERIALIZING, .INTERRUPT, .PRIVILEGED, .CONTROL}}, + // .SYSENTER + {implicit_wr={.RSP}, flags_wr={.IF}, side_effects={.INTERRUPT, .CONTROL}}, + // .SYSEXIT + {implicit_wr={.RSP}, implicit_rd={.RCX, .RDX}, side_effects={.SERIALIZING, .INTERRUPT, .PRIVILEGED, .CONTROL}}, + // .SETA + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + // .SETAE + {written={0}, flags_rd={.CF}, writes_mem=true}, + // .SETB + {written={0}, flags_rd={.CF}, writes_mem=true}, + // .SETBE + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + // .SETC + {written={0}, flags_rd={.CF}, writes_mem=true}, + // .SETE + {written={0}, flags_rd={.ZF}, writes_mem=true}, + // .SETG + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + // .SETGE + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + // .SETL + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + // .SETLE + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + // .SETNA + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + // .SETNAE + {written={0}, flags_rd={.CF}, writes_mem=true}, + // .SETNB + {written={0}, flags_rd={.CF}, writes_mem=true}, + // .SETNBE + {written={0}, flags_rd={.CF, .ZF}, writes_mem=true}, + // .SETNC + {written={0}, flags_rd={.CF}, writes_mem=true}, + // .SETNE + {written={0}, flags_rd={.ZF}, writes_mem=true}, + // .SETNG + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + // .SETNGE + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + // .SETNL + {written={0}, flags_rd={.SF, .OF}, writes_mem=true}, + // .SETNLE + {written={0}, flags_rd={.ZF, .SF, .OF}, writes_mem=true}, + // .SETNO + {written={0}, flags_rd={.OF}, writes_mem=true}, + // .SETNP + {written={0}, flags_rd={.PF}, writes_mem=true}, + // .SETNS + {written={0}, flags_rd={.SF}, writes_mem=true}, + // .SETNZ + {written={0}, flags_rd={.ZF}, writes_mem=true}, + // .SETO + {written={0}, flags_rd={.OF}, writes_mem=true}, + // .SETP + {written={0}, flags_rd={.PF}, writes_mem=true}, + // .SETPE + {written={0}, flags_rd={.PF}, writes_mem=true}, + // .SETPO + {written={0}, flags_rd={.PF}, writes_mem=true}, + // .SETS + {written={0}, flags_rd={.SF}, writes_mem=true}, + // .SETZ + {written={0}, flags_rd={.ZF}, writes_mem=true}, + // .CMOVA + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + // .CMOVAE + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + // .CMOVB + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + // .CMOVBE + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + // .CMOVC + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + // .CMOVE + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + // .CMOVG + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + // .CMOVGE + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + // .CMOVL + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + // .CMOVLE + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + // .CMOVNA + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + // .CMOVNAE + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + // .CMOVNB + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + // .CMOVNBE + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF, .ZF}, reads_mem=true}, + // .CMOVNC + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.CF}, reads_mem=true}, + // .CMOVNE + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + // .CMOVNG + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + // .CMOVNGE + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + // .CMOVNL + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF, .OF}, reads_mem=true}, + // .CMOVNLE + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF, .SF, .OF}, reads_mem=true}, + // .CMOVNO + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + // .CMOVNP + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + // .CMOVNS + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + // .CMOVNZ + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + // .CMOVO + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.OF}, reads_mem=true}, + // .CMOVP + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + // .CMOVPE + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + // .CMOVPO + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.PF}, reads_mem=true}, + // .CMOVS + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.SF}, reads_mem=true}, + // .CMOVZ + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_rd={.ZF}, reads_mem=true}, + // .MOVS + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .MOVSB + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .MOVSW + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .MOVSD + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVSQ + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .CMPS + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .CMPSB + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .CMPSW + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .CMPSD + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CMPSQ + {implicit_wr={.RCX, .RSI, .RDI}, implicit_rd={.RCX, .RSI, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .SCAS + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .SCASB + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .SCASW + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .SCASD + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .SCASQ + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, flags_rd={.DF}, reads_mem=true}, + // .LODS + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + // .LODSB + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + // .LODSW + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + // .LODSD + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + // .LODSQ + {implicit_wr={.RAX, .RSI}, implicit_rd={.RSI}, flags_rd={.DF}, reads_mem=true}, + // .STOS + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .STOSB + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .STOSW + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .STOSD + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .STOSQ + {implicit_wr={.RCX, .RDI}, implicit_rd={.RAX, .RCX, .RDI}, flags_rd={.DF}, writes_mem=true, reads_mem=true}, + // .CLC + {flags_wr={.CF}}, + // .STC + {flags_wr={.CF}}, + // .CMC + {flags_wr={.CF}, flags_rd={.CF}}, + // .CLD + {flags_wr={.DF}}, + // .STD + {flags_wr={.DF}}, + // .CLI + {flags_wr={.IF}}, + // .STI + {flags_wr={.IF}}, + // .LAHF + {implicit_wr={.RAX}, flags_rd={.CF, .PF, .AF, .ZF, .SF}}, + // .SAHF + {implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF}}, + // .PUSHF + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true}, + // .PUSHFD + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true}, + // .PUSHFQ + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_rd={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, writes_mem=true}, + // .POPF + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true}, + // .POPFD + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true}, + // .POPFQ + {implicit_wr={.RSP}, implicit_rd={.RSP}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF, .DF, .IF}, reads_mem=true}, + // .NOP + {}, + {}, + {}, + {}, + // .HLT + {side_effects={.HALT, .PRIVILEGED}}, + // .WAIT + {implicit_rd={.FPU_SW}}, + // .LOCK + {side_effects={.FENCE}}, + // .UD0 + {side_effects={.TRAP}}, + // .UD1 + {side_effects={.TRAP}}, + // .UD2 + {side_effects={.TRAP}}, + // .CPUID + {implicit_wr={.RAX, .RBX, .RCX, .RDX}, implicit_rd={.RAX, .RCX}, side_effects={.SERIALIZING}}, + // .RDTSC + {implicit_wr={.RAX, .RDX}}, + // .RDTSCP + {implicit_wr={.RAX, .RCX, .RDX}}, + // .RDPMC + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}}, + // .XGETBV + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}}, + // .XSETBV + {implicit_rd={.RAX, .RCX, .RDX}}, + // .CBW + {implicit_wr={.RAX}, implicit_rd={.RAX}}, + // .CWDE + {implicit_wr={.RAX}, implicit_rd={.RAX}}, + // .CDQE + {implicit_wr={.RAX}, implicit_rd={.RAX}}, + // .CWD + {implicit_wr={.RDX}, implicit_rd={.RAX}}, + // .CDQ + {implicit_wr={.RDX}, implicit_rd={.RAX}}, + // .CQO + {implicit_wr={.RDX}, implicit_rd={.RAX}}, + // .ANDN + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + // .BEXTR + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .OF}, flags_undef={.PF, .AF, .SF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .OF}, flags_undef={.PF, .AF, .SF}, reads_mem=true}, + // .BLSI + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + // .BLSMSK + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + // .BLSR + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + // .BZHI + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + {written={0}, read={1, 2}, flags_wr={.CF, .ZF, .SF, .OF}, flags_undef={.PF, .AF}, reads_mem=true}, + // .PDEP + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .PEXT + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .RORX + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .SARX + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .SHLX + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .SHRX + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .MULX + {written={0, 1}, read={2}, implicit_rd={.RDX}, reads_mem=true}, + {written={0, 1}, read={2}, implicit_rd={.RDX}, reads_mem=true}, + // .ADCX + {written={0}, read={0, 1}, flags_wr={.CF}, flags_rd={.CF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.CF}, flags_rd={.CF}, reads_mem=true}, + // .ADOX + {written={0}, read={0, 1}, flags_wr={.OF}, flags_rd={.OF}, reads_mem=true}, + {written={0}, read={0, 1}, flags_wr={.OF}, flags_rd={.OF}, reads_mem=true}, + // .MOVAPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVUPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVAPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVUPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVSS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVDQA + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVDQU + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVQ + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .MOVD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVLPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVHPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVLPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVHPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVLHPS + {written={0}, read={1}}, + // .MOVHLPS + {written={0}, read={1}}, + // .MOVMSKPS + {written={0}, read={1}}, + {written={0}, read={1}}, + // .MOVMSKPD + {written={0}, read={1}}, + {written={0}, read={1}}, + // .MOVNTPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVNTPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVNTDQ + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .MOVNTDQA + {written={0}, read={1}, reads_mem=true}, + // .ADDPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ADDPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ADDSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ADDSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SUBPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SUBPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SUBSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SUBSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MULPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MULPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MULSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MULSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .DIVPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .DIVPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .DIVSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .DIVSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SQRTPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SQRTPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SQRTSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .SQRTSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .RCPPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .RCPSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .RSQRTPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .RSQRTSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MAXPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MAXPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MAXSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MAXSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MINPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MINPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MINSS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MINSD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ANDPS + {written={0}, read={1}, reads_mem=true}, + // .ANDPD + {written={0}, read={1}, reads_mem=true}, + // .ANDNPS + {written={0}, read={1}, reads_mem=true}, + // .ANDNPD + {written={0}, read={1}, reads_mem=true}, + // .ORPS + {written={0}, read={1}, reads_mem=true}, + // .ORPD + {written={0}, read={1}, reads_mem=true}, + // .XORPS + {written={0}, read={1}, reads_mem=true}, + // .XORPD + {written={0}, read={1}, reads_mem=true}, + // .CMPPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CMPPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CMPSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .COMISS + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .COMISD + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .UCOMISS + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .UCOMISD + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .SHUFPS + {written={0}, read={1, 2}, reads_mem=true}, + // .SHUFPD + {written={0}, read={1, 2}, reads_mem=true}, + // .UNPCKLPS + {written={0}, read={1}, reads_mem=true}, + // .UNPCKHPS + {written={0}, read={1}, reads_mem=true}, + // .UNPCKLPD + {written={0}, read={1}, reads_mem=true}, + // .UNPCKHPD + {written={0}, read={1}, reads_mem=true}, + // .CVTPS2PD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTPD2PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTSS2SD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTSD2SS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTPS2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTPD2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTDQ2PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTDQ2PD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTSS2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTSD2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTSI2SS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTSI2SD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTTPS2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTTPD2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTTSS2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .CVTTSD2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .PADDB + {written={0}, read={1}, reads_mem=true}, + // .PADDW + {written={0}, read={1}, reads_mem=true}, + // .PADDD + {written={0}, read={1}, reads_mem=true}, + // .PADDQ + {written={0}, read={1}, reads_mem=true}, + // .PSUBB + {written={0}, read={1}, reads_mem=true}, + // .PSUBW + {written={0}, read={1}, reads_mem=true}, + // .PSUBD + {written={0}, read={1}, reads_mem=true}, + // .PSUBQ + {written={0}, read={1}, reads_mem=true}, + // .PADDSB + {written={0}, read={1}, reads_mem=true}, + // .PADDSW + {written={0}, read={1}, reads_mem=true}, + // .PADDUSB + {written={0}, read={1}, reads_mem=true}, + // .PADDUSW + {written={0}, read={1}, reads_mem=true}, + // .PSUBSB + {written={0}, read={1}, reads_mem=true}, + // .PSUBSW + {written={0}, read={1}, reads_mem=true}, + // .PSUBUSB + {written={0}, read={1}, reads_mem=true}, + // .PSUBUSW + {written={0}, read={1}, reads_mem=true}, + // .PMULLW + {written={0}, read={1}, reads_mem=true}, + // .PMULHW + {written={0}, read={1}, reads_mem=true}, + // .PMULHUW + {written={0}, read={1}, reads_mem=true}, + // .PMULUDQ + {written={0}, read={1}, reads_mem=true}, + // .PMADDWD + {written={0}, read={1}, reads_mem=true}, + // .PAND + {written={0}, read={1}, reads_mem=true}, + // .PANDN + {written={0}, read={1}, reads_mem=true}, + // .POR + {written={0}, read={1}, reads_mem=true}, + // .PXOR + {written={0}, read={1}, reads_mem=true}, + // .PSLLW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSLLD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSLLQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSRLW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSRLD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSRLQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSRAW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PSRAD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .PCMPEQB + {written={0}, read={1}, reads_mem=true}, + // .PCMPEQW + {written={0}, read={1}, reads_mem=true}, + // .PCMPEQD + {written={0}, read={1}, reads_mem=true}, + // .PCMPGTB + {written={0}, read={1}, reads_mem=true}, + // .PCMPGTW + {written={0}, read={1}, reads_mem=true}, + // .PCMPGTD + {written={0}, read={1}, reads_mem=true}, + // .PACKSSWB + {written={0}, read={1}, reads_mem=true}, + // .PACKSSDW + {written={0}, read={1}, reads_mem=true}, + // .PACKUSWB + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKLBW + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKLWD + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKLDQ + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKLQDQ + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKHBW + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKHWD + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKHDQ + {written={0}, read={1}, reads_mem=true}, + // .PUNPCKHQDQ + {written={0}, read={1}, reads_mem=true}, + // .PSHUFD + {written={0}, read={1, 2}, reads_mem=true}, + // .PSHUFHW + {written={0}, read={1, 2}, reads_mem=true}, + // .PSHUFLW + {written={0}, read={1, 2}, reads_mem=true}, + // .PSHUFW + {written={0}, read={1, 2}, reads_mem=true}, + // .PEXTRW + {written={0}, read={1}}, + {written={0}, read={1}}, + // .PINSRW + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + // .PMOVMSKB + {written={0}, read={1}}, + {written={0}, read={1}}, + // .PAVGB + {written={0}, read={1}, reads_mem=true}, + // .PAVGW + {written={0}, read={1}, reads_mem=true}, + // .PMAXUB + {written={0}, read={1}, reads_mem=true}, + // .PMAXSW + {written={0}, read={1}, reads_mem=true}, + // .PMINUB + {written={0}, read={1}, reads_mem=true}, + // .PMINSW + {written={0}, read={1}, reads_mem=true}, + // .PSADBW + {written={0}, read={1}, reads_mem=true}, + // .MASKMOVDQU + {read={0, 1}, implicit_rd={.RDI}, flags_rd={.DF}, writes_mem=true}, + // .LFENCE + {side_effects={.FENCE, .SERIALIZING}}, + // .SFENCE + {side_effects={.FENCE}}, + // .MFENCE + {side_effects={.FENCE}}, + // .PAUSE + {side_effects={.HINT}}, + // .CLFLUSH + {read={0}, reads_mem=true, side_effects={.CACHE}}, + // .ADDSUBPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ADDSUBPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .HADDPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .HADDPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .HSUBPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .HSUBPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .MOVDDUP + {written={0}, read={1}, reads_mem=true}, + // .MOVSLDUP + {written={0}, read={1}, reads_mem=true}, + // .MOVSHDUP + {written={0}, read={1}, reads_mem=true}, + // .LDDQU + {written={0}, read={1}, reads_mem=true}, + // .PSHUFB + {written={0}, read={1}, reads_mem=true}, + // .PHADDW + {written={0}, read={1}, reads_mem=true}, + // .PHADDD + {written={0}, read={1}, reads_mem=true}, + // .PHADDSW + {written={0}, read={1}, reads_mem=true}, + // .PHSUBW + {written={0}, read={1}, reads_mem=true}, + // .PHSUBD + {written={0}, read={1}, reads_mem=true}, + // .PHSUBSW + {written={0}, read={1}, reads_mem=true}, + // .PMADDUBSW + {written={0}, read={1}, reads_mem=true}, + // .PMULHRSW + {written={0}, read={1}, reads_mem=true}, + // .PSIGNB + {written={0}, read={1}, reads_mem=true}, + // .PSIGNW + {written={0}, read={1}, reads_mem=true}, + // .PSIGND + {written={0}, read={1}, reads_mem=true}, + // .PABSB + {written={0}, read={1}, reads_mem=true}, + // .PABSW + {written={0}, read={1}, reads_mem=true}, + // .PABSD + {written={0}, read={1}, reads_mem=true}, + // .PALIGNR + {written={0}, read={1, 2}, reads_mem=true}, + // .BLENDPS + {written={0}, read={1, 2}, reads_mem=true}, + // .BLENDPD + {written={0}, read={1, 2}, reads_mem=true}, + // .BLENDVPS + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + // .BLENDVPD + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + // .PBLENDW + {written={0}, read={1, 2}, reads_mem=true}, + // .PBLENDVB + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + // .DPPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .DPPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .EXTRACTPS + {written={0}, read={1}, writes_mem=true}, + // .INSERTPS + {written={0}, read={1, 2}, reads_mem=true}, + // .MPSADBW + {written={0}, read={1, 2}, reads_mem=true}, + // .PACKUSDW + {written={0}, read={1}, reads_mem=true}, + // .PEXTRB + {written={0}, read={1}, writes_mem=true}, + // .PEXTRD + {written={0}, read={1}, writes_mem=true}, + // .PEXTRQ + {written={0}, read={1}, writes_mem=true}, + // .PHMINPOSUW + {written={0}, read={1}, reads_mem=true}, + // .PINSRB + {written={0}, read={1, 2}, reads_mem=true}, + // .PINSRD + {written={0}, read={1, 2}, reads_mem=true}, + // .PINSRQ + {written={0}, read={1, 2}, reads_mem=true}, + // .PMAXSB + {written={0}, read={1}, reads_mem=true}, + // .PMAXSD + {written={0}, read={1}, reads_mem=true}, + // .PMAXUW + {written={0}, read={1}, reads_mem=true}, + // .PMAXUD + {written={0}, read={1}, reads_mem=true}, + // .PMINSB + {written={0}, read={1}, reads_mem=true}, + // .PMINSD + {written={0}, read={1}, reads_mem=true}, + // .PMINUW + {written={0}, read={1}, reads_mem=true}, + // .PMINUD + {written={0}, read={1}, reads_mem=true}, + // .PMOVSXBW + {written={0}, read={1}, reads_mem=true}, + // .PMOVSXBD + {written={0}, read={1}, reads_mem=true}, + // .PMOVSXBQ + {written={0}, read={1}, reads_mem=true}, + // .PMOVSXWD + {written={0}, read={1}, reads_mem=true}, + // .PMOVSXWQ + {written={0}, read={1}, reads_mem=true}, + // .PMOVSXDQ + {written={0}, read={1}, reads_mem=true}, + // .PMOVZXBW + {written={0}, read={1}, reads_mem=true}, + // .PMOVZXBD + {written={0}, read={1}, reads_mem=true}, + // .PMOVZXBQ + {written={0}, read={1}, reads_mem=true}, + // .PMOVZXWD + {written={0}, read={1}, reads_mem=true}, + // .PMOVZXWQ + {written={0}, read={1}, reads_mem=true}, + // .PMOVZXDQ + {written={0}, read={1}, reads_mem=true}, + // .PMULDQ + {written={0}, read={1}, reads_mem=true}, + // .PMULLD + {written={0}, read={1}, reads_mem=true}, + // .PTEST + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .ROUNDPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ROUNDPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ROUNDSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .ROUNDSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .PCMPEQQ + {written={0}, read={1}, reads_mem=true}, + // .CRC32 + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + {written={0}, read={0, 1}, reads_mem=true}, + // .PCMPESTRI + {implicit_wr={.RCX}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .PCMPESTRM + {implicit_wr={.XMM0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .PCMPISTRI + {implicit_wr={.RCX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .PCMPISTRM + {implicit_wr={.XMM0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .PCMPGTQ + {written={0}, read={1}, reads_mem=true}, + // .PCLMULQDQ + {written={0}, read={1, 2}, reads_mem=true}, + // .AESDEC + {written={0}, read={1}, reads_mem=true}, + // .AESDECLAST + {written={0}, read={1}, reads_mem=true}, + // .AESENC + {written={0}, read={1}, reads_mem=true}, + // .AESENCLAST + {written={0}, read={1}, reads_mem=true}, + // .AESIMC + {written={0}, read={1}, reads_mem=true}, + // .AESKEYGENASSIST + {written={0}, read={1, 2}, reads_mem=true}, + // .SHA1MSG1 + {written={0}, read={1}, reads_mem=true}, + // .SHA1MSG2 + {written={0}, read={1}, reads_mem=true}, + // .SHA1NEXTE + {written={0}, read={1}, reads_mem=true}, + // .SHA1RNDS4 + {written={0}, read={1, 2}, reads_mem=true}, + // .SHA256MSG1 + {written={0}, read={1}, reads_mem=true}, + // .SHA256MSG2 + {written={0}, read={1}, reads_mem=true}, + // .SHA256RNDS2 + {written={0}, read={1}, implicit_rd={.XMM0}, reads_mem=true}, + // .VADDPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VADDPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VADDSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VADDSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSUBPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSUBPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSUBSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSUBSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMULPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMULPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMULSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMULSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VDIVPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VDIVPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VDIVSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VDIVSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSQRTPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSQRTPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSQRTSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSQRTSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRCPPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRCPSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRSQRTPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRSQRTSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMAXPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMAXPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMAXSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMAXSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMINPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMINPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMINSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VMINSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VANDPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VANDPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VANDNPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VANDNPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VORPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VORPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VXORPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VXORPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VCMPPS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCMPPD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCMPSS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCMPSD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCOMISS + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .VCOMISD + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .VUCOMISS + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .VUCOMISD + {read={0, 1}, implicit_wr={.MXCSR}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}, reads_mem=true}, + // .VSHUFPS + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VSHUFPD + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VUNPCKLPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VUNPCKHPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VUNPCKLPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VUNPCKHPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VBLENDPS + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VBLENDPD + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VBLENDVPS + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VBLENDVPD + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VDPPS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VDPPD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VROUNDPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VROUNDPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VROUNDSS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VROUNDSD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VEXTRACTPS + {written={0}, read={1}, writes_mem=true}, + // .VINSERTPS + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VMOVAPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVUPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVAPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVUPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVSS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VMOVSD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VMOVDQA + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVDQU + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVQ + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VMOVD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVLPS + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVHPS + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVLPD + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVHPD + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVLHPS + {written={0}, read={1, 2}}, + // .VMOVHLPS + {written={0}, read={1, 2}}, + // .VMOVMSKPS + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VMOVMSKPD + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VMOVNTPS + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVNTPD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVNTDQ + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .VMOVNTDQA + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VADDSUBPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VADDSUBPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VHADDPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VHADDPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VHSUBPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VHSUBPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VLDDQU + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVDDUP + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVSLDUP + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVSHDUP + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPCMPESTRI + {implicit_wr={.RCX}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .VPCMPESTRM + {implicit_wr={.XMM0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .VPCMPISTRI + {implicit_wr={.RCX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .VPCMPISTRM + {implicit_wr={.XMM0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .VPBROADCASTB + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPBROADCASTW + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPBROADCASTD + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPBROADCASTQ + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VCVTPS2PD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTPD2PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTSS2SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTSD2SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTPS2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTPD2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTDQ2PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTDQ2PD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTSS2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTSD2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTSI2SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTSI2SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTTPS2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTTPD2DQ + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTTSS2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTTSD2SI + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VPADDB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPADDW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPADDD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPADDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSUBB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSUBW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSUBD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSUBQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMULLW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMULHW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMULHUW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMULUDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMADDWD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPAND + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPANDN + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPOR + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPXOR + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSLLW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSLLD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSLLQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSRLW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSRLD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSRLQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSRAW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPSRAD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}}, + // .VPCMPEQB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPEQW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPEQD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPEQQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPGTB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPGTW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPGTD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPGTQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPACKSSWB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPACKSSDW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPACKUSWB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPACKUSDW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKLBW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKLWD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKLDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKLQDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKHBW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKHWD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKHDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPUNPCKHQDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSHUFD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSHUFHW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSHUFLW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPEXTRB + {written={0}, read={1}, writes_mem=true}, + // .VPEXTRW + {written={0}, read={1}}, + {written={0}, read={1}, writes_mem=true}, + // .VPEXTRD + {written={0}, read={1}, writes_mem=true}, + // .VPEXTRQ + {written={0}, read={1}, writes_mem=true}, + // .VPINSRB + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPINSRW + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPINSRD + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPINSRQ + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPMOVMSKB + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPTEST + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .VPSHUFB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPHADDW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPHADDD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPHADDSW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPHSUBW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPHSUBD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPHSUBSW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMADDUBSW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMULHRSW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSIGNB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSIGNW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSIGND + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPABSB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPABSW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPABSD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPALIGNR + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPBLENDW + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPBLENDVB + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VMPSADBW + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPHMINPOSUW + {written={0}, read={1}, reads_mem=true}, + // .VPMAXSB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMAXSD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMAXUW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMAXUD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMINSB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMINSD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMINUW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMINUD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMOVSXBW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSXBD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSXBQ + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSXWD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSXWQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSXDQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVZXBW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVZXBD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVZXBQ + {written={0}, read={1}}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVZXWD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVZXWQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVZXDQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMULDQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMULLD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VMASKMOVDQU + {read={0, 1}, implicit_rd={.RDI}, flags_rd={.DF}, writes_mem=true}, + // .VPCLMULQDQ + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VAESDEC + {written={0}, read={1, 2}, reads_mem=true}, + // .VAESDECLAST + {written={0}, read={1, 2}, reads_mem=true}, + // .VAESENC + {written={0}, read={1, 2}, reads_mem=true}, + // .VAESENCLAST + {written={0}, read={1, 2}, reads_mem=true}, + // .VAESIMC + {written={0}, read={1}, reads_mem=true}, + // .VAESKEYGENASSIST + {written={0}, read={1, 2}, reads_mem=true}, + // .VBROADCASTSS + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VBROADCASTSD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}}, + // .VBROADCASTF128 + {written={0}, read={1}, reads_mem=true}, + // .VEXTRACTF128 + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + // .VINSERTF128 + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPERM2F128 + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VMASKMOVPS + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + // .VMASKMOVPD + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + // .VTESTPS + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .VTESTPD + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + {read={0, 1}, flags_wr={.CF, .ZF}, flags_undef={.PF, .AF, .SF, .OF}, reads_mem=true}, + // .VZEROALL + {implicit_wr={.VECTOR}}, + // .VZEROUPPER + {implicit_wr={.VECTOR}}, + // .VBROADCASTI128 + {written={0}, read={1}, reads_mem=true}, + // .VEXTRACTI128 + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + // .VINSERTI128 + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPERM2I128 + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPERMD + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMPS + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMQ + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMPD + {written={0}, read={1, 2}, reads_mem=true}, + // .VPBLENDD + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPSLLVD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSLLVQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSRLVD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSRLVQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSRAVD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMASKMOVD + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + // .VPMASKMOVQ + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, writes_mem=true, reads_mem=true}, + // .VGATHERDPS + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VGATHERDPD + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VGATHERQPS + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VGATHERQPD + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VPGATHERDD + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VPGATHERDQ + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VPGATHERQD + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VPGATHERQQ + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + {written={0, 2}, read={0, 1, 2}, reads_mem=true}, + // .VFMADD132PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD213PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD231PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD132PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD213PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD231PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD132SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD213SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD231SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD132SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD213SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADD231SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB132PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB213PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB231PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB132PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB213PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB231PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB132SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB213SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB231SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB132SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB213SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUB231SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD132PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD213PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD231PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD132PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD213PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD231PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD132SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD213SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD231SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD132SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD213SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMADD231SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB132PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB213PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB231PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB132PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB213PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB231PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB132SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB213SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB231SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB132SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB213SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFNMSUB231SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADDSUB132PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADDSUB213PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADDSUB231PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADDSUB132PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADDSUB213PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMADDSUB231PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUBADD132PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUBADD213PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUBADD231PS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUBADD132PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUBADD213PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFMSUBADD231PD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTPH2PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VCVTPS2PH + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, writes_mem=true, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, writes_mem=true, reads_mem=true}, + // .VMOVDQA32 + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVDQA64 + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVDQU8 + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVDQU16 + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVDQU32 + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VMOVDQU64 + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPBLENDMB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPBLENDMW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPBLENDMD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPBLENDMQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VBLENDMPS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VBLENDMPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPUB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPUW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPUD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCMPUQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTMB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTMW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTMD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTMQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTNMB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTNMW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTNMD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPTESTNMQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPCOMPRESSD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPCOMPRESSQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VCOMPRESSPS + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VCOMPRESSPD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPEXPANDD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPEXPANDQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VEXPANDPS + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VEXPANDPD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPCONFLICTD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPCONFLICTQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPLZCNTD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPLZCNTQ + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPERMI2B + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMI2W + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMI2D + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMI2Q + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMI2PS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMI2PD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMT2B + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMT2W + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMT2D + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMT2Q + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMT2PS + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMT2PD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPERMW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPMOVB2M + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVW2M + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVD2M + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVQ2M + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVM2B + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVM2W + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVM2D + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVM2Q + {written={0}, read={1}}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .VPMOVQB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSQB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVUSQB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVQW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSQW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVUSQW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVQD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSQD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVUSQD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVDB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSDB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVUSDB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVDW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSDW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVUSDW + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVWB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVSWB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPMOVUSWB + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VPROLD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPROLQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPROLVD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPROLVQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPRORD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPRORQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPRORVD + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPRORVQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSCATTERDD + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VPSCATTERDQ + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VPSCATTERQD + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VPSCATTERQQ + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VSCATTERDPS + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VSCATTERDPD + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VSCATTERQPS + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VSCATTERQPD + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .VPSRAVQ + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSRAVW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSLLVW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VPSRLVW + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .VRANGEPS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRANGEPD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRANGESS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRANGESD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VREDUCEPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VREDUCEPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VREDUCESS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VREDUCESD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRNDSCALEPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRNDSCALEPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRNDSCALESS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRNDSCALESD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRSQRT14PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRSQRT14PD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRSQRT14SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRSQRT14SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRCP14PS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRCP14PD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRCP14SS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VRCP14SD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSCALEFPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSCALEFPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSCALEFSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VSCALEFSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETEXPPS + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETEXPPD + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETEXPSS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETEXPSD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETMANTPS + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETMANTPD + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETMANTSS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VGETMANTSD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFIXUPIMMPS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFIXUPIMMPD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFIXUPIMMSS + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFIXUPIMMSD + {written={0}, read={1, 2, 3}, implicit_wr={.MXCSR}, reads_mem=true}, + // .VFPCLASSPS + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VFPCLASSPD + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + {written={0}, read={1}, reads_mem=true}, + // .VFPCLASSSS + {written={0}, read={1}, reads_mem=true}, + // .VFPCLASSSD + {written={0}, read={1}, reads_mem=true}, + // .VALIGNQ + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VALIGND + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VDBPSADBW + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPTERNLOGD + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPTERNLOGQ + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + {written={0}, read={1, 2, 3}, reads_mem=true}, + // .VPMULTISHIFTQB + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + {written={0}, read={1, 2}, reads_mem=true}, + // .KADDW + {written={0}, read={1, 2}}, + // .KADDB + {written={0}, read={1, 2}}, + // .KADDQ + {written={0}, read={1, 2}}, + // .KADDD + {written={0}, read={1, 2}}, + // .KANDW + {written={0}, read={1, 2}}, + // .KANDB + {written={0}, read={1, 2}}, + // .KANDQ + {written={0}, read={1, 2}}, + // .KANDD + {written={0}, read={1, 2}}, + // .KANDNW + {written={0}, read={1, 2}}, + // .KANDNB + {written={0}, read={1, 2}}, + // .KANDNQ + {written={0}, read={1, 2}}, + // .KANDND + {written={0}, read={1, 2}}, + // .KMOVW + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .KMOVB + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .KMOVQ + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .KMOVD + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}}, + {written={0}, read={1}}, + // .KNOTW + {written={0}, read={1}}, + // .KNOTB + {written={0}, read={1}}, + // .KNOTQ + {written={0}, read={1}}, + // .KNOTD + {written={0}, read={1}}, + // .KORW + {written={0}, read={1, 2}}, + // .KORB + {written={0}, read={1, 2}}, + // .KORQ + {written={0}, read={1, 2}}, + // .KORD + {written={0}, read={1, 2}}, + // .KORTESTW + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KORTESTB + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KORTESTQ + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KORTESTD + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KSHIFTLW + {written={0}, read={1, 2}}, + // .KSHIFTLB + {written={0}, read={1, 2}}, + // .KSHIFTLQ + {written={0}, read={1, 2}}, + // .KSHIFTLD + {written={0}, read={1, 2}}, + // .KSHIFTRW + {written={0}, read={1, 2}}, + // .KSHIFTRB + {written={0}, read={1, 2}}, + // .KSHIFTRQ + {written={0}, read={1, 2}}, + // .KSHIFTRD + {written={0}, read={1, 2}}, + // .KTESTW + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KTESTB + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KTESTQ + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KTESTD + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .KUNPCKBW + {written={0}, read={1, 2}}, + // .KUNPCKWD + {written={0}, read={1, 2}}, + // .KUNPCKDQ + {written={0}, read={1, 2}}, + // .KXNORW + {written={0}, read={1, 2}}, + // .KXNORB + {written={0}, read={1, 2}}, + // .KXNORQ + {written={0}, read={1, 2}}, + // .KXNORD + {written={0}, read={1, 2}}, + // .KXORW + {written={0}, read={1, 2}}, + // .KXORB + {written={0}, read={1, 2}}, + // .KXORQ + {written={0}, read={1, 2}}, + // .KXORD + {written={0}, read={1, 2}}, + // .FADD + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FADDP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FIADD + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FSUB + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FSUBP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FISUB + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FSUBR + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FSUBRP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FISUBR + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FMUL + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FMULP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FIMUL + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FDIV + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FDIVP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FIDIV + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FDIVR + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FDIVRP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FIDIVR + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FSQRT + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FABS + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FCHS + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FPREM + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FPREM1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FRNDINT + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FSCALE + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FXTRACT + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FXAM + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FLD + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FILD + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .FBLD + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .FST + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FSTP + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FIST + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FISTP + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FISTTP + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FBSTP + {implicit_wr={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FXCH + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FCMOVB + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF}}, + // .FCMOVE + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.ZF}}, + // .FCMOVBE + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF, .ZF}}, + // .FCMOVU + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.PF}}, + // .FCMOVNB + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF}}, + // .FCMOVNE + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.ZF}}, + // .FCMOVNBE + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.CF, .ZF}}, + // .FCMOVNU + {implicit_wr={.FPU_ST}, implicit_rd={.FPU_ST}, flags_rd={.PF}}, + // .FCOM + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FCOMP + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FCOMPP + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FICOM + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FICOMP + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}, reads_mem=true}, + // .FCOMI + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + // .FCOMIP + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + // .FUCOMI + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + // .FUCOMIP + {implicit_rd={.FPU_ST}, flags_wr={.CF, .PF, .ZF}, flags_undef={.AF, .SF, .OF}}, + // .FUCOM + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FUCOMP + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FUCOMPP + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FTST + {implicit_wr={.FPU_SW}, implicit_rd={.FPU_ST}}, + // .FLDZ + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FLD1 + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FLDPI + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FLDL2T + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FLDL2E + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FLDLG2 + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FLDLN2 + {implicit_wr={.FPU_ST, .FPU_SW}}, + // .FSIN + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FCOS + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FSINCOS + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FPTAN + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FPATAN + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .F2XM1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FYL2X + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FYL2XP1 + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FINIT + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FNINIT + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FINCSTP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FDECSTP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FFREE + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FFREEP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FNOP + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FWAIT + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FCLEX + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FNCLEX + {implicit_wr={.FPU_ST, .FPU_SW}, implicit_rd={.FPU_ST}}, + // .FSTCW + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FNSTCW + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FLDCW + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .FSTENV + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FNSTENV + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FLDENV + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .FSAVE + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FNSAVE + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FRSTOR + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .FSTSW + {implicit_wr={.RAX, .FPU_SW}, writes_mem=true}, + {implicit_wr={.RAX, .FPU_SW}}, + // .FNSTSW + {implicit_wr={.RAX, .FPU_SW}, writes_mem=true}, + {implicit_wr={.RAX, .FPU_SW}}, + // .FXSAVE + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FXSAVE64 + {implicit_rd={.FPU_ST, .FPU_SW}, writes_mem=true}, + // .FXRSTOR + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .FXRSTOR64 + {implicit_wr={.FPU_ST, .FPU_SW}, reads_mem=true}, + // .LGDT + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .SGDT + {written={0}, writes_mem=true}, + {written={0}, writes_mem=true}, + // .LIDT + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .SIDT + {written={0}, writes_mem=true}, + {written={0}, writes_mem=true}, + // .LLDT + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .SLDT + {written={0}, writes_mem=true}, + {written={0}}, + {written={0}}, + // .LTR + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .STR + {written={0}, writes_mem=true}, + {written={0}}, + {written={0}}, + // .LMSW + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .SMSW + {written={0}, writes_mem=true}, + {written={0}}, + {written={0}}, + // .CLTS + {side_effects={.PRIVILEGED}}, + // .ARPL + {written={0}, read={1}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + // .LAR + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + // .LSL + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + {written={0}, read={1}, flags_wr={.ZF}, reads_mem=true}, + // .VERR + {read={0}, flags_wr={.ZF}, reads_mem=true}, + // .VERW + {read={0}, flags_wr={.ZF}, reads_mem=true}, + // .INVD + {side_effects={.SERIALIZING, .PRIVILEGED}}, + // .WBINVD + {side_effects={.SERIALIZING, .PRIVILEGED}}, + // .INVLPG + {read={0}, reads_mem=true, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .INVPCID + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .RSM + {side_effects={.SERIALIZING, .PRIVILEGED}}, + // .RDMSR + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}, side_effects={.PRIVILEGED}}, + // .WRMSR + {implicit_rd={.RAX, .RCX, .RDX}, side_effects={.SERIALIZING, .PRIVILEGED}}, + // .VMCALL + {side_effects={.PRIVILEGED}}, + // .VMLAUNCH + {flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMRESUME + {flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMXOFF + {side_effects={.PRIVILEGED}}, + // .VMXON + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMCLEAR + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMPTRLD + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMPTRST + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMREAD + {written={0}, read={1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMWRITE + {read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMFUNC + {side_effects={.PRIVILEGED}}, + // .INVEPT + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .INVVPID + {read={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .ENCLS + {side_effects={.PRIVILEGED}}, + // .ENCLU + {side_effects={.PRIVILEGED}}, + // .ENCLV + {side_effects={.PRIVILEGED}}, + // .RDPKRU + {implicit_wr={.RAX}, implicit_rd={.RCX}}, + // .WRPKRU + {implicit_rd={.RAX, .RCX, .RDX}}, + // .INCSSPD + {read={0}, side_effects={.CET}}, + // .INCSSPQ + {read={0}, side_effects={.CET}}, + // .RDSSPD + {written={0}, side_effects={.CET}}, + // .RDSSPQ + {written={0}, side_effects={.CET}}, + // .SAVEPREVSSP + {side_effects={.CET}}, + // .RSTORSSP + {read={0}, writes_mem=true, reads_mem=true, side_effects={.CET}}, + // .WRSSD + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + // .WRSSQ + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + // .WRUSSD + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + // .WRUSSQ + {read={0, 1}, writes_mem=true, side_effects={.CET}}, + // .SETSSBSY + {side_effects={.CET}}, + // .CLRSSBSY + {read={0}, writes_mem=true, reads_mem=true, side_effects={.CET}}, + // .ENDBR64 + {side_effects={.HINT, .CET}}, + // .ENDBR32 + {side_effects={.HINT, .CET}}, + // .XSAVE + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + // .XSAVE64 + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + // .XRSTOR + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true}, + // .XRSTOR64 + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true}, + // .XSAVEOPT + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + // .XSAVEOPT64 + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + // .XSAVEC + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + // .XSAVEC64 + {implicit_rd={.RAX, .RDX}, writes_mem=true}, + // .XSAVES + {implicit_rd={.RAX, .RDX}, writes_mem=true, side_effects={.PRIVILEGED}}, + // .XSAVES64 + {implicit_rd={.RAX, .RDX}, writes_mem=true, side_effects={.PRIVILEGED}}, + // .XRSTORS + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .XRSTORS64 + {implicit_wr={.MXCSR, .FPU_ST, .FPU_SW}, implicit_rd={.RAX, .RDX}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .PREFETCHT0 + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .PREFETCHT1 + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .PREFETCHT2 + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .PREFETCHNTA + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .PREFETCHW + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .CLFLUSHOPT + {read={0}, reads_mem=true, side_effects={.CACHE}}, + // .CLWB + {read={0}, reads_mem=true, side_effects={.CACHE}}, + // .CLDEMOTE + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .BSWAP + {written={0}, read={0}}, + {written={0}, read={0}}, + // .CMPXCHG + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0}, read={0, 1}, implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .CMPXCHG8B + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RBX, .RCX, .RDX}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + // .CMPXCHG16B + {read={0}, implicit_wr={.RAX, .RDX}, implicit_rd={.RAX, .RBX, .RCX, .RDX}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + // .XADD + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + {written={0, 1}, read={0, 1}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true}, + // .BOUND + {read={0, 1}, reads_mem=true, side_effects={.TRAP}}, + {read={0, 1}, reads_mem=true, side_effects={.TRAP}}, + // .ENTER + {implicit_wr={.RSP, .RBP}, implicit_rd={.RSP, .RBP}, writes_mem=true}, + // .LEAVE + {implicit_wr={.RSP, .RBP}, implicit_rd={.RBP}, reads_mem=true}, + // .XLAT + {implicit_wr={.RAX}, implicit_rd={.RAX, .RBX}, reads_mem=true}, + // .XLATB + {implicit_wr={.RAX}, implicit_rd={.RAX, .RBX}, reads_mem=true}, + // .MOVBE + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + {written={0}, read={1}, writes_mem=true, reads_mem=true}, + // .RDRAND + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .RDSEED + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + {written={0}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}}, + // .SWAPGS + {side_effects={.PRIVILEGED}}, + // .MONITOR + {implicit_rd={.RAX, .RCX, .RDX}, reads_mem=true}, + // .MWAIT + {implicit_rd={.RAX, .RCX}, side_effects={.HALT}}, + // .CLAC + {side_effects={.PRIVILEGED}}, + // .STAC + {side_effects={.PRIVILEGED}}, + // .RDFSBASE + {written={0}}, + {written={0}}, + // .RDGSBASE + {written={0}}, + {written={0}}, + // .WRFSBASE + {read={0}}, + {read={0}}, + // .WRGSBASE + {read={0}}, + {read={0}}, + // .PTWRITE + {read={0}, reads_mem=true}, + {read={0}, reads_mem=true}, + // .RDPID + {written={0}}, + // .WBNOINVD + {side_effects={.SERIALIZING, .PRIVILEGED}}, + // .SERIALIZE + {side_effects={.SERIALIZING}}, + // .PREFETCH + {read={0}, reads_mem=true, side_effects={.HINT}}, + // .TPAUSE + {read={0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF}, side_effects={.HINT}}, + // .UMONITOR + {read={0}, reads_mem=true}, + // .UMWAIT + {read={0}, implicit_rd={.RAX, .RDX}, flags_wr={.CF}, side_effects={.HINT}}, + // .MOVDIRI + {read={0, 1}, writes_mem=true}, + {read={0, 1}, writes_mem=true}, + // .MOVDIR64B + {read={0}, implicit_rd={.RAX}, writes_mem=true, reads_mem=true}, + // .ENQCMD + {read={0}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + // .ENQCMDS + {read={0}, flags_wr={.ZF}, writes_mem=true, reads_mem=true}, + // .AADD + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + // .AAND + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + // .AOR + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + // .AXOR + {read={0, 1}, writes_mem=true, reads_mem=true}, + {read={0, 1}, writes_mem=true, reads_mem=true}, + // .XEND + {side_effects={.CONTROL}}, + // .XTEST + {flags_wr={.ZF}}, + // .VMRUN + {implicit_rd={.RAX}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMMCALL + {side_effects={.PRIVILEGED}}, + // .VMLOAD + {implicit_rd={.RAX}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .VMSAVE + {implicit_rd={.RAX}, writes_mem=true, side_effects={.PRIVILEGED}}, + // .STGI + {side_effects={.PRIVILEGED}}, + // .CLGI + {side_effects={.PRIVILEGED}}, + // .SKINIT + {implicit_rd={.RAX}, side_effects={.PRIVILEGED}}, + // .INVLPGA + {implicit_rd={.RAX, .RCX}, side_effects={.PRIVILEGED}}, + // .INVLPGB + {implicit_rd={.RAX, .RCX, .RDX}, side_effects={.PRIVILEGED}}, + // .TLBSYNC + {side_effects={.PRIVILEGED}}, + // .PVALIDATE + {implicit_wr={.RAX}, implicit_rd={.RAX, .RCX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true}, + // .RMPADJUST + {implicit_wr={.RAX}, implicit_rd={.RAX, .RCX, .RDX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, reads_mem=true, side_effects={.PRIVILEGED}}, + // .RMPUPDATE + {implicit_wr={.RAX}, implicit_rd={.RAX, .RCX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, reads_mem=true, side_effects={.PRIVILEGED}}, + // .PSMASH + {implicit_wr={.RAX}, implicit_rd={.RAX}, flags_wr={.CF, .PF, .AF, .ZF, .SF, .OF}, writes_mem=true, side_effects={.PRIVILEGED}}, + // .CLZERO + {implicit_rd={.RAX}, writes_mem=true, side_effects={.CACHE}}, + // .MONITORX + {implicit_rd={.RAX, .RCX, .RDX}, reads_mem=true}, + // .MWAITX + {implicit_rd={.RAX, .RBX, .RCX}, side_effects={.HALT}}, + // .RDPRU + {implicit_wr={.RAX, .RDX}, implicit_rd={.RCX}}, + // .MCOMMIT + {flags_wr={.CF}, side_effects={.FENCE}}, } @(rodata) @@ -3700,143 +7550,141 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{ .MOVS = { 630, 1}, .MOVSB = { 631, 1}, .MOVSW = { 632, 1}, - .MOVSD = { 633, 1}, - .MOVSQ = { 634, 1}, - .CMPS = { 635, 1}, - .CMPSB = { 636, 1}, - .CMPSW = { 637, 1}, - .CMPSD = { 638, 1}, - .CMPSQ = { 639, 1}, - .SCAS = { 640, 1}, - .SCASB = { 641, 1}, - .SCASW = { 642, 1}, - .SCASD = { 643, 1}, - .SCASQ = { 644, 1}, - .LODS = { 645, 1}, - .LODSB = { 646, 1}, - .LODSW = { 647, 1}, - .LODSD = { 648, 1}, - .LODSQ = { 649, 1}, - .STOS = { 650, 1}, - .STOSB = { 651, 1}, - .STOSW = { 652, 1}, - .STOSD = { 653, 1}, - .STOSQ = { 654, 1}, - .CLC = { 655, 1}, - .STC = { 656, 1}, - .CMC = { 657, 1}, - .CLD = { 658, 1}, - .STD = { 659, 1}, - .CLI = { 660, 1}, - .STI = { 661, 1}, - .LAHF = { 662, 1}, - .SAHF = { 663, 1}, - .PUSHF = { 664, 1}, - .PUSHFD = { 665, 1}, - .PUSHFQ = { 666, 1}, - .POPF = { 667, 1}, - .POPFD = { 668, 1}, - .POPFQ = { 669, 1}, - .NOP = { 670, 4}, - .HLT = { 674, 1}, - .WAIT = { 675, 1}, - .LOCK = { 676, 1}, - .UD0 = { 677, 1}, - .UD1 = { 678, 1}, - .UD2 = { 679, 1}, - .CPUID = { 680, 1}, - .RDTSC = { 681, 1}, - .RDTSCP = { 682, 1}, - .RDPMC = { 683, 1}, - .XGETBV = { 684, 1}, - .XSETBV = { 685, 1}, - .CBW = { 686, 1}, - .CWDE = { 687, 1}, - .CDQE = { 688, 1}, - .CWD = { 689, 1}, - .CDQ = { 690, 1}, - .CQO = { 691, 1}, - .ANDN = { 692, 2}, - .BEXTR = { 694, 2}, - .BLSI = { 696, 2}, - .BLSMSK = { 698, 2}, - .BLSR = { 700, 2}, - .BZHI = { 702, 2}, - .PDEP = { 704, 2}, - .PEXT = { 706, 2}, - .RORX = { 708, 2}, - .SARX = { 710, 2}, - .SHLX = { 712, 2}, - .SHRX = { 714, 2}, - .MULX = { 716, 2}, - .ADCX = { 718, 2}, - .ADOX = { 720, 2}, - .MOVAPS = { 722, 2}, - .MOVUPS = { 724, 2}, - .MOVAPD = { 726, 2}, - .MOVUPD = { 728, 2}, - .MOVSS = { 730, 2}, - .MOVSD_SSE = { 732, 2}, - .MOVDQA = { 734, 2}, - .MOVDQU = { 736, 2}, - .MOVQ = { 738, 6}, - .MOVD = { 744, 4}, - .MOVLPS = { 748, 2}, - .MOVHPS = { 750, 2}, - .MOVLPD = { 752, 2}, - .MOVHPD = { 754, 2}, - .MOVLHPS = { 756, 1}, - .MOVHLPS = { 757, 1}, - .MOVMSKPS = { 758, 2}, - .MOVMSKPD = { 760, 2}, - .MOVNTPS = { 762, 1}, - .MOVNTPD = { 763, 1}, - .MOVNTDQ = { 764, 1}, - .MOVNTDQA = { 765, 1}, - .ADDPS = { 766, 1}, - .ADDPD = { 767, 1}, - .ADDSS = { 768, 1}, - .ADDSD = { 769, 1}, - .SUBPS = { 770, 1}, - .SUBPD = { 771, 1}, - .SUBSS = { 772, 1}, - .SUBSD = { 773, 1}, - .MULPS = { 774, 1}, - .MULPD = { 775, 1}, - .MULSS = { 776, 1}, - .MULSD = { 777, 1}, - .DIVPS = { 778, 1}, - .DIVPD = { 779, 1}, - .DIVSS = { 780, 1}, - .DIVSD = { 781, 1}, - .SQRTPS = { 782, 1}, - .SQRTPD = { 783, 1}, - .SQRTSS = { 784, 1}, - .SQRTSD = { 785, 1}, - .RCPPS = { 786, 1}, - .RCPSS = { 787, 1}, - .RSQRTPS = { 788, 1}, - .RSQRTSS = { 789, 1}, - .MAXPS = { 790, 1}, - .MAXPD = { 791, 1}, - .MAXSS = { 792, 1}, - .MAXSD = { 793, 1}, - .MINPS = { 794, 1}, - .MINPD = { 795, 1}, - .MINSS = { 796, 1}, - .MINSD = { 797, 1}, - .ANDPS = { 798, 1}, - .ANDPD = { 799, 1}, - .ANDNPS = { 800, 1}, - .ANDNPD = { 801, 1}, - .ORPS = { 802, 1}, - .ORPD = { 803, 1}, - .XORPS = { 804, 1}, - .XORPD = { 805, 1}, - .CMPPS = { 806, 1}, - .CMPPD = { 807, 1}, - .CMPSS = { 808, 1}, - .CMPSD_SSE = { 809, 1}, + .MOVSD = { 633, 3}, + .MOVSQ = { 636, 1}, + .CMPS = { 637, 1}, + .CMPSB = { 638, 1}, + .CMPSW = { 639, 1}, + .CMPSD = { 640, 2}, + .CMPSQ = { 642, 1}, + .SCAS = { 643, 1}, + .SCASB = { 644, 1}, + .SCASW = { 645, 1}, + .SCASD = { 646, 1}, + .SCASQ = { 647, 1}, + .LODS = { 648, 1}, + .LODSB = { 649, 1}, + .LODSW = { 650, 1}, + .LODSD = { 651, 1}, + .LODSQ = { 652, 1}, + .STOS = { 653, 1}, + .STOSB = { 654, 1}, + .STOSW = { 655, 1}, + .STOSD = { 656, 1}, + .STOSQ = { 657, 1}, + .CLC = { 658, 1}, + .STC = { 659, 1}, + .CMC = { 660, 1}, + .CLD = { 661, 1}, + .STD = { 662, 1}, + .CLI = { 663, 1}, + .STI = { 664, 1}, + .LAHF = { 665, 1}, + .SAHF = { 666, 1}, + .PUSHF = { 667, 1}, + .PUSHFD = { 668, 1}, + .PUSHFQ = { 669, 1}, + .POPF = { 670, 1}, + .POPFD = { 671, 1}, + .POPFQ = { 672, 1}, + .NOP = { 673, 4}, + .HLT = { 677, 1}, + .WAIT = { 678, 1}, + .LOCK = { 679, 1}, + .UD0 = { 680, 1}, + .UD1 = { 681, 1}, + .UD2 = { 682, 1}, + .CPUID = { 683, 1}, + .RDTSC = { 684, 1}, + .RDTSCP = { 685, 1}, + .RDPMC = { 686, 1}, + .XGETBV = { 687, 1}, + .XSETBV = { 688, 1}, + .CBW = { 689, 1}, + .CWDE = { 690, 1}, + .CDQE = { 691, 1}, + .CWD = { 692, 1}, + .CDQ = { 693, 1}, + .CQO = { 694, 1}, + .ANDN = { 695, 2}, + .BEXTR = { 697, 2}, + .BLSI = { 699, 2}, + .BLSMSK = { 701, 2}, + .BLSR = { 703, 2}, + .BZHI = { 705, 2}, + .PDEP = { 707, 2}, + .PEXT = { 709, 2}, + .RORX = { 711, 2}, + .SARX = { 713, 2}, + .SHLX = { 715, 2}, + .SHRX = { 717, 2}, + .MULX = { 719, 2}, + .ADCX = { 721, 2}, + .ADOX = { 723, 2}, + .MOVAPS = { 725, 2}, + .MOVUPS = { 727, 2}, + .MOVAPD = { 729, 2}, + .MOVUPD = { 731, 2}, + .MOVSS = { 733, 2}, + .MOVDQA = { 735, 2}, + .MOVDQU = { 737, 2}, + .MOVQ = { 739, 6}, + .MOVD = { 745, 4}, + .MOVLPS = { 749, 2}, + .MOVHPS = { 751, 2}, + .MOVLPD = { 753, 2}, + .MOVHPD = { 755, 2}, + .MOVLHPS = { 757, 1}, + .MOVHLPS = { 758, 1}, + .MOVMSKPS = { 759, 2}, + .MOVMSKPD = { 761, 2}, + .MOVNTPS = { 763, 1}, + .MOVNTPD = { 764, 1}, + .MOVNTDQ = { 765, 1}, + .MOVNTDQA = { 766, 1}, + .ADDPS = { 767, 1}, + .ADDPD = { 768, 1}, + .ADDSS = { 769, 1}, + .ADDSD = { 770, 1}, + .SUBPS = { 771, 1}, + .SUBPD = { 772, 1}, + .SUBSS = { 773, 1}, + .SUBSD = { 774, 1}, + .MULPS = { 775, 1}, + .MULPD = { 776, 1}, + .MULSS = { 777, 1}, + .MULSD = { 778, 1}, + .DIVPS = { 779, 1}, + .DIVPD = { 780, 1}, + .DIVSS = { 781, 1}, + .DIVSD = { 782, 1}, + .SQRTPS = { 783, 1}, + .SQRTPD = { 784, 1}, + .SQRTSS = { 785, 1}, + .SQRTSD = { 786, 1}, + .RCPPS = { 787, 1}, + .RCPSS = { 788, 1}, + .RSQRTPS = { 789, 1}, + .RSQRTSS = { 790, 1}, + .MAXPS = { 791, 1}, + .MAXPD = { 792, 1}, + .MAXSS = { 793, 1}, + .MAXSD = { 794, 1}, + .MINPS = { 795, 1}, + .MINPD = { 796, 1}, + .MINSS = { 797, 1}, + .MINSD = { 798, 1}, + .ANDPS = { 799, 1}, + .ANDPD = { 800, 1}, + .ANDNPS = { 801, 1}, + .ANDNPD = { 802, 1}, + .ORPS = { 803, 1}, + .ORPD = { 804, 1}, + .XORPS = { 805, 1}, + .XORPD = { 806, 1}, + .CMPPS = { 807, 1}, + .CMPPD = { 808, 1}, + .CMPSS = { 809, 1}, .COMISS = { 810, 1}, .COMISD = { 811, 1}, .UCOMISS = { 812, 1}, @@ -4114,615 +7962,679 @@ ENCODE_RUNS := [lib.Mnemonic]lib.Encode_Run{ .VMOVNTPD = { 1177, 2}, .VMOVNTDQ = { 1179, 2}, .VMOVNTDQA = { 1181, 2}, - .VCVTPS2PD = { 1183, 2}, - .VCVTPD2PS = { 1185, 2}, - .VCVTSS2SD = { 1187, 1}, - .VCVTSD2SS = { 1188, 1}, - .VCVTPS2DQ = { 1189, 2}, - .VCVTPD2DQ = { 1191, 2}, - .VCVTDQ2PS = { 1193, 2}, - .VCVTDQ2PD = { 1195, 2}, - .VCVTSS2SI = { 1197, 2}, - .VCVTSD2SI = { 1199, 2}, - .VCVTSI2SS = { 1201, 2}, - .VCVTSI2SD = { 1203, 2}, - .VCVTTPS2DQ = { 1205, 2}, - .VCVTTPD2DQ = { 1207, 2}, - .VCVTTSS2SI = { 1209, 2}, - .VCVTTSD2SI = { 1211, 2}, - .VPADDB = { 1213, 2}, - .VPADDW = { 1215, 2}, - .VPADDD = { 1217, 2}, - .VPADDQ = { 1219, 2}, - .VPSUBB = { 1221, 2}, - .VPSUBW = { 1223, 2}, - .VPSUBD = { 1225, 2}, - .VPSUBQ = { 1227, 2}, - .VPMULLW = { 1229, 2}, - .VPMULHW = { 1231, 2}, - .VPMULHUW = { 1233, 2}, - .VPMULUDQ = { 1235, 2}, - .VPMADDWD = { 1237, 2}, - .VPAND = { 1239, 2}, - .VPANDN = { 1241, 2}, - .VPOR = { 1243, 2}, - .VPXOR = { 1245, 2}, - .VPSLLW = { 1247, 4}, - .VPSLLD = { 1251, 4}, - .VPSLLQ = { 1255, 4}, - .VPSRLW = { 1259, 4}, - .VPSRLD = { 1263, 4}, - .VPSRLQ = { 1267, 4}, - .VPSRAW = { 1271, 4}, - .VPSRAD = { 1275, 4}, - .VPCMPEQB = { 1279, 2}, - .VPCMPEQW = { 1281, 2}, - .VPCMPEQD = { 1283, 2}, - .VPCMPEQQ = { 1285, 2}, - .VPCMPGTB = { 1287, 2}, - .VPCMPGTW = { 1289, 2}, - .VPCMPGTD = { 1291, 2}, - .VPCMPGTQ = { 1293, 2}, - .VPACKSSWB = { 1295, 2}, - .VPACKSSDW = { 1297, 2}, - .VPACKUSWB = { 1299, 2}, - .VPACKUSDW = { 1301, 2}, - .VPUNPCKLBW = { 1303, 2}, - .VPUNPCKLWD = { 1305, 2}, - .VPUNPCKLDQ = { 1307, 2}, - .VPUNPCKLQDQ = { 1309, 2}, - .VPUNPCKHBW = { 1311, 2}, - .VPUNPCKHWD = { 1313, 2}, - .VPUNPCKHDQ = { 1315, 2}, - .VPUNPCKHQDQ = { 1317, 2}, - .VPSHUFD = { 1319, 2}, - .VPSHUFHW = { 1321, 2}, - .VPSHUFLW = { 1323, 2}, - .VPEXTRB = { 1325, 1}, - .VPEXTRW = { 1326, 2}, - .VPEXTRD = { 1328, 1}, - .VPEXTRQ = { 1329, 1}, - .VPINSRB = { 1330, 1}, - .VPINSRW = { 1331, 1}, - .VPINSRD = { 1332, 1}, - .VPINSRQ = { 1333, 1}, - .VPMOVMSKB = { 1334, 2}, - .VPTEST = { 1336, 2}, - .VPSHUFB = { 1338, 2}, - .VPHADDW = { 1340, 2}, - .VPHADDD = { 1342, 2}, - .VPHADDSW = { 1344, 2}, - .VPHSUBW = { 1346, 2}, - .VPHSUBD = { 1348, 2}, - .VPHSUBSW = { 1350, 2}, - .VPMADDUBSW = { 1352, 2}, - .VPMULHRSW = { 1354, 2}, - .VPSIGNB = { 1356, 2}, - .VPSIGNW = { 1358, 2}, - .VPSIGND = { 1360, 2}, - .VPABSB = { 1362, 2}, - .VPABSW = { 1364, 2}, - .VPABSD = { 1366, 2}, - .VPALIGNR = { 1368, 2}, - .VPBLENDW = { 1370, 2}, - .VPBLENDVB = { 1372, 2}, - .VMPSADBW = { 1374, 2}, - .VPHMINPOSUW = { 1376, 1}, - .VPMAXSB = { 1377, 2}, - .VPMAXSD = { 1379, 2}, - .VPMAXUW = { 1381, 2}, - .VPMAXUD = { 1383, 2}, - .VPMINSB = { 1385, 2}, - .VPMINSD = { 1387, 2}, - .VPMINUW = { 1389, 2}, - .VPMINUD = { 1391, 2}, - .VPMOVSXBW = { 1393, 2}, - .VPMOVSXBD = { 1395, 2}, - .VPMOVSXBQ = { 1397, 2}, - .VPMOVSXWD = { 1399, 2}, - .VPMOVSXWQ = { 1401, 2}, - .VPMOVSXDQ = { 1403, 2}, - .VPMOVZXBW = { 1405, 2}, - .VPMOVZXBD = { 1407, 2}, - .VPMOVZXBQ = { 1409, 2}, - .VPMOVZXWD = { 1411, 2}, - .VPMOVZXWQ = { 1413, 2}, - .VPMOVZXDQ = { 1415, 2}, - .VPMULDQ = { 1417, 2}, - .VPMULLD = { 1419, 2}, - .VMASKMOVDQU = { 1421, 1}, - .VPCLMULQDQ = { 1422, 2}, - .VAESDEC = { 1424, 1}, - .VAESDECLAST = { 1425, 1}, - .VAESENC = { 1426, 1}, - .VAESENCLAST = { 1427, 1}, - .VAESIMC = { 1428, 1}, - .VAESKEYGENASSIST = { 1429, 1}, - .VBROADCASTSS = { 1430, 4}, - .VBROADCASTSD = { 1434, 2}, - .VBROADCASTF128 = { 1436, 1}, - .VEXTRACTF128 = { 1437, 1}, - .VINSERTF128 = { 1438, 1}, - .VPERM2F128 = { 1439, 1}, - .VMASKMOVPS = { 1440, 4}, - .VMASKMOVPD = { 1444, 4}, - .VTESTPS = { 1448, 2}, - .VTESTPD = { 1450, 2}, - .VZEROALL = { 1452, 1}, - .VZEROUPPER = { 1453, 1}, - .VBROADCASTI128 = { 1454, 1}, - .VEXTRACTI128 = { 1455, 1}, - .VINSERTI128 = { 1456, 1}, - .VPERM2I128 = { 1457, 1}, - .VPERMD = { 1458, 1}, - .VPERMPS = { 1459, 1}, - .VPERMQ = { 1460, 1}, - .VPERMPD = { 1461, 1}, - .VPBLENDD = { 1462, 2}, - .VPSLLVD = { 1464, 2}, - .VPSLLVQ = { 1466, 2}, - .VPSRLVD = { 1468, 2}, - .VPSRLVQ = { 1470, 2}, - .VPSRAVD = { 1472, 2}, - .VPMASKMOVD = { 1474, 4}, - .VPMASKMOVQ = { 1478, 4}, - .VGATHERDPS = { 1482, 2}, - .VGATHERDPD = { 1484, 2}, - .VGATHERQPS = { 1486, 2}, - .VGATHERQPD = { 1488, 2}, - .VPGATHERDD = { 1490, 2}, - .VPGATHERDQ = { 1492, 2}, - .VPGATHERQD = { 1494, 2}, - .VPGATHERQQ = { 1496, 2}, - .VFMADD132PS = { 1498, 2}, - .VFMADD213PS = { 1500, 2}, - .VFMADD231PS = { 1502, 2}, - .VFMADD132PD = { 1504, 2}, - .VFMADD213PD = { 1506, 2}, - .VFMADD231PD = { 1508, 2}, - .VFMADD132SS = { 1510, 1}, - .VFMADD213SS = { 1511, 1}, - .VFMADD231SS = { 1512, 1}, - .VFMADD132SD = { 1513, 1}, - .VFMADD213SD = { 1514, 1}, - .VFMADD231SD = { 1515, 1}, - .VFMSUB132PS = { 1516, 2}, - .VFMSUB213PS = { 1518, 2}, - .VFMSUB231PS = { 1520, 2}, - .VFMSUB132PD = { 1522, 2}, - .VFMSUB213PD = { 1524, 2}, - .VFMSUB231PD = { 1526, 2}, - .VFMSUB132SS = { 1528, 1}, - .VFMSUB213SS = { 1529, 1}, - .VFMSUB231SS = { 1530, 1}, - .VFMSUB132SD = { 1531, 1}, - .VFMSUB213SD = { 1532, 1}, - .VFMSUB231SD = { 1533, 1}, - .VFNMADD132PS = { 1534, 2}, - .VFNMADD213PS = { 1536, 2}, - .VFNMADD231PS = { 1538, 2}, - .VFNMADD132PD = { 1540, 2}, - .VFNMADD213PD = { 1542, 2}, - .VFNMADD231PD = { 1544, 2}, - .VFNMADD132SS = { 1546, 1}, - .VFNMADD213SS = { 1547, 1}, - .VFNMADD231SS = { 1548, 1}, - .VFNMADD132SD = { 1549, 1}, - .VFNMADD213SD = { 1550, 1}, - .VFNMADD231SD = { 1551, 1}, - .VFNMSUB132PS = { 1552, 2}, - .VFNMSUB213PS = { 1554, 2}, - .VFNMSUB231PS = { 1556, 2}, - .VFNMSUB132PD = { 1558, 2}, - .VFNMSUB213PD = { 1560, 2}, - .VFNMSUB231PD = { 1562, 2}, - .VFNMSUB132SS = { 1564, 1}, - .VFNMSUB213SS = { 1565, 1}, - .VFNMSUB231SS = { 1566, 1}, - .VFNMSUB132SD = { 1567, 1}, - .VFNMSUB213SD = { 1568, 1}, - .VFNMSUB231SD = { 1569, 1}, - .VFMADDSUB132PS = { 1570, 2}, - .VFMADDSUB213PS = { 1572, 2}, - .VFMADDSUB231PS = { 1574, 2}, - .VFMADDSUB132PD = { 1576, 2}, - .VFMADDSUB213PD = { 1578, 2}, - .VFMADDSUB231PD = { 1580, 2}, - .VFMSUBADD132PS = { 1582, 2}, - .VFMSUBADD213PS = { 1584, 2}, - .VFMSUBADD231PS = { 1586, 2}, - .VFMSUBADD132PD = { 1588, 2}, - .VFMSUBADD213PD = { 1590, 2}, - .VFMSUBADD231PD = { 1592, 2}, - .VCVTPH2PS = { 1594, 3}, - .VCVTPS2PH = { 1597, 3}, - .VMOVDQA32 = { 1600, 6}, - .VMOVDQA64 = { 1606, 6}, - .VMOVDQU8 = { 1612, 6}, - .VMOVDQU16 = { 1618, 6}, - .VMOVDQU32 = { 1624, 6}, - .VMOVDQU64 = { 1630, 6}, - .VPBLENDMB = { 1636, 3}, - .VPBLENDMW = { 1639, 3}, - .VPBLENDMD = { 1642, 3}, - .VPBLENDMQ = { 1645, 3}, - .VBLENDMPS = { 1648, 3}, - .VBLENDMPD = { 1651, 3}, - .VPCMPB = { 1654, 3}, - .VPCMPUB = { 1657, 3}, - .VPCMPW = { 1660, 3}, - .VPCMPUW = { 1663, 3}, - .VPCMPD = { 1666, 3}, - .VPCMPUD = { 1669, 3}, - .VPCMPQ = { 1672, 3}, - .VPCMPUQ = { 1675, 3}, - .VPTESTMB = { 1678, 3}, - .VPTESTMW = { 1681, 3}, - .VPTESTMD = { 1684, 3}, - .VPTESTMQ = { 1687, 3}, - .VPTESTNMB = { 1690, 3}, - .VPTESTNMW = { 1693, 3}, - .VPTESTNMD = { 1696, 3}, - .VPTESTNMQ = { 1699, 3}, - .VPCOMPRESSD = { 1702, 3}, - .VPCOMPRESSQ = { 1705, 3}, - .VCOMPRESSPS = { 1708, 3}, - .VCOMPRESSPD = { 1711, 3}, - .VPEXPANDD = { 1714, 3}, - .VPEXPANDQ = { 1717, 3}, - .VEXPANDPS = { 1720, 3}, - .VEXPANDPD = { 1723, 3}, - .VPCONFLICTD = { 1726, 3}, - .VPCONFLICTQ = { 1729, 3}, - .VPLZCNTD = { 1732, 3}, - .VPLZCNTQ = { 1735, 3}, - .VPERMI2B = { 1738, 3}, - .VPERMI2W = { 1741, 3}, - .VPERMI2D = { 1744, 3}, - .VPERMI2Q = { 1747, 3}, - .VPERMI2PS = { 1750, 3}, - .VPERMI2PD = { 1753, 3}, - .VPERMT2B = { 1756, 3}, - .VPERMT2W = { 1759, 3}, - .VPERMT2D = { 1762, 3}, - .VPERMT2Q = { 1765, 3}, - .VPERMT2PS = { 1768, 3}, - .VPERMT2PD = { 1771, 3}, - .VPERMB = { 1774, 3}, - .VPERMW = { 1777, 3}, - .VPMOVB2M = { 1780, 3}, - .VPMOVW2M = { 1783, 3}, - .VPMOVD2M = { 1786, 3}, - .VPMOVQ2M = { 1789, 3}, - .VPMOVM2B = { 1792, 3}, - .VPMOVM2W = { 1795, 3}, - .VPMOVM2D = { 1798, 3}, - .VPMOVM2Q = { 1801, 3}, - .VPMOVQB = { 1804, 3}, - .VPMOVSQB = { 1807, 3}, - .VPMOVUSQB = { 1810, 3}, - .VPMOVQW = { 1813, 3}, - .VPMOVSQW = { 1816, 3}, - .VPMOVUSQW = { 1819, 3}, - .VPMOVQD = { 1822, 3}, - .VPMOVSQD = { 1825, 3}, - .VPMOVUSQD = { 1828, 3}, - .VPMOVDB = { 1831, 3}, - .VPMOVSDB = { 1834, 3}, - .VPMOVUSDB = { 1837, 3}, - .VPMOVDW = { 1840, 3}, - .VPMOVSDW = { 1843, 3}, - .VPMOVUSDW = { 1846, 3}, - .VPMOVWB = { 1849, 3}, - .VPMOVSWB = { 1852, 3}, - .VPMOVUSWB = { 1855, 3}, - .VPROLD = { 1858, 3}, - .VPROLQ = { 1861, 3}, - .VPROLVD = { 1864, 3}, - .VPROLVQ = { 1867, 3}, - .VPRORD = { 1870, 3}, - .VPRORQ = { 1873, 3}, - .VPRORVD = { 1876, 3}, - .VPRORVQ = { 1879, 3}, - .VPSCATTERDD = { 1882, 3}, - .VPSCATTERDQ = { 1885, 3}, - .VPSCATTERQD = { 1888, 3}, - .VPSCATTERQQ = { 1891, 3}, - .VSCATTERDPS = { 1894, 3}, - .VSCATTERDPD = { 1897, 3}, - .VSCATTERQPS = { 1900, 3}, - .VSCATTERQPD = { 1903, 3}, - .VPSRAVQ = { 1906, 3}, - .VPSRAVW = { 1909, 3}, - .VPSLLVW = { 1912, 3}, - .VPSRLVW = { 1915, 3}, - .VRANGEPS = { 1918, 3}, - .VRANGEPD = { 1921, 3}, - .VRANGESS = { 1924, 1}, - .VRANGESD = { 1925, 1}, - .VREDUCEPS = { 1926, 3}, - .VREDUCEPD = { 1929, 3}, - .VREDUCESS = { 1932, 1}, - .VREDUCESD = { 1933, 1}, - .VRNDSCALEPS = { 1934, 3}, - .VRNDSCALEPD = { 1937, 3}, - .VRNDSCALESS = { 1940, 1}, - .VRNDSCALESD = { 1941, 1}, - .VRSQRT14PS = { 1942, 3}, - .VRSQRT14PD = { 1945, 3}, - .VRSQRT14SS = { 1948, 1}, - .VRSQRT14SD = { 1949, 1}, - .VRCP14PS = { 1950, 3}, - .VRCP14PD = { 1953, 3}, - .VRCP14SS = { 1956, 1}, - .VRCP14SD = { 1957, 1}, - .VSCALEFPS = { 1958, 3}, - .VSCALEFPD = { 1961, 3}, - .VSCALEFSS = { 1964, 1}, - .VSCALEFSD = { 1965, 1}, - .VGETEXPPS = { 1966, 3}, - .VGETEXPPD = { 1969, 3}, - .VGETEXPSS = { 1972, 1}, - .VGETEXPSD = { 1973, 1}, - .VGETMANTPS = { 1974, 3}, - .VGETMANTPD = { 1977, 3}, - .VGETMANTSS = { 1980, 1}, - .VGETMANTSD = { 1981, 1}, - .VFIXUPIMMPS = { 1982, 3}, - .VFIXUPIMMPD = { 1985, 3}, - .VFIXUPIMMSS = { 1988, 1}, - .VFIXUPIMMSD = { 1989, 1}, - .VFPCLASSPS = { 1990, 3}, - .VFPCLASSPD = { 1993, 3}, - .VFPCLASSSS = { 1996, 1}, - .VFPCLASSSD = { 1997, 1}, - .VALIGNQ = { 1998, 3}, - .VALIGND = { 2001, 3}, - .VDBPSADBW = { 2004, 3}, - .VPTERNLOGD = { 2007, 3}, - .VPTERNLOGQ = { 2010, 3}, - .VPMULTISHIFTQB = { 2013, 3}, - .KADDW = { 2016, 1}, - .KADDB = { 2017, 1}, - .KADDQ = { 2018, 1}, - .KADDD = { 2019, 1}, - .KANDW = { 2020, 1}, - .KANDB = { 2021, 1}, - .KANDQ = { 2022, 1}, - .KANDD = { 2023, 1}, - .KANDNW = { 2024, 1}, - .KANDNB = { 2025, 1}, - .KANDNQ = { 2026, 1}, - .KANDND = { 2027, 1}, - .KMOVW = { 2028, 4}, - .KMOVB = { 2032, 4}, - .KMOVQ = { 2036, 4}, - .KMOVD = { 2040, 4}, - .KNOTW = { 2044, 1}, - .KNOTB = { 2045, 1}, - .KNOTQ = { 2046, 1}, - .KNOTD = { 2047, 1}, - .KORW = { 2048, 1}, - .KORB = { 2049, 1}, - .KORQ = { 2050, 1}, - .KORD = { 2051, 1}, - .KORTESTW = { 2052, 1}, - .KORTESTB = { 2053, 1}, - .KORTESTQ = { 2054, 1}, - .KORTESTD = { 2055, 1}, - .KSHIFTLW = { 2056, 1}, - .KSHIFTLB = { 2057, 1}, - .KSHIFTLQ = { 2058, 1}, - .KSHIFTLD = { 2059, 1}, - .KSHIFTRW = { 2060, 1}, - .KSHIFTRB = { 2061, 1}, - .KSHIFTRQ = { 2062, 1}, - .KSHIFTRD = { 2063, 1}, - .KTESTW = { 2064, 1}, - .KTESTB = { 2065, 1}, - .KTESTQ = { 2066, 1}, - .KTESTD = { 2067, 1}, - .KUNPCKBW = { 2068, 1}, - .KUNPCKWD = { 2069, 1}, - .KUNPCKDQ = { 2070, 1}, - .KXNORW = { 2071, 1}, - .KXNORB = { 2072, 1}, - .KXNORQ = { 2073, 1}, - .KXNORD = { 2074, 1}, - .KXORW = { 2075, 1}, - .KXORB = { 2076, 1}, - .KXORQ = { 2077, 1}, - .KXORD = { 2078, 1}, - .FADD = { 2079, 4}, - .FADDP = { 2083, 2}, - .FIADD = { 2085, 2}, - .FSUB = { 2087, 4}, - .FSUBP = { 2091, 2}, - .FISUB = { 2093, 2}, - .FSUBR = { 2095, 4}, - .FSUBRP = { 2099, 2}, - .FISUBR = { 2101, 2}, - .FMUL = { 2103, 4}, - .FMULP = { 2107, 2}, - .FIMUL = { 2109, 2}, - .FDIV = { 2111, 4}, - .FDIVP = { 2115, 2}, - .FIDIV = { 2117, 2}, - .FDIVR = { 2119, 4}, - .FDIVRP = { 2123, 2}, - .FIDIVR = { 2125, 2}, - .FSQRT = { 2127, 1}, - .FABS = { 2128, 1}, - .FCHS = { 2129, 1}, - .FPREM = { 2130, 1}, - .FPREM1 = { 2131, 1}, - .FRNDINT = { 2132, 1}, - .FSCALE = { 2133, 1}, - .FXTRACT = { 2134, 1}, - .FXAM = { 2135, 1}, - .FLD = { 2136, 4}, - .FILD = { 2140, 3}, - .FBLD = { 2143, 1}, - .FST = { 2144, 3}, - .FSTP = { 2147, 4}, - .FIST = { 2151, 2}, - .FISTP = { 2153, 3}, - .FISTTP = { 2156, 3}, - .FBSTP = { 2159, 1}, - .FXCH = { 2160, 2}, - .FCMOVB = { 2162, 1}, - .FCMOVE = { 2163, 1}, - .FCMOVBE = { 2164, 1}, - .FCMOVU = { 2165, 1}, - .FCMOVNB = { 2166, 1}, - .FCMOVNE = { 2167, 1}, - .FCMOVNBE = { 2168, 1}, - .FCMOVNU = { 2169, 1}, - .FCOM = { 2170, 4}, - .FCOMP = { 2174, 4}, - .FCOMPP = { 2178, 1}, - .FICOM = { 2179, 2}, - .FICOMP = { 2181, 2}, - .FCOMI = { 2183, 1}, - .FCOMIP = { 2184, 1}, - .FUCOMI = { 2185, 1}, - .FUCOMIP = { 2186, 1}, - .FUCOM = { 2187, 2}, - .FUCOMP = { 2189, 2}, - .FUCOMPP = { 2191, 1}, - .FTST = { 2192, 1}, - .FLDZ = { 2193, 1}, - .FLD1 = { 2194, 1}, - .FLDPI = { 2195, 1}, - .FLDL2T = { 2196, 1}, - .FLDL2E = { 2197, 1}, - .FLDLG2 = { 2198, 1}, - .FLDLN2 = { 2199, 1}, - .FSIN = { 2200, 1}, - .FCOS = { 2201, 1}, - .FSINCOS = { 2202, 1}, - .FPTAN = { 2203, 1}, - .FPATAN = { 2204, 1}, - .F2XM1 = { 2205, 1}, - .FYL2X = { 2206, 1}, - .FYL2XP1 = { 2207, 1}, - .FINIT = { 2208, 1}, - .FNINIT = { 2209, 1}, - .FINCSTP = { 2210, 1}, - .FDECSTP = { 2211, 1}, - .FFREE = { 2212, 1}, - .FFREEP = { 2213, 1}, - .FNOP = { 2214, 1}, - .FWAIT = { 2215, 1}, - .FCLEX = { 2216, 1}, - .FNCLEX = { 2217, 1}, - .FSTCW = { 2218, 1}, - .FNSTCW = { 2219, 1}, - .FLDCW = { 2220, 1}, - .FSTENV = { 2221, 1}, - .FNSTENV = { 2222, 1}, - .FLDENV = { 2223, 1}, - .FSAVE = { 2224, 1}, - .FNSAVE = { 2225, 1}, - .FRSTOR = { 2226, 1}, - .FSTSW = { 2227, 2}, - .FNSTSW = { 2229, 2}, - .FXSAVE = { 2231, 1}, - .FXSAVE64 = { 2232, 1}, - .FXRSTOR = { 2233, 1}, - .FXRSTOR64 = { 2234, 1}, - .LGDT = { 2235, 2}, - .SGDT = { 2237, 2}, - .LIDT = { 2239, 2}, - .SIDT = { 2241, 2}, - .LLDT = { 2243, 1}, - .SLDT = { 2244, 3}, - .LTR = { 2247, 1}, - .STR = { 2248, 3}, - .LMSW = { 2251, 1}, - .SMSW = { 2252, 3}, - .CLTS = { 2255, 1}, - .ARPL = { 2256, 1}, - .LAR = { 2257, 3}, - .LSL = { 2260, 3}, - .VERR = { 2263, 1}, - .VERW = { 2264, 1}, - .INVD = { 2265, 1}, - .WBINVD = { 2266, 1}, - .INVLPG = { 2267, 1}, - .INVPCID = { 2268, 2}, - .RSM = { 2270, 1}, - .RDMSR = { 2271, 1}, - .WRMSR = { 2272, 1}, - .VMCALL = { 2273, 1}, - .VMLAUNCH = { 2274, 1}, - .VMRESUME = { 2275, 1}, - .VMXOFF = { 2276, 1}, - .VMXON = { 2277, 1}, - .VMCLEAR = { 2278, 1}, - .VMPTRLD = { 2279, 1}, - .VMPTRST = { 2280, 1}, - .VMREAD = { 2281, 1}, - .VMWRITE = { 2282, 1}, - .VMFUNC = { 2283, 1}, - .INVEPT = { 2284, 1}, - .INVVPID = { 2285, 1}, - .ENCLS = { 2286, 1}, - .ENCLU = { 2287, 1}, - .ENCLV = { 2288, 1}, - .RDPKRU = { 2289, 1}, - .WRPKRU = { 2290, 1}, - .INCSSPD = { 2291, 1}, - .INCSSPQ = { 2292, 1}, - .RDSSPD = { 2293, 1}, - .RDSSPQ = { 2294, 1}, - .SAVEPREVSSP = { 2295, 1}, - .RSTORSSP = { 2296, 1}, - .WRSSD = { 2297, 1}, - .WRSSQ = { 2298, 1}, - .WRUSSD = { 2299, 1}, - .WRUSSQ = { 2300, 1}, - .SETSSBSY = { 2301, 1}, - .CLRSSBSY = { 2302, 1}, - .ENDBR64 = { 2303, 1}, - .ENDBR32 = { 2304, 1}, - .XSAVE = { 2305, 1}, - .XSAVE64 = { 2306, 1}, - .XRSTOR = { 2307, 1}, - .XRSTOR64 = { 2308, 1}, - .XSAVEOPT = { 2309, 1}, - .XSAVEOPT64 = { 2310, 1}, - .XSAVEC = { 2311, 1}, - .XSAVEC64 = { 2312, 1}, - .XSAVES = { 2313, 1}, - .XSAVES64 = { 2314, 1}, - .XRSTORS = { 2315, 1}, - .XRSTORS64 = { 2316, 1}, - .PREFETCHT0 = { 2317, 1}, - .PREFETCHT1 = { 2318, 1}, - .PREFETCHT2 = { 2319, 1}, - .PREFETCHNTA = { 2320, 1}, - .PREFETCHW = { 2321, 1}, - .CLFLUSHOPT = { 2322, 1}, - .CLWB = { 2323, 1}, - .CLDEMOTE = { 2324, 1}, - .BSWAP = { 2325, 2}, - .CMPXCHG = { 2327, 4}, - .CMPXCHG8B = { 2331, 1}, - .CMPXCHG16B = { 2332, 1}, - .XADD = { 2333, 4}, - .BOUND = { 2337, 2}, - .ENTER = { 2339, 1}, - .LEAVE = { 2340, 1}, - .XLAT = { 2341, 1}, - .XLATB = { 2342, 1}, - .MOVBE = { 2343, 6}, - .RDRAND = { 2349, 3}, - .RDSEED = { 2352, 3}, + .VADDSUBPS = { 1183, 2}, + .VADDSUBPD = { 1185, 2}, + .VHADDPS = { 1187, 2}, + .VHADDPD = { 1189, 2}, + .VHSUBPS = { 1191, 2}, + .VHSUBPD = { 1193, 2}, + .VLDDQU = { 1195, 2}, + .VMOVDDUP = { 1197, 2}, + .VMOVSLDUP = { 1199, 2}, + .VMOVSHDUP = { 1201, 2}, + .VPCMPESTRI = { 1203, 1}, + .VPCMPESTRM = { 1204, 1}, + .VPCMPISTRI = { 1205, 1}, + .VPCMPISTRM = { 1206, 1}, + .VPBROADCASTB = { 1207, 4}, + .VPBROADCASTW = { 1211, 4}, + .VPBROADCASTD = { 1215, 4}, + .VPBROADCASTQ = { 1219, 4}, + .VCVTPS2PD = { 1223, 2}, + .VCVTPD2PS = { 1225, 2}, + .VCVTSS2SD = { 1227, 1}, + .VCVTSD2SS = { 1228, 1}, + .VCVTPS2DQ = { 1229, 2}, + .VCVTPD2DQ = { 1231, 2}, + .VCVTDQ2PS = { 1233, 2}, + .VCVTDQ2PD = { 1235, 2}, + .VCVTSS2SI = { 1237, 2}, + .VCVTSD2SI = { 1239, 2}, + .VCVTSI2SS = { 1241, 2}, + .VCVTSI2SD = { 1243, 2}, + .VCVTTPS2DQ = { 1245, 2}, + .VCVTTPD2DQ = { 1247, 2}, + .VCVTTSS2SI = { 1249, 2}, + .VCVTTSD2SI = { 1251, 2}, + .VPADDB = { 1253, 2}, + .VPADDW = { 1255, 2}, + .VPADDD = { 1257, 2}, + .VPADDQ = { 1259, 2}, + .VPSUBB = { 1261, 2}, + .VPSUBW = { 1263, 2}, + .VPSUBD = { 1265, 2}, + .VPSUBQ = { 1267, 2}, + .VPMULLW = { 1269, 2}, + .VPMULHW = { 1271, 2}, + .VPMULHUW = { 1273, 2}, + .VPMULUDQ = { 1275, 2}, + .VPMADDWD = { 1277, 2}, + .VPAND = { 1279, 2}, + .VPANDN = { 1281, 2}, + .VPOR = { 1283, 2}, + .VPXOR = { 1285, 2}, + .VPSLLW = { 1287, 4}, + .VPSLLD = { 1291, 4}, + .VPSLLQ = { 1295, 4}, + .VPSRLW = { 1299, 4}, + .VPSRLD = { 1303, 4}, + .VPSRLQ = { 1307, 4}, + .VPSRAW = { 1311, 4}, + .VPSRAD = { 1315, 4}, + .VPCMPEQB = { 1319, 2}, + .VPCMPEQW = { 1321, 2}, + .VPCMPEQD = { 1323, 2}, + .VPCMPEQQ = { 1325, 2}, + .VPCMPGTB = { 1327, 2}, + .VPCMPGTW = { 1329, 2}, + .VPCMPGTD = { 1331, 2}, + .VPCMPGTQ = { 1333, 2}, + .VPACKSSWB = { 1335, 2}, + .VPACKSSDW = { 1337, 2}, + .VPACKUSWB = { 1339, 2}, + .VPACKUSDW = { 1341, 2}, + .VPUNPCKLBW = { 1343, 2}, + .VPUNPCKLWD = { 1345, 2}, + .VPUNPCKLDQ = { 1347, 2}, + .VPUNPCKLQDQ = { 1349, 2}, + .VPUNPCKHBW = { 1351, 2}, + .VPUNPCKHWD = { 1353, 2}, + .VPUNPCKHDQ = { 1355, 2}, + .VPUNPCKHQDQ = { 1357, 2}, + .VPSHUFD = { 1359, 2}, + .VPSHUFHW = { 1361, 2}, + .VPSHUFLW = { 1363, 2}, + .VPEXTRB = { 1365, 1}, + .VPEXTRW = { 1366, 2}, + .VPEXTRD = { 1368, 1}, + .VPEXTRQ = { 1369, 1}, + .VPINSRB = { 1370, 1}, + .VPINSRW = { 1371, 1}, + .VPINSRD = { 1372, 1}, + .VPINSRQ = { 1373, 1}, + .VPMOVMSKB = { 1374, 2}, + .VPTEST = { 1376, 2}, + .VPSHUFB = { 1378, 2}, + .VPHADDW = { 1380, 2}, + .VPHADDD = { 1382, 2}, + .VPHADDSW = { 1384, 2}, + .VPHSUBW = { 1386, 2}, + .VPHSUBD = { 1388, 2}, + .VPHSUBSW = { 1390, 2}, + .VPMADDUBSW = { 1392, 2}, + .VPMULHRSW = { 1394, 2}, + .VPSIGNB = { 1396, 2}, + .VPSIGNW = { 1398, 2}, + .VPSIGND = { 1400, 2}, + .VPABSB = { 1402, 2}, + .VPABSW = { 1404, 2}, + .VPABSD = { 1406, 2}, + .VPALIGNR = { 1408, 2}, + .VPBLENDW = { 1410, 2}, + .VPBLENDVB = { 1412, 2}, + .VMPSADBW = { 1414, 2}, + .VPHMINPOSUW = { 1416, 1}, + .VPMAXSB = { 1417, 2}, + .VPMAXSD = { 1419, 2}, + .VPMAXUW = { 1421, 2}, + .VPMAXUD = { 1423, 2}, + .VPMINSB = { 1425, 2}, + .VPMINSD = { 1427, 2}, + .VPMINUW = { 1429, 2}, + .VPMINUD = { 1431, 2}, + .VPMOVSXBW = { 1433, 2}, + .VPMOVSXBD = { 1435, 2}, + .VPMOVSXBQ = { 1437, 2}, + .VPMOVSXWD = { 1439, 2}, + .VPMOVSXWQ = { 1441, 2}, + .VPMOVSXDQ = { 1443, 2}, + .VPMOVZXBW = { 1445, 2}, + .VPMOVZXBD = { 1447, 2}, + .VPMOVZXBQ = { 1449, 2}, + .VPMOVZXWD = { 1451, 2}, + .VPMOVZXWQ = { 1453, 2}, + .VPMOVZXDQ = { 1455, 2}, + .VPMULDQ = { 1457, 2}, + .VPMULLD = { 1459, 2}, + .VMASKMOVDQU = { 1461, 1}, + .VPCLMULQDQ = { 1462, 2}, + .VAESDEC = { 1464, 1}, + .VAESDECLAST = { 1465, 1}, + .VAESENC = { 1466, 1}, + .VAESENCLAST = { 1467, 1}, + .VAESIMC = { 1468, 1}, + .VAESKEYGENASSIST = { 1469, 1}, + .VBROADCASTSS = { 1470, 4}, + .VBROADCASTSD = { 1474, 2}, + .VBROADCASTF128 = { 1476, 1}, + .VEXTRACTF128 = { 1477, 1}, + .VINSERTF128 = { 1478, 1}, + .VPERM2F128 = { 1479, 1}, + .VMASKMOVPS = { 1480, 4}, + .VMASKMOVPD = { 1484, 4}, + .VTESTPS = { 1488, 2}, + .VTESTPD = { 1490, 2}, + .VZEROALL = { 1492, 1}, + .VZEROUPPER = { 1493, 1}, + .VBROADCASTI128 = { 1494, 1}, + .VEXTRACTI128 = { 1495, 1}, + .VINSERTI128 = { 1496, 1}, + .VPERM2I128 = { 1497, 1}, + .VPERMD = { 1498, 1}, + .VPERMPS = { 1499, 1}, + .VPERMQ = { 1500, 1}, + .VPERMPD = { 1501, 1}, + .VPBLENDD = { 1502, 2}, + .VPSLLVD = { 1504, 2}, + .VPSLLVQ = { 1506, 2}, + .VPSRLVD = { 1508, 2}, + .VPSRLVQ = { 1510, 2}, + .VPSRAVD = { 1512, 2}, + .VPMASKMOVD = { 1514, 4}, + .VPMASKMOVQ = { 1518, 4}, + .VGATHERDPS = { 1522, 2}, + .VGATHERDPD = { 1524, 2}, + .VGATHERQPS = { 1526, 2}, + .VGATHERQPD = { 1528, 2}, + .VPGATHERDD = { 1530, 2}, + .VPGATHERDQ = { 1532, 2}, + .VPGATHERQD = { 1534, 2}, + .VPGATHERQQ = { 1536, 2}, + .VFMADD132PS = { 1538, 2}, + .VFMADD213PS = { 1540, 2}, + .VFMADD231PS = { 1542, 2}, + .VFMADD132PD = { 1544, 2}, + .VFMADD213PD = { 1546, 2}, + .VFMADD231PD = { 1548, 2}, + .VFMADD132SS = { 1550, 1}, + .VFMADD213SS = { 1551, 1}, + .VFMADD231SS = { 1552, 1}, + .VFMADD132SD = { 1553, 1}, + .VFMADD213SD = { 1554, 1}, + .VFMADD231SD = { 1555, 1}, + .VFMSUB132PS = { 1556, 2}, + .VFMSUB213PS = { 1558, 2}, + .VFMSUB231PS = { 1560, 2}, + .VFMSUB132PD = { 1562, 2}, + .VFMSUB213PD = { 1564, 2}, + .VFMSUB231PD = { 1566, 2}, + .VFMSUB132SS = { 1568, 1}, + .VFMSUB213SS = { 1569, 1}, + .VFMSUB231SS = { 1570, 1}, + .VFMSUB132SD = { 1571, 1}, + .VFMSUB213SD = { 1572, 1}, + .VFMSUB231SD = { 1573, 1}, + .VFNMADD132PS = { 1574, 2}, + .VFNMADD213PS = { 1576, 2}, + .VFNMADD231PS = { 1578, 2}, + .VFNMADD132PD = { 1580, 2}, + .VFNMADD213PD = { 1582, 2}, + .VFNMADD231PD = { 1584, 2}, + .VFNMADD132SS = { 1586, 1}, + .VFNMADD213SS = { 1587, 1}, + .VFNMADD231SS = { 1588, 1}, + .VFNMADD132SD = { 1589, 1}, + .VFNMADD213SD = { 1590, 1}, + .VFNMADD231SD = { 1591, 1}, + .VFNMSUB132PS = { 1592, 2}, + .VFNMSUB213PS = { 1594, 2}, + .VFNMSUB231PS = { 1596, 2}, + .VFNMSUB132PD = { 1598, 2}, + .VFNMSUB213PD = { 1600, 2}, + .VFNMSUB231PD = { 1602, 2}, + .VFNMSUB132SS = { 1604, 1}, + .VFNMSUB213SS = { 1605, 1}, + .VFNMSUB231SS = { 1606, 1}, + .VFNMSUB132SD = { 1607, 1}, + .VFNMSUB213SD = { 1608, 1}, + .VFNMSUB231SD = { 1609, 1}, + .VFMADDSUB132PS = { 1610, 2}, + .VFMADDSUB213PS = { 1612, 2}, + .VFMADDSUB231PS = { 1614, 2}, + .VFMADDSUB132PD = { 1616, 2}, + .VFMADDSUB213PD = { 1618, 2}, + .VFMADDSUB231PD = { 1620, 2}, + .VFMSUBADD132PS = { 1622, 2}, + .VFMSUBADD213PS = { 1624, 2}, + .VFMSUBADD231PS = { 1626, 2}, + .VFMSUBADD132PD = { 1628, 2}, + .VFMSUBADD213PD = { 1630, 2}, + .VFMSUBADD231PD = { 1632, 2}, + .VCVTPH2PS = { 1634, 3}, + .VCVTPS2PH = { 1637, 3}, + .VMOVDQA32 = { 1640, 6}, + .VMOVDQA64 = { 1646, 6}, + .VMOVDQU8 = { 1652, 6}, + .VMOVDQU16 = { 1658, 6}, + .VMOVDQU32 = { 1664, 6}, + .VMOVDQU64 = { 1670, 6}, + .VPBLENDMB = { 1676, 3}, + .VPBLENDMW = { 1679, 3}, + .VPBLENDMD = { 1682, 3}, + .VPBLENDMQ = { 1685, 3}, + .VBLENDMPS = { 1688, 3}, + .VBLENDMPD = { 1691, 3}, + .VPCMPB = { 1694, 3}, + .VPCMPUB = { 1697, 3}, + .VPCMPW = { 1700, 3}, + .VPCMPUW = { 1703, 3}, + .VPCMPD = { 1706, 3}, + .VPCMPUD = { 1709, 3}, + .VPCMPQ = { 1712, 3}, + .VPCMPUQ = { 1715, 3}, + .VPTESTMB = { 1718, 3}, + .VPTESTMW = { 1721, 3}, + .VPTESTMD = { 1724, 3}, + .VPTESTMQ = { 1727, 3}, + .VPTESTNMB = { 1730, 3}, + .VPTESTNMW = { 1733, 3}, + .VPTESTNMD = { 1736, 3}, + .VPTESTNMQ = { 1739, 3}, + .VPCOMPRESSD = { 1742, 3}, + .VPCOMPRESSQ = { 1745, 3}, + .VCOMPRESSPS = { 1748, 3}, + .VCOMPRESSPD = { 1751, 3}, + .VPEXPANDD = { 1754, 3}, + .VPEXPANDQ = { 1757, 3}, + .VEXPANDPS = { 1760, 3}, + .VEXPANDPD = { 1763, 3}, + .VPCONFLICTD = { 1766, 3}, + .VPCONFLICTQ = { 1769, 3}, + .VPLZCNTD = { 1772, 3}, + .VPLZCNTQ = { 1775, 3}, + .VPERMI2B = { 1778, 3}, + .VPERMI2W = { 1781, 3}, + .VPERMI2D = { 1784, 3}, + .VPERMI2Q = { 1787, 3}, + .VPERMI2PS = { 1790, 3}, + .VPERMI2PD = { 1793, 3}, + .VPERMT2B = { 1796, 3}, + .VPERMT2W = { 1799, 3}, + .VPERMT2D = { 1802, 3}, + .VPERMT2Q = { 1805, 3}, + .VPERMT2PS = { 1808, 3}, + .VPERMT2PD = { 1811, 3}, + .VPERMB = { 1814, 3}, + .VPERMW = { 1817, 3}, + .VPMOVB2M = { 1820, 3}, + .VPMOVW2M = { 1823, 3}, + .VPMOVD2M = { 1826, 3}, + .VPMOVQ2M = { 1829, 3}, + .VPMOVM2B = { 1832, 3}, + .VPMOVM2W = { 1835, 3}, + .VPMOVM2D = { 1838, 3}, + .VPMOVM2Q = { 1841, 3}, + .VPMOVQB = { 1844, 3}, + .VPMOVSQB = { 1847, 3}, + .VPMOVUSQB = { 1850, 3}, + .VPMOVQW = { 1853, 3}, + .VPMOVSQW = { 1856, 3}, + .VPMOVUSQW = { 1859, 3}, + .VPMOVQD = { 1862, 3}, + .VPMOVSQD = { 1865, 3}, + .VPMOVUSQD = { 1868, 3}, + .VPMOVDB = { 1871, 3}, + .VPMOVSDB = { 1874, 3}, + .VPMOVUSDB = { 1877, 3}, + .VPMOVDW = { 1880, 3}, + .VPMOVSDW = { 1883, 3}, + .VPMOVUSDW = { 1886, 3}, + .VPMOVWB = { 1889, 3}, + .VPMOVSWB = { 1892, 3}, + .VPMOVUSWB = { 1895, 3}, + .VPROLD = { 1898, 3}, + .VPROLQ = { 1901, 3}, + .VPROLVD = { 1904, 3}, + .VPROLVQ = { 1907, 3}, + .VPRORD = { 1910, 3}, + .VPRORQ = { 1913, 3}, + .VPRORVD = { 1916, 3}, + .VPRORVQ = { 1919, 3}, + .VPSCATTERDD = { 1922, 3}, + .VPSCATTERDQ = { 1925, 3}, + .VPSCATTERQD = { 1928, 3}, + .VPSCATTERQQ = { 1931, 3}, + .VSCATTERDPS = { 1934, 3}, + .VSCATTERDPD = { 1937, 3}, + .VSCATTERQPS = { 1940, 3}, + .VSCATTERQPD = { 1943, 3}, + .VPSRAVQ = { 1946, 3}, + .VPSRAVW = { 1949, 3}, + .VPSLLVW = { 1952, 3}, + .VPSRLVW = { 1955, 3}, + .VRANGEPS = { 1958, 3}, + .VRANGEPD = { 1961, 3}, + .VRANGESS = { 1964, 1}, + .VRANGESD = { 1965, 1}, + .VREDUCEPS = { 1966, 3}, + .VREDUCEPD = { 1969, 3}, + .VREDUCESS = { 1972, 1}, + .VREDUCESD = { 1973, 1}, + .VRNDSCALEPS = { 1974, 3}, + .VRNDSCALEPD = { 1977, 3}, + .VRNDSCALESS = { 1980, 1}, + .VRNDSCALESD = { 1981, 1}, + .VRSQRT14PS = { 1982, 3}, + .VRSQRT14PD = { 1985, 3}, + .VRSQRT14SS = { 1988, 1}, + .VRSQRT14SD = { 1989, 1}, + .VRCP14PS = { 1990, 3}, + .VRCP14PD = { 1993, 3}, + .VRCP14SS = { 1996, 1}, + .VRCP14SD = { 1997, 1}, + .VSCALEFPS = { 1998, 3}, + .VSCALEFPD = { 2001, 3}, + .VSCALEFSS = { 2004, 1}, + .VSCALEFSD = { 2005, 1}, + .VGETEXPPS = { 2006, 3}, + .VGETEXPPD = { 2009, 3}, + .VGETEXPSS = { 2012, 1}, + .VGETEXPSD = { 2013, 1}, + .VGETMANTPS = { 2014, 3}, + .VGETMANTPD = { 2017, 3}, + .VGETMANTSS = { 2020, 1}, + .VGETMANTSD = { 2021, 1}, + .VFIXUPIMMPS = { 2022, 3}, + .VFIXUPIMMPD = { 2025, 3}, + .VFIXUPIMMSS = { 2028, 1}, + .VFIXUPIMMSD = { 2029, 1}, + .VFPCLASSPS = { 2030, 3}, + .VFPCLASSPD = { 2033, 3}, + .VFPCLASSSS = { 2036, 1}, + .VFPCLASSSD = { 2037, 1}, + .VALIGNQ = { 2038, 3}, + .VALIGND = { 2041, 3}, + .VDBPSADBW = { 2044, 3}, + .VPTERNLOGD = { 2047, 3}, + .VPTERNLOGQ = { 2050, 3}, + .VPMULTISHIFTQB = { 2053, 3}, + .KADDW = { 2056, 1}, + .KADDB = { 2057, 1}, + .KADDQ = { 2058, 1}, + .KADDD = { 2059, 1}, + .KANDW = { 2060, 1}, + .KANDB = { 2061, 1}, + .KANDQ = { 2062, 1}, + .KANDD = { 2063, 1}, + .KANDNW = { 2064, 1}, + .KANDNB = { 2065, 1}, + .KANDNQ = { 2066, 1}, + .KANDND = { 2067, 1}, + .KMOVW = { 2068, 4}, + .KMOVB = { 2072, 4}, + .KMOVQ = { 2076, 4}, + .KMOVD = { 2080, 4}, + .KNOTW = { 2084, 1}, + .KNOTB = { 2085, 1}, + .KNOTQ = { 2086, 1}, + .KNOTD = { 2087, 1}, + .KORW = { 2088, 1}, + .KORB = { 2089, 1}, + .KORQ = { 2090, 1}, + .KORD = { 2091, 1}, + .KORTESTW = { 2092, 1}, + .KORTESTB = { 2093, 1}, + .KORTESTQ = { 2094, 1}, + .KORTESTD = { 2095, 1}, + .KSHIFTLW = { 2096, 1}, + .KSHIFTLB = { 2097, 1}, + .KSHIFTLQ = { 2098, 1}, + .KSHIFTLD = { 2099, 1}, + .KSHIFTRW = { 2100, 1}, + .KSHIFTRB = { 2101, 1}, + .KSHIFTRQ = { 2102, 1}, + .KSHIFTRD = { 2103, 1}, + .KTESTW = { 2104, 1}, + .KTESTB = { 2105, 1}, + .KTESTQ = { 2106, 1}, + .KTESTD = { 2107, 1}, + .KUNPCKBW = { 2108, 1}, + .KUNPCKWD = { 2109, 1}, + .KUNPCKDQ = { 2110, 1}, + .KXNORW = { 2111, 1}, + .KXNORB = { 2112, 1}, + .KXNORQ = { 2113, 1}, + .KXNORD = { 2114, 1}, + .KXORW = { 2115, 1}, + .KXORB = { 2116, 1}, + .KXORQ = { 2117, 1}, + .KXORD = { 2118, 1}, + .FADD = { 2119, 4}, + .FADDP = { 2123, 2}, + .FIADD = { 2125, 2}, + .FSUB = { 2127, 4}, + .FSUBP = { 2131, 2}, + .FISUB = { 2133, 2}, + .FSUBR = { 2135, 4}, + .FSUBRP = { 2139, 2}, + .FISUBR = { 2141, 2}, + .FMUL = { 2143, 4}, + .FMULP = { 2147, 2}, + .FIMUL = { 2149, 2}, + .FDIV = { 2151, 4}, + .FDIVP = { 2155, 2}, + .FIDIV = { 2157, 2}, + .FDIVR = { 2159, 4}, + .FDIVRP = { 2163, 2}, + .FIDIVR = { 2165, 2}, + .FSQRT = { 2167, 1}, + .FABS = { 2168, 1}, + .FCHS = { 2169, 1}, + .FPREM = { 2170, 1}, + .FPREM1 = { 2171, 1}, + .FRNDINT = { 2172, 1}, + .FSCALE = { 2173, 1}, + .FXTRACT = { 2174, 1}, + .FXAM = { 2175, 1}, + .FLD = { 2176, 4}, + .FILD = { 2180, 3}, + .FBLD = { 2183, 1}, + .FST = { 2184, 3}, + .FSTP = { 2187, 4}, + .FIST = { 2191, 2}, + .FISTP = { 2193, 3}, + .FISTTP = { 2196, 3}, + .FBSTP = { 2199, 1}, + .FXCH = { 2200, 2}, + .FCMOVB = { 2202, 1}, + .FCMOVE = { 2203, 1}, + .FCMOVBE = { 2204, 1}, + .FCMOVU = { 2205, 1}, + .FCMOVNB = { 2206, 1}, + .FCMOVNE = { 2207, 1}, + .FCMOVNBE = { 2208, 1}, + .FCMOVNU = { 2209, 1}, + .FCOM = { 2210, 4}, + .FCOMP = { 2214, 4}, + .FCOMPP = { 2218, 1}, + .FICOM = { 2219, 2}, + .FICOMP = { 2221, 2}, + .FCOMI = { 2223, 1}, + .FCOMIP = { 2224, 1}, + .FUCOMI = { 2225, 1}, + .FUCOMIP = { 2226, 1}, + .FUCOM = { 2227, 2}, + .FUCOMP = { 2229, 2}, + .FUCOMPP = { 2231, 1}, + .FTST = { 2232, 1}, + .FLDZ = { 2233, 1}, + .FLD1 = { 2234, 1}, + .FLDPI = { 2235, 1}, + .FLDL2T = { 2236, 1}, + .FLDL2E = { 2237, 1}, + .FLDLG2 = { 2238, 1}, + .FLDLN2 = { 2239, 1}, + .FSIN = { 2240, 1}, + .FCOS = { 2241, 1}, + .FSINCOS = { 2242, 1}, + .FPTAN = { 2243, 1}, + .FPATAN = { 2244, 1}, + .F2XM1 = { 2245, 1}, + .FYL2X = { 2246, 1}, + .FYL2XP1 = { 2247, 1}, + .FINIT = { 2248, 1}, + .FNINIT = { 2249, 1}, + .FINCSTP = { 2250, 1}, + .FDECSTP = { 2251, 1}, + .FFREE = { 2252, 1}, + .FFREEP = { 2253, 1}, + .FNOP = { 2254, 1}, + .FWAIT = { 2255, 1}, + .FCLEX = { 2256, 1}, + .FNCLEX = { 2257, 1}, + .FSTCW = { 2258, 1}, + .FNSTCW = { 2259, 1}, + .FLDCW = { 2260, 1}, + .FSTENV = { 2261, 1}, + .FNSTENV = { 2262, 1}, + .FLDENV = { 2263, 1}, + .FSAVE = { 2264, 1}, + .FNSAVE = { 2265, 1}, + .FRSTOR = { 2266, 1}, + .FSTSW = { 2267, 2}, + .FNSTSW = { 2269, 2}, + .FXSAVE = { 2271, 1}, + .FXSAVE64 = { 2272, 1}, + .FXRSTOR = { 2273, 1}, + .FXRSTOR64 = { 2274, 1}, + .LGDT = { 2275, 2}, + .SGDT = { 2277, 2}, + .LIDT = { 2279, 2}, + .SIDT = { 2281, 2}, + .LLDT = { 2283, 1}, + .SLDT = { 2284, 3}, + .LTR = { 2287, 1}, + .STR = { 2288, 3}, + .LMSW = { 2291, 1}, + .SMSW = { 2292, 3}, + .CLTS = { 2295, 1}, + .ARPL = { 2296, 1}, + .LAR = { 2297, 3}, + .LSL = { 2300, 3}, + .VERR = { 2303, 1}, + .VERW = { 2304, 1}, + .INVD = { 2305, 1}, + .WBINVD = { 2306, 1}, + .INVLPG = { 2307, 1}, + .INVPCID = { 2308, 2}, + .RSM = { 2310, 1}, + .RDMSR = { 2311, 1}, + .WRMSR = { 2312, 1}, + .VMCALL = { 2313, 1}, + .VMLAUNCH = { 2314, 1}, + .VMRESUME = { 2315, 1}, + .VMXOFF = { 2316, 1}, + .VMXON = { 2317, 1}, + .VMCLEAR = { 2318, 1}, + .VMPTRLD = { 2319, 1}, + .VMPTRST = { 2320, 1}, + .VMREAD = { 2321, 1}, + .VMWRITE = { 2322, 1}, + .VMFUNC = { 2323, 1}, + .INVEPT = { 2324, 1}, + .INVVPID = { 2325, 1}, + .ENCLS = { 2326, 1}, + .ENCLU = { 2327, 1}, + .ENCLV = { 2328, 1}, + .RDPKRU = { 2329, 1}, + .WRPKRU = { 2330, 1}, + .INCSSPD = { 2331, 1}, + .INCSSPQ = { 2332, 1}, + .RDSSPD = { 2333, 1}, + .RDSSPQ = { 2334, 1}, + .SAVEPREVSSP = { 2335, 1}, + .RSTORSSP = { 2336, 1}, + .WRSSD = { 2337, 1}, + .WRSSQ = { 2338, 1}, + .WRUSSD = { 2339, 1}, + .WRUSSQ = { 2340, 1}, + .SETSSBSY = { 2341, 1}, + .CLRSSBSY = { 2342, 1}, + .ENDBR64 = { 2343, 1}, + .ENDBR32 = { 2344, 1}, + .XSAVE = { 2345, 1}, + .XSAVE64 = { 2346, 1}, + .XRSTOR = { 2347, 1}, + .XRSTOR64 = { 2348, 1}, + .XSAVEOPT = { 2349, 1}, + .XSAVEOPT64 = { 2350, 1}, + .XSAVEC = { 2351, 1}, + .XSAVEC64 = { 2352, 1}, + .XSAVES = { 2353, 1}, + .XSAVES64 = { 2354, 1}, + .XRSTORS = { 2355, 1}, + .XRSTORS64 = { 2356, 1}, + .PREFETCHT0 = { 2357, 1}, + .PREFETCHT1 = { 2358, 1}, + .PREFETCHT2 = { 2359, 1}, + .PREFETCHNTA = { 2360, 1}, + .PREFETCHW = { 2361, 1}, + .CLFLUSHOPT = { 2362, 1}, + .CLWB = { 2363, 1}, + .CLDEMOTE = { 2364, 1}, + .BSWAP = { 2365, 2}, + .CMPXCHG = { 2367, 4}, + .CMPXCHG8B = { 2371, 1}, + .CMPXCHG16B = { 2372, 1}, + .XADD = { 2373, 4}, + .BOUND = { 2377, 2}, + .ENTER = { 2379, 1}, + .LEAVE = { 2380, 1}, + .XLAT = { 2381, 1}, + .XLATB = { 2382, 1}, + .MOVBE = { 2383, 6}, + .RDRAND = { 2389, 3}, + .RDSEED = { 2392, 3}, + .SWAPGS = { 2395, 1}, + .MONITOR = { 2396, 1}, + .MWAIT = { 2397, 1}, + .CLAC = { 2398, 1}, + .STAC = { 2399, 1}, + .RDFSBASE = { 2400, 2}, + .RDGSBASE = { 2402, 2}, + .WRFSBASE = { 2404, 2}, + .WRGSBASE = { 2406, 2}, + .PTWRITE = { 2408, 2}, + .RDPID = { 2410, 1}, + .WBNOINVD = { 2411, 1}, + .SERIALIZE = { 2412, 1}, + .PREFETCH = { 2413, 1}, + .TPAUSE = { 2414, 1}, + .UMONITOR = { 2415, 1}, + .UMWAIT = { 2416, 1}, + .MOVDIRI = { 2417, 2}, + .MOVDIR64B = { 2419, 1}, + .ENQCMD = { 2420, 1}, + .ENQCMDS = { 2421, 1}, + .AADD = { 2422, 2}, + .AAND = { 2424, 2}, + .AOR = { 2426, 2}, + .AXOR = { 2428, 2}, + .XEND = { 2430, 1}, + .XTEST = { 2431, 1}, + .VMRUN = { 2432, 1}, + .VMMCALL = { 2433, 1}, + .VMLOAD = { 2434, 1}, + .VMSAVE = { 2435, 1}, + .STGI = { 2436, 1}, + .CLGI = { 2437, 1}, + .SKINIT = { 2438, 1}, + .INVLPGA = { 2439, 1}, + .INVLPGB = { 2440, 1}, + .TLBSYNC = { 2441, 1}, + .PVALIDATE = { 2442, 1}, + .RMPADJUST = { 2443, 1}, + .RMPUPDATE = { 2444, 1}, + .PSMASH = { 2445, 1}, + .CLZERO = { 2446, 1}, + .MONITORX = { 2447, 1}, + .MWAITX = { 2448, 1}, + .RDPRU = { 2449, 1}, + .MCOMMIT = { 2450, 1}, } // Emit descriptor per form (derived from ENCODE_FORMS via lib.form_to_recipe). -ENCODE_RECIPES: [2355]lib.Form_Recipe +ENCODE_RECIPES: [2451]lib.Form_Recipe @(init) _fill_recipes :: proc "contextless" () { for i in 0 ..< len(ENCODE_FORMS) { ENCODE_RECIPES[i] = lib.form_to_recipe(&ENCODE_FORMS[i]) diff --git a/core/rexcode/isa/x86/tablegen/generated/writer.odin b/core/rexcode/isa/x86/tablegen/generated/writer.odin index 7a91efc83..cae51a210 100644 --- a/core/rexcode/isa/x86/tablegen/generated/writer.odin +++ b/core/rexcode/isa/x86/tablegen/generated/writer.odin @@ -8,6 +8,8 @@ package rexcode_x86_generated import "core:os" import "core:fmt" +import tablegen ".." + TABLES :: #directory + "/../../tables/" raw :: #force_inline proc "contextless" (p: rawptr, n: int) -> []u8 { @@ -40,4 +42,5 @@ main :: proc() { w(TABLES + "x86.evex_idx_0f.bin", raw(&EVEX_INDEX_0F, size_of(EVEX_INDEX_0F))) w(TABLES + "x86.evex_idx_0f38.bin", raw(&EVEX_INDEX_0F38, size_of(EVEX_INDEX_0F38))) w(TABLES + "x86.evex_idx_0f3a.bin", raw(&EVEX_INDEX_0F3A, size_of(EVEX_INDEX_0F3A))) + w(TABLES + "x86.clobber_forms.bin", raw(&CLOBBER_FORMS, size_of(CLOBBER_FORMS))) } diff --git a/core/rexcode/isa/x86/tables.odin b/core/rexcode/isa/x86/tables.odin index 32a5c7af1..4bd5710a2 100644 --- a/core/rexcode/isa/x86/tables.odin +++ b/core/rexcode/isa/x86/tables.odin @@ -94,6 +94,7 @@ Decode_Index :: struct { @(rodata) EVEX_INDEX_0F := #load("tables/x86.evex_idx_0f.bin", []Decode_Index) @(rodata) EVEX_INDEX_0F38 := #load("tables/x86.evex_idx_0f38.bin", []Decode_Index) @(rodata) EVEX_INDEX_0F3A := #load("tables/x86.evex_idx_0f3a.bin", []Decode_Index) +@(rodata) CLOBBER_FORMS := #load("tables/x86.clobber_forms.bin", []Clobber) // ----------------------------------------------------------------------------- // Accessors @@ -107,6 +108,14 @@ encoding_forms :: #force_inline proc "contextless" (m: Mnemonic) -> []Encoding { return ENCODE_FORMS[r.start:][:r.count] } +// Per-mnemonic encode forms: the run of ENCODE_FORMS belonging to `m`. +// Replaces the old ENCODING_TABLE[m] slice; the returned view is into rodata. +@(private, require_results) +clobber_forms :: #force_inline proc "contextless" (m: Mnemonic) -> []Clobber { + r := ENCODE_RUNS[u16(m)] + return CLOBBER_FORMS[r.start:][:r.count] +} + // Flat [prefix][opcode] lookup into a logical [4][256] index table. @(private, require_results) didx :: #force_inline proc "contextless" (t: []Decode_Index, prefix, opcode: u8) -> Decode_Index { diff --git a/core/rexcode/isa/x86/tables/x86.clobber_forms.bin b/core/rexcode/isa/x86/tables/x86.clobber_forms.bin new file mode 100644 index 000000000..f7016c99b Binary files /dev/null and b/core/rexcode/isa/x86/tables/x86.clobber_forms.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.encode_forms.bin b/core/rexcode/isa/x86/tables/x86.encode_forms.bin index 3ec40035e..546c6e2a6 100644 Binary files a/core/rexcode/isa/x86/tables/x86.encode_forms.bin and b/core/rexcode/isa/x86/tables/x86.encode_forms.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.encode_recipes.bin b/core/rexcode/isa/x86/tables/x86.encode_recipes.bin index 31e3c3333..fad8dd6a8 100644 Binary files a/core/rexcode/isa/x86/tables/x86.encode_recipes.bin and b/core/rexcode/isa/x86/tables/x86.encode_recipes.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.encode_runs.bin b/core/rexcode/isa/x86/tables/x86.encode_runs.bin index 37bfc9c05..9431e7617 100644 Binary files a/core/rexcode/isa/x86/tables/x86.encode_runs.bin and b/core/rexcode/isa/x86/tables/x86.encode_runs.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.evex.bin b/core/rexcode/isa/x86/tables/x86.evex.bin index 42b82af2b..520bffe41 100644 Binary files a/core/rexcode/isa/x86/tables/x86.evex.bin and b/core/rexcode/isa/x86/tables/x86.evex.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f.bin b/core/rexcode/isa/x86/tables/x86.idx_0f.bin index f3d5313b3..2a334704c 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_0f.bin and b/core/rexcode/isa/x86/tables/x86.idx_0f.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f38.bin b/core/rexcode/isa/x86/tables/x86.idx_0f38.bin index ea3bd5583..eb491c27c 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_0f38.bin and b/core/rexcode/isa/x86/tables/x86.idx_0f38.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin b/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin index d3df437f4..21f960324 100644 Binary files a/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin and b/core/rexcode/isa/x86/tables/x86.idx_0f3a.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.legacy.bin b/core/rexcode/isa/x86/tables/x86.legacy.bin index e993f3cfb..1b6fa99af 100644 Binary files a/core/rexcode/isa/x86/tables/x86.legacy.bin and b/core/rexcode/isa/x86/tables/x86.legacy.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.vex.bin b/core/rexcode/isa/x86/tables/x86.vex.bin index b2cca37db..34b01319e 100644 Binary files a/core/rexcode/isa/x86/tables/x86.vex.bin and b/core/rexcode/isa/x86/tables/x86.vex.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.vex_idx_0f.bin b/core/rexcode/isa/x86/tables/x86.vex_idx_0f.bin index 6b8575085..182c25598 100644 Binary files a/core/rexcode/isa/x86/tables/x86.vex_idx_0f.bin and b/core/rexcode/isa/x86/tables/x86.vex_idx_0f.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.vex_idx_0f38.bin b/core/rexcode/isa/x86/tables/x86.vex_idx_0f38.bin index a5d6de7fe..5de401ae7 100644 Binary files a/core/rexcode/isa/x86/tables/x86.vex_idx_0f38.bin and b/core/rexcode/isa/x86/tables/x86.vex_idx_0f38.bin differ diff --git a/core/rexcode/isa/x86/tables/x86.vex_idx_0f3a.bin b/core/rexcode/isa/x86/tables/x86.vex_idx_0f3a.bin index f270c4c2b..31bcec3ca 100644 Binary files a/core/rexcode/isa/x86/tables/x86.vex_idx_0f3a.bin and b/core/rexcode/isa/x86/tables/x86.vex_idx_0f3a.bin differ diff --git a/src/array.cpp b/src/array.cpp index 9cf7c6ce3..5176f2511 100644 --- a/src/array.cpp +++ b/src/array.cpp @@ -187,6 +187,20 @@ gb_internal gb_inline Slice slice(Array const &array, isize lo, isize hi) return out; } +template +gb_internal gb_inline Slice slice_lower_and_count(Slice const &array, isize lo, isize count) { + GB_ASSERT(0 <= lo); + GB_ASSERT(0 <= count); + GB_ASSERT((array.count-lo) <= count); + Slice out = {}; + if (count > 0) { + out.data = array.data+lo; + out.count = count; + } + return out; +} + + template gb_internal void slice_ordered_remove(Slice *array, isize index) { diff --git a/src/asm_tables.cpp b/src/asm_tables.cpp new file mode 100644 index 000000000..eb7e3c109 --- /dev/null +++ b/src/asm_tables.cpp @@ -0,0 +1,60 @@ +enum AsmRegClass : u8 { + AsmRegClass_Unknown, + AsmRegClass_Integer, + AsmRegClass_Float, + AsmRegClass_Vector, + AsmRegClass_Mask, + + AsmRegClass_COUNT +}; + +gb_global String const asm_reg_class_strings[AsmRegClass_COUNT] = { + str_lit("unknown"), + str_lit("integer"), + str_lit("float"), + str_lit("vector"), + str_lit("mask"), +}; + +gb_global String const asm_reg_class_strings_with_article[AsmRegClass_COUNT] = { + str_lit("an unknown"), + str_lit("an integer"), + str_lit("a float"), + str_lit("a vector"), + str_lit("a mask"), +}; + +enum AsmOperandKind : u8 { + AsmOperand_Invalid, + AsmOperand_Register, + AsmOperand_Memory, + AsmOperand_Register_Or_Memory, + AsmOperand_Immediate, + AsmOperand_Label, + + AsmOperand_COUNT +}; + +gb_global String const asm_operand_kind_strings[AsmOperand_COUNT] = { + str_lit(""), + str_lit("register"), + str_lit("memory"), + str_lit("register or memory"), + str_lit("immediate"), + str_lit("label"), +}; + +gb_global String const asm_operand_kind_expected_strings[AsmOperand_COUNT] = { + str_lit(""), + str_lit("a register"), + str_lit("a memory"), + str_lit("a register or memory"), + str_lit("an immediate"), + str_lit("a label"), +}; + +#include "asm_tables_amd64.cpp" + +void init_asm_tables() { + g_asm_amd64.init(); +} \ No newline at end of file diff --git a/src/asm_tables_amd64.cpp b/src/asm_tables_amd64.cpp new file mode 100644 index 000000000..6d7362bc3 --- /dev/null +++ b/src/asm_tables_amd64.cpp @@ -0,0 +1,2088 @@ +// ============================================================================= +// GENERATED FILE - DO NOT EDIT +// ============================================================================= +// +// Produces a C++ equivalent of the encoding table from core:rexcode written in Odin +// odin run tablegen # Stage A: ENCODING_TABLE -> generated/ + this file +// odin run tablegen/generated # Stage B: typed Odin literals -> tables/*.bin +// odin run tablegen/cpp-compiler # Stage C: typed Odin literals -> C++ literals +// + + +struct Asm_amd64 { + enum Mnemonic : u16 { + M_INVALID, M_MOV, M_MOVABS, M_MOVZX, M_MOVSX, M_MOVSXD, M_XCHG, M_PUSH, M_POP, M_LEA, M_ADD, M_ADC, M_SUB, M_SBB, M_MUL, M_IMUL, + M_DIV, M_IDIV, M_INC, M_DEC, M_NEG, M_CMP, M_AND, M_OR, M_XOR, M_NOT, M_TEST, M_SHL, M_SHR, M_SAR, M_ROL, M_ROR, + M_RCL, M_RCR, M_SHLD, M_SHRD, M_BT, M_BTS, M_BTR, M_BTC, M_BSF, M_BSR, M_POPCNT, M_LZCNT, M_TZCNT, M_JMP, M_JA, M_JAE, + M_JB, M_JBE, M_JC, M_JE, M_JZ, M_JG, M_JGE, M_JL, M_JLE, M_JNA, M_JNAE, M_JNB, M_JNBE, M_JNC, M_JNE, M_JNZ, + M_JNG, M_JNGE, M_JNL, M_JNLE, M_JNO, M_JNP, M_JNS, M_JO, M_JP, M_JPE, M_JPO, M_JS, M_JCXZ, M_JECXZ, M_JRCXZ, M_LOOP, + M_LOOPE, M_LOOPNE, M_CALL, M_RET, M_IRET, M_IRETD, M_IRETQ, M_INT, M_INT3, M_INTO, M_SYSCALL, M_SYSRET, M_SYSENTER, M_SYSEXIT, M_SETA, M_SETAE, + M_SETB, M_SETBE, M_SETC, M_SETE, M_SETG, M_SETGE, M_SETL, M_SETLE, M_SETNA, M_SETNAE, M_SETNB, M_SETNBE, M_SETNC, M_SETNE, M_SETNG, M_SETNGE, + M_SETNL, M_SETNLE, M_SETNO, M_SETNP, M_SETNS, M_SETNZ, M_SETO, M_SETP, M_SETPE, M_SETPO, M_SETS, M_SETZ, M_CMOVA, M_CMOVAE, M_CMOVB, M_CMOVBE, + M_CMOVC, M_CMOVE, M_CMOVG, M_CMOVGE, M_CMOVL, M_CMOVLE, M_CMOVNA, M_CMOVNAE, M_CMOVNB, M_CMOVNBE, M_CMOVNC, M_CMOVNE, M_CMOVNG, M_CMOVNGE, M_CMOVNL, M_CMOVNLE, + M_CMOVNO, M_CMOVNP, M_CMOVNS, M_CMOVNZ, M_CMOVO, M_CMOVP, M_CMOVPE, M_CMOVPO, M_CMOVS, M_CMOVZ, M_MOVS, M_MOVSB, M_MOVSW, M_MOVSD, M_MOVSQ, M_CMPS, + M_CMPSB, M_CMPSW, M_CMPSD, M_CMPSQ, M_SCAS, M_SCASB, M_SCASW, M_SCASD, M_SCASQ, M_LODS, M_LODSB, M_LODSW, M_LODSD, M_LODSQ, M_STOS, M_STOSB, + M_STOSW, M_STOSD, M_STOSQ, M_CLC, M_STC, M_CMC, M_CLD, M_STD, M_CLI, M_STI, M_LAHF, M_SAHF, M_PUSHF, M_PUSHFD, M_PUSHFQ, M_POPF, + M_POPFD, M_POPFQ, M_NOP, M_HLT, M_WAIT, M_LOCK, M_UD0, M_UD1, M_UD2, M_CPUID, M_RDTSC, M_RDTSCP, M_RDPMC, M_XGETBV, M_XSETBV, M_CBW, + M_CWDE, M_CDQE, M_CWD, M_CDQ, M_CQO, M_ANDN, M_BEXTR, M_BLSI, M_BLSMSK, M_BLSR, M_BZHI, M_PDEP, M_PEXT, M_RORX, M_SARX, M_SHLX, + M_SHRX, M_MULX, M_ADCX, M_ADOX, M_MOVAPS, M_MOVUPS, M_MOVAPD, M_MOVUPD, M_MOVSS, M_MOVDQA, M_MOVDQU, M_MOVQ, M_MOVD, M_MOVLPS, M_MOVHPS, M_MOVLPD, + M_MOVHPD, M_MOVLHPS, M_MOVHLPS, M_MOVMSKPS, M_MOVMSKPD, M_MOVNTPS, M_MOVNTPD, M_MOVNTDQ, M_MOVNTDQA, M_ADDPS, M_ADDPD, M_ADDSS, M_ADDSD, M_SUBPS, M_SUBPD, M_SUBSS, + M_SUBSD, M_MULPS, M_MULPD, M_MULSS, M_MULSD, M_DIVPS, M_DIVPD, M_DIVSS, M_DIVSD, M_SQRTPS, M_SQRTPD, M_SQRTSS, M_SQRTSD, M_RCPPS, M_RCPSS, M_RSQRTPS, + M_RSQRTSS, M_MAXPS, M_MAXPD, M_MAXSS, M_MAXSD, M_MINPS, M_MINPD, M_MINSS, M_MINSD, M_ANDPS, M_ANDPD, M_ANDNPS, M_ANDNPD, M_ORPS, M_ORPD, M_XORPS, + M_XORPD, M_CMPPS, M_CMPPD, M_CMPSS, M_COMISS, M_COMISD, M_UCOMISS, M_UCOMISD, M_SHUFPS, M_SHUFPD, M_UNPCKLPS, M_UNPCKHPS, M_UNPCKLPD, M_UNPCKHPD, M_CVTPS2PD, M_CVTPD2PS, + M_CVTSS2SD, M_CVTSD2SS, M_CVTPS2DQ, M_CVTPD2DQ, M_CVTDQ2PS, M_CVTDQ2PD, M_CVTSS2SI, M_CVTSD2SI, M_CVTSI2SS, M_CVTSI2SD, M_CVTTPS2DQ, M_CVTTPD2DQ, M_CVTTSS2SI, M_CVTTSD2SI, M_PADDB, M_PADDW, + M_PADDD, M_PADDQ, M_PSUBB, M_PSUBW, M_PSUBD, M_PSUBQ, M_PADDSB, M_PADDSW, M_PADDUSB, M_PADDUSW, M_PSUBSB, M_PSUBSW, M_PSUBUSB, M_PSUBUSW, M_PMULLW, M_PMULHW, + M_PMULHUW, M_PMULUDQ, M_PMADDWD, M_PAND, M_PANDN, M_POR, M_PXOR, M_PSLLW, M_PSLLD, M_PSLLQ, M_PSRLW, M_PSRLD, M_PSRLQ, M_PSRAW, M_PSRAD, M_PCMPEQB, + M_PCMPEQW, M_PCMPEQD, M_PCMPGTB, M_PCMPGTW, M_PCMPGTD, M_PACKSSWB, M_PACKSSDW, M_PACKUSWB, M_PUNPCKLBW, M_PUNPCKLWD, M_PUNPCKLDQ, M_PUNPCKLQDQ, M_PUNPCKHBW, M_PUNPCKHWD, M_PUNPCKHDQ, M_PUNPCKHQDQ, + M_PSHUFD, M_PSHUFHW, M_PSHUFLW, M_PSHUFW, M_PEXTRW, M_PINSRW, M_PMOVMSKB, M_PAVGB, M_PAVGW, M_PMAXUB, M_PMAXSW, M_PMINUB, M_PMINSW, M_PSADBW, M_MASKMOVDQU, M_LFENCE, + M_SFENCE, M_MFENCE, M_PAUSE, M_CLFLUSH, M_ADDSUBPS, M_ADDSUBPD, M_HADDPS, M_HADDPD, M_HSUBPS, M_HSUBPD, M_MOVDDUP, M_MOVSLDUP, M_MOVSHDUP, M_LDDQU, M_PSHUFB, M_PHADDW, + M_PHADDD, M_PHADDSW, M_PHSUBW, M_PHSUBD, M_PHSUBSW, M_PMADDUBSW, M_PMULHRSW, M_PSIGNB, M_PSIGNW, M_PSIGND, M_PABSB, M_PABSW, M_PABSD, M_PALIGNR, M_BLENDPS, M_BLENDPD, + M_BLENDVPS, M_BLENDVPD, M_PBLENDW, M_PBLENDVB, M_DPPS, M_DPPD, M_EXTRACTPS, M_INSERTPS, M_MPSADBW, M_PACKUSDW, M_PEXTRB, M_PEXTRD, M_PEXTRQ, M_PHMINPOSUW, M_PINSRB, M_PINSRD, + M_PINSRQ, M_PMAXSB, M_PMAXSD, M_PMAXUW, M_PMAXUD, M_PMINSB, M_PMINSD, M_PMINUW, M_PMINUD, M_PMOVSXBW, M_PMOVSXBD, M_PMOVSXBQ, M_PMOVSXWD, M_PMOVSXWQ, M_PMOVSXDQ, M_PMOVZXBW, + M_PMOVZXBD, M_PMOVZXBQ, M_PMOVZXWD, M_PMOVZXWQ, M_PMOVZXDQ, M_PMULDQ, M_PMULLD, M_PTEST, M_ROUNDPS, M_ROUNDPD, M_ROUNDSS, M_ROUNDSD, M_PCMPEQQ, M_CRC32, M_PCMPESTRI, M_PCMPESTRM, + M_PCMPISTRI, M_PCMPISTRM, M_PCMPGTQ, M_PCLMULQDQ, M_AESDEC, M_AESDECLAST, M_AESENC, M_AESENCLAST, M_AESIMC, M_AESKEYGENASSIST, M_SHA1MSG1, M_SHA1MSG2, M_SHA1NEXTE, M_SHA1RNDS4, M_SHA256MSG1, M_SHA256MSG2, + M_SHA256RNDS2, M_VADDPS, M_VADDPD, M_VADDSS, M_VADDSD, M_VSUBPS, M_VSUBPD, M_VSUBSS, M_VSUBSD, M_VMULPS, M_VMULPD, M_VMULSS, M_VMULSD, M_VDIVPS, M_VDIVPD, M_VDIVSS, + M_VDIVSD, M_VSQRTPS, M_VSQRTPD, M_VSQRTSS, M_VSQRTSD, M_VRCPPS, M_VRCPSS, M_VRSQRTPS, M_VRSQRTSS, M_VMAXPS, M_VMAXPD, M_VMAXSS, M_VMAXSD, M_VMINPS, M_VMINPD, M_VMINSS, + M_VMINSD, M_VANDPS, M_VANDPD, M_VANDNPS, M_VANDNPD, M_VORPS, M_VORPD, M_VXORPS, M_VXORPD, M_VCMPPS, M_VCMPPD, M_VCMPSS, M_VCMPSD, M_VCOMISS, M_VCOMISD, M_VUCOMISS, + M_VUCOMISD, M_VSHUFPS, M_VSHUFPD, M_VUNPCKLPS, M_VUNPCKHPS, M_VUNPCKLPD, M_VUNPCKHPD, M_VBLENDPS, M_VBLENDPD, M_VBLENDVPS, M_VBLENDVPD, M_VDPPS, M_VDPPD, M_VROUNDPS, M_VROUNDPD, M_VROUNDSS, + M_VROUNDSD, M_VEXTRACTPS, M_VINSERTPS, M_VMOVAPS, M_VMOVUPS, M_VMOVAPD, M_VMOVUPD, M_VMOVSS, M_VMOVSD, M_VMOVDQA, M_VMOVDQU, M_VMOVQ, M_VMOVD, M_VMOVLPS, M_VMOVHPS, M_VMOVLPD, + M_VMOVHPD, M_VMOVLHPS, M_VMOVHLPS, M_VMOVMSKPS, M_VMOVMSKPD, M_VMOVNTPS, M_VMOVNTPD, M_VMOVNTDQ, M_VMOVNTDQA, M_VADDSUBPS, M_VADDSUBPD, M_VHADDPS, M_VHADDPD, M_VHSUBPS, M_VHSUBPD, M_VLDDQU, + M_VMOVDDUP, M_VMOVSLDUP, M_VMOVSHDUP, M_VPCMPESTRI, M_VPCMPESTRM, M_VPCMPISTRI, M_VPCMPISTRM, M_VPBROADCASTB, M_VPBROADCASTW, M_VPBROADCASTD, M_VPBROADCASTQ, M_VCVTPS2PD, M_VCVTPD2PS, M_VCVTSS2SD, M_VCVTSD2SS, M_VCVTPS2DQ, + M_VCVTPD2DQ, M_VCVTDQ2PS, M_VCVTDQ2PD, M_VCVTSS2SI, M_VCVTSD2SI, M_VCVTSI2SS, M_VCVTSI2SD, M_VCVTTPS2DQ, M_VCVTTPD2DQ, M_VCVTTSS2SI, M_VCVTTSD2SI, M_VPADDB, M_VPADDW, M_VPADDD, M_VPADDQ, M_VPSUBB, + M_VPSUBW, M_VPSUBD, M_VPSUBQ, M_VPMULLW, M_VPMULHW, M_VPMULHUW, M_VPMULUDQ, M_VPMADDWD, M_VPAND, M_VPANDN, M_VPOR, M_VPXOR, M_VPSLLW, M_VPSLLD, M_VPSLLQ, M_VPSRLW, + M_VPSRLD, M_VPSRLQ, M_VPSRAW, M_VPSRAD, M_VPCMPEQB, M_VPCMPEQW, M_VPCMPEQD, M_VPCMPEQQ, M_VPCMPGTB, M_VPCMPGTW, M_VPCMPGTD, M_VPCMPGTQ, M_VPACKSSWB, M_VPACKSSDW, M_VPACKUSWB, M_VPACKUSDW, + M_VPUNPCKLBW, M_VPUNPCKLWD, M_VPUNPCKLDQ, M_VPUNPCKLQDQ, M_VPUNPCKHBW, M_VPUNPCKHWD, M_VPUNPCKHDQ, M_VPUNPCKHQDQ, M_VPSHUFD, M_VPSHUFHW, M_VPSHUFLW, M_VPEXTRB, M_VPEXTRW, M_VPEXTRD, M_VPEXTRQ, M_VPINSRB, + M_VPINSRW, M_VPINSRD, M_VPINSRQ, M_VPMOVMSKB, M_VPTEST, M_VPSHUFB, M_VPHADDW, M_VPHADDD, M_VPHADDSW, M_VPHSUBW, M_VPHSUBD, M_VPHSUBSW, M_VPMADDUBSW, M_VPMULHRSW, M_VPSIGNB, M_VPSIGNW, + M_VPSIGND, M_VPABSB, M_VPABSW, M_VPABSD, M_VPALIGNR, M_VPBLENDW, M_VPBLENDVB, M_VMPSADBW, M_VPHMINPOSUW, M_VPMAXSB, M_VPMAXSD, M_VPMAXUW, M_VPMAXUD, M_VPMINSB, M_VPMINSD, M_VPMINUW, + M_VPMINUD, M_VPMOVSXBW, M_VPMOVSXBD, M_VPMOVSXBQ, M_VPMOVSXWD, M_VPMOVSXWQ, M_VPMOVSXDQ, M_VPMOVZXBW, M_VPMOVZXBD, M_VPMOVZXBQ, M_VPMOVZXWD, M_VPMOVZXWQ, M_VPMOVZXDQ, M_VPMULDQ, M_VPMULLD, M_VMASKMOVDQU, + M_VPCLMULQDQ, M_VAESDEC, M_VAESDECLAST, M_VAESENC, M_VAESENCLAST, M_VAESIMC, M_VAESKEYGENASSIST, M_VBROADCASTSS, M_VBROADCASTSD, M_VBROADCASTF128, M_VEXTRACTF128, M_VINSERTF128, M_VPERM2F128, M_VMASKMOVPS, M_VMASKMOVPD, M_VTESTPS, + M_VTESTPD, M_VZEROALL, M_VZEROUPPER, M_VBROADCASTI128, M_VEXTRACTI128, M_VINSERTI128, M_VPERM2I128, M_VPERMD, M_VPERMPS, M_VPERMQ, M_VPERMPD, M_VPBLENDD, M_VPSLLVD, M_VPSLLVQ, M_VPSRLVD, M_VPSRLVQ, + M_VPSRAVD, M_VPMASKMOVD, M_VPMASKMOVQ, M_VGATHERDPS, M_VGATHERDPD, M_VGATHERQPS, M_VGATHERQPD, M_VPGATHERDD, M_VPGATHERDQ, M_VPGATHERQD, M_VPGATHERQQ, M_VFMADD132PS, M_VFMADD213PS, M_VFMADD231PS, M_VFMADD132PD, M_VFMADD213PD, + M_VFMADD231PD, M_VFMADD132SS, M_VFMADD213SS, M_VFMADD231SS, M_VFMADD132SD, M_VFMADD213SD, M_VFMADD231SD, M_VFMSUB132PS, M_VFMSUB213PS, M_VFMSUB231PS, M_VFMSUB132PD, M_VFMSUB213PD, M_VFMSUB231PD, M_VFMSUB132SS, M_VFMSUB213SS, M_VFMSUB231SS, + M_VFMSUB132SD, M_VFMSUB213SD, M_VFMSUB231SD, M_VFNMADD132PS, M_VFNMADD213PS, M_VFNMADD231PS, M_VFNMADD132PD, M_VFNMADD213PD, M_VFNMADD231PD, M_VFNMADD132SS, M_VFNMADD213SS, M_VFNMADD231SS, M_VFNMADD132SD, M_VFNMADD213SD, M_VFNMADD231SD, M_VFNMSUB132PS, + M_VFNMSUB213PS, M_VFNMSUB231PS, M_VFNMSUB132PD, M_VFNMSUB213PD, M_VFNMSUB231PD, M_VFNMSUB132SS, M_VFNMSUB213SS, M_VFNMSUB231SS, M_VFNMSUB132SD, M_VFNMSUB213SD, M_VFNMSUB231SD, M_VFMADDSUB132PS, M_VFMADDSUB213PS, M_VFMADDSUB231PS, M_VFMADDSUB132PD, M_VFMADDSUB213PD, + M_VFMADDSUB231PD, M_VFMSUBADD132PS, M_VFMSUBADD213PS, M_VFMSUBADD231PS, M_VFMSUBADD132PD, M_VFMSUBADD213PD, M_VFMSUBADD231PD, M_VCVTPH2PS, M_VCVTPS2PH, M_VMOVDQA32, M_VMOVDQA64, M_VMOVDQU8, M_VMOVDQU16, M_VMOVDQU32, M_VMOVDQU64, M_VPBLENDMB, + M_VPBLENDMW, M_VPBLENDMD, M_VPBLENDMQ, M_VBLENDMPS, M_VBLENDMPD, M_VPCMPB, M_VPCMPUB, M_VPCMPW, M_VPCMPUW, M_VPCMPD, M_VPCMPUD, M_VPCMPQ, M_VPCMPUQ, M_VPTESTMB, M_VPTESTMW, M_VPTESTMD, + M_VPTESTMQ, M_VPTESTNMB, M_VPTESTNMW, M_VPTESTNMD, M_VPTESTNMQ, M_VPCOMPRESSD, M_VPCOMPRESSQ, M_VCOMPRESSPS, M_VCOMPRESSPD, M_VPEXPANDD, M_VPEXPANDQ, M_VEXPANDPS, M_VEXPANDPD, M_VPCONFLICTD, M_VPCONFLICTQ, M_VPLZCNTD, + M_VPLZCNTQ, M_VPERMI2B, M_VPERMI2W, M_VPERMI2D, M_VPERMI2Q, M_VPERMI2PS, M_VPERMI2PD, M_VPERMT2B, M_VPERMT2W, M_VPERMT2D, M_VPERMT2Q, M_VPERMT2PS, M_VPERMT2PD, M_VPERMB, M_VPERMW, M_VPMOVB2M, + M_VPMOVW2M, M_VPMOVD2M, M_VPMOVQ2M, M_VPMOVM2B, M_VPMOVM2W, M_VPMOVM2D, M_VPMOVM2Q, M_VPMOVQB, M_VPMOVSQB, M_VPMOVUSQB, M_VPMOVQW, M_VPMOVSQW, M_VPMOVUSQW, M_VPMOVQD, M_VPMOVSQD, M_VPMOVUSQD, + M_VPMOVDB, M_VPMOVSDB, M_VPMOVUSDB, M_VPMOVDW, M_VPMOVSDW, M_VPMOVUSDW, M_VPMOVWB, M_VPMOVSWB, M_VPMOVUSWB, M_VPROLD, M_VPROLQ, M_VPROLVD, M_VPROLVQ, M_VPRORD, M_VPRORQ, M_VPRORVD, + M_VPRORVQ, M_VPSCATTERDD, M_VPSCATTERDQ, M_VPSCATTERQD, M_VPSCATTERQQ, M_VSCATTERDPS, M_VSCATTERDPD, M_VSCATTERQPS, M_VSCATTERQPD, M_VPSRAVQ, M_VPSRAVW, M_VPSLLVW, M_VPSRLVW, M_VRANGEPS, M_VRANGEPD, M_VRANGESS, + M_VRANGESD, M_VREDUCEPS, M_VREDUCEPD, M_VREDUCESS, M_VREDUCESD, M_VRNDSCALEPS, M_VRNDSCALEPD, M_VRNDSCALESS, M_VRNDSCALESD, M_VRSQRT14PS, M_VRSQRT14PD, M_VRSQRT14SS, M_VRSQRT14SD, M_VRCP14PS, M_VRCP14PD, M_VRCP14SS, + M_VRCP14SD, M_VSCALEFPS, M_VSCALEFPD, M_VSCALEFSS, M_VSCALEFSD, M_VGETEXPPS, M_VGETEXPPD, M_VGETEXPSS, M_VGETEXPSD, M_VGETMANTPS, M_VGETMANTPD, M_VGETMANTSS, M_VGETMANTSD, M_VFIXUPIMMPS, M_VFIXUPIMMPD, M_VFIXUPIMMSS, + M_VFIXUPIMMSD, M_VFPCLASSPS, M_VFPCLASSPD, M_VFPCLASSSS, M_VFPCLASSSD, M_VALIGNQ, M_VALIGND, M_VDBPSADBW, M_VPTERNLOGD, M_VPTERNLOGQ, M_VPMULTISHIFTQB, M_KADDW, M_KADDB, M_KADDQ, M_KADDD, M_KANDW, + M_KANDB, M_KANDQ, M_KANDD, M_KANDNW, M_KANDNB, M_KANDNQ, M_KANDND, M_KMOVW, M_KMOVB, M_KMOVQ, M_KMOVD, M_KNOTW, M_KNOTB, M_KNOTQ, M_KNOTD, M_KORW, + M_KORB, M_KORQ, M_KORD, M_KORTESTW, M_KORTESTB, M_KORTESTQ, M_KORTESTD, M_KSHIFTLW, M_KSHIFTLB, M_KSHIFTLQ, M_KSHIFTLD, M_KSHIFTRW, M_KSHIFTRB, M_KSHIFTRQ, M_KSHIFTRD, M_KTESTW, + M_KTESTB, M_KTESTQ, M_KTESTD, M_KUNPCKBW, M_KUNPCKWD, M_KUNPCKDQ, M_KXNORW, M_KXNORB, M_KXNORQ, M_KXNORD, M_KXORW, M_KXORB, M_KXORQ, M_KXORD, M_FADD, M_FADDP, + M_FIADD, M_FSUB, M_FSUBP, M_FISUB, M_FSUBR, M_FSUBRP, M_FISUBR, M_FMUL, M_FMULP, M_FIMUL, M_FDIV, M_FDIVP, M_FIDIV, M_FDIVR, M_FDIVRP, M_FIDIVR, + M_FSQRT, M_FABS, M_FCHS, M_FPREM, M_FPREM1, M_FRNDINT, M_FSCALE, M_FXTRACT, M_FXAM, M_FLD, M_FILD, M_FBLD, M_FST, M_FSTP, M_FIST, M_FISTP, + M_FISTTP, M_FBSTP, M_FXCH, M_FCMOVB, M_FCMOVE, M_FCMOVBE, M_FCMOVU, M_FCMOVNB, M_FCMOVNE, M_FCMOVNBE, M_FCMOVNU, M_FCOM, M_FCOMP, M_FCOMPP, M_FICOM, M_FICOMP, + M_FCOMI, M_FCOMIP, M_FUCOMI, M_FUCOMIP, M_FUCOM, M_FUCOMP, M_FUCOMPP, M_FTST, M_FLDZ, M_FLD1, M_FLDPI, M_FLDL2T, M_FLDL2E, M_FLDLG2, M_FLDLN2, M_FSIN, + M_FCOS, M_FSINCOS, M_FPTAN, M_FPATAN, M_F2XM1, M_FYL2X, M_FYL2XP1, M_FINIT, M_FNINIT, M_FINCSTP, M_FDECSTP, M_FFREE, M_FFREEP, M_FNOP, M_FWAIT, M_FCLEX, + M_FNCLEX, M_FSTCW, M_FNSTCW, M_FLDCW, M_FSTENV, M_FNSTENV, M_FLDENV, M_FSAVE, M_FNSAVE, M_FRSTOR, M_FSTSW, M_FNSTSW, M_FXSAVE, M_FXSAVE64, M_FXRSTOR, M_FXRSTOR64, + M_LGDT, M_SGDT, M_LIDT, M_SIDT, M_LLDT, M_SLDT, M_LTR, M_STR, M_LMSW, M_SMSW, M_CLTS, M_ARPL, M_LAR, M_LSL, M_VERR, M_VERW, + M_INVD, M_WBINVD, M_INVLPG, M_INVPCID, M_RSM, M_RDMSR, M_WRMSR, M_VMCALL, M_VMLAUNCH, M_VMRESUME, M_VMXOFF, M_VMXON, M_VMCLEAR, M_VMPTRLD, M_VMPTRST, M_VMREAD, + M_VMWRITE, M_VMFUNC, M_INVEPT, M_INVVPID, M_ENCLS, M_ENCLU, M_ENCLV, M_RDPKRU, M_WRPKRU, M_INCSSPD, M_INCSSPQ, M_RDSSPD, M_RDSSPQ, M_SAVEPREVSSP, M_RSTORSSP, M_WRSSD, + M_WRSSQ, M_WRUSSD, M_WRUSSQ, M_SETSSBSY, M_CLRSSBSY, M_ENDBR64, M_ENDBR32, M_XSAVE, M_XSAVE64, M_XRSTOR, M_XRSTOR64, M_XSAVEOPT, M_XSAVEOPT64, M_XSAVEC, M_XSAVEC64, M_XSAVES, + M_XSAVES64, M_XRSTORS, M_XRSTORS64, M_PREFETCHT0, M_PREFETCHT1, M_PREFETCHT2, M_PREFETCHNTA, M_PREFETCHW, M_CLFLUSHOPT, M_CLWB, M_CLDEMOTE, M_BSWAP, M_CMPXCHG, M_CMPXCHG8B, M_CMPXCHG16B, M_XADD, + M_BOUND, M_ENTER, M_LEAVE, M_XLAT, M_XLATB, M_MOVBE, M_RDRAND, M_RDSEED, M_SWAPGS, M_MONITOR, M_MWAIT, M_CLAC, M_STAC, M_RDFSBASE, M_RDGSBASE, M_WRFSBASE, + M_WRGSBASE, M_PTWRITE, M_RDPID, M_WBNOINVD, M_SERIALIZE, M_PREFETCH, M_TPAUSE, M_UMONITOR, M_UMWAIT, M_MOVDIRI, M_MOVDIR64B, M_ENQCMD, M_ENQCMDS, M_AADD, M_AAND, M_AOR, + M_AXOR, M_XEND, M_XTEST, M_VMRUN, M_VMMCALL, M_VMLOAD, M_VMSAVE, M_STGI, M_CLGI, M_SKINIT, M_INVLPGA, M_INVLPGB, M_TLBSYNC, M_PVALIDATE, M_RMPADJUST, M_RMPUPDATE, + M_PSMASH, M_CLZERO, M_MONITORX, M_MWAITX, M_RDPRU, M_MCOMMIT, + + MNEMONIC_COUNT + }; + enum Prefix : u8 { + PREFIX_INVALID, PREFIX_ES, PREFIX_CS, PREFIX_SS, PREFIX_DS, PREFIX_REX, PREFIX_EVEX, PREFIX_FS, PREFIX_GS, PREFIX_VEX, PREFIX_LOCK, PREFIX_REPNE, PREFIX_REP, + + PREFIX_COUNT + }; + static String const mnemonic_strings[MNEMONIC_COUNT]; + static String const prefix_strings[PREFIX_COUNT]; + + enum PrefixKind : u8 { PrefixKind_None, PrefixKind_Lock, PrefixKind_Rep, PrefixKind_Repne, PrefixKind_Other }; + + + static const u16 REG_CLASS_NONE = 0x000; + static const u16 REG_CLASS_GPR64 = 0x100; + static const u16 REG_CLASS_GPR32 = 0x200; + static const u16 REG_CLASS_GPR16 = 0x300; + static const u16 REG_CLASS_GPR8 = 0x400; + static const u16 REG_CLASS_GPR8H = 0x500; // AH, CH, DH, BH - legacy high byte regs + static const u16 REG_CLASS_XMM = 0x600; + static const u16 REG_CLASS_YMM = 0x700; + static const u16 REG_CLASS_ZMM = 0x800; + static const u16 REG_CLASS_K = 0x900; // opmask + static const u16 REG_CLASS_SEG = 0xA00; // segment + static const u16 REG_CLASS_CR = 0xB00; // control + static const u16 REG_CLASS_DR = 0xC00; // debug + static const u16 REG_CLASS_BND = 0xD00; // bound + static const u16 REG_CLASS_MM = 0xE00; // MMX + static const u16 REG_CLASS_ST = 0xF00; // x87 FPU + + enum Register : u16 { + REG_INVALID, REG_RAX, REG_RCX, REG_RDX, REG_RBX, REG_RSP, REG_RBP, REG_RSI, REG_RDI, REG_R8, REG_R9, REG_R10, REG_R11, REG_R12, REG_R13, REG_R14, + REG_R15, REG_EAX, REG_ECX, REG_EDX, REG_EBX, REG_ESP, REG_EBP, REG_ESI, REG_EDI, REG_R8D, REG_R9D, REG_R10D, REG_R11D, REG_R12D, REG_R13D, REG_R14D, + REG_R15D, REG_AX, REG_CX, REG_DX, REG_BX, REG_SP, REG_BP, REG_SI, REG_DI, REG_R8W, REG_R9W, REG_R10W, REG_R11W, REG_R12W, REG_R13W, REG_R14W, + REG_R15W, REG_AL, REG_CL, REG_DL, REG_BL, REG_SPL, REG_BPL, REG_SIL, REG_DIL, REG_R8B, REG_R9B, REG_R10B, REG_R11B, REG_R12B, REG_R13B, REG_R14B, + REG_R15B, REG_AH, REG_CH, REG_DH, REG_BH, REG_XMM0, REG_XMM1, REG_XMM2, REG_XMM3, REG_XMM4, REG_XMM5, REG_XMM6, REG_XMM7, REG_XMM8, REG_XMM9, REG_XMM10, + REG_XMM11, REG_XMM12, REG_XMM13, REG_XMM14, REG_XMM15, REG_XMM16, REG_XMM17, REG_XMM18, REG_XMM19, REG_XMM20, REG_XMM21, REG_XMM22, REG_XMM23, REG_XMM24, REG_XMM25, REG_XMM26, + REG_XMM27, REG_XMM28, REG_XMM29, REG_XMM30, REG_XMM31, REG_YMM0, REG_YMM1, REG_YMM2, REG_YMM3, REG_YMM4, REG_YMM5, REG_YMM6, REG_YMM7, REG_YMM8, REG_YMM9, REG_YMM10, + REG_YMM11, REG_YMM12, REG_YMM13, REG_YMM14, REG_YMM15, REG_YMM16, REG_YMM17, REG_YMM18, REG_YMM19, REG_YMM20, REG_YMM21, REG_YMM22, REG_YMM23, REG_YMM24, REG_YMM25, REG_YMM26, + REG_YMM27, REG_YMM28, REG_YMM29, REG_YMM30, REG_YMM31, REG_ZMM0, REG_ZMM1, REG_ZMM2, REG_ZMM3, REG_ZMM4, REG_ZMM5, REG_ZMM6, REG_ZMM7, REG_ZMM8, REG_ZMM9, REG_ZMM10, + REG_ZMM11, REG_ZMM12, REG_ZMM13, REG_ZMM14, REG_ZMM15, REG_ZMM16, REG_ZMM17, REG_ZMM18, REG_ZMM19, REG_ZMM20, REG_ZMM21, REG_ZMM22, REG_ZMM23, REG_ZMM24, REG_ZMM25, REG_ZMM26, + REG_ZMM27, REG_ZMM28, REG_ZMM29, REG_ZMM30, REG_ZMM31, REG_K0, REG_K1, REG_K2, REG_K3, REG_K4, REG_K5, REG_K6, REG_K7, REG_ES, REG_CS, REG_SS, + REG_DS, REG_FS, REG_GS, REG_CR0, REG_CR2, REG_CR3, REG_CR4, REG_CR8, REG_DR0, REG_DR1, REG_DR2, REG_DR3, REG_DR6, REG_DR7, REG_BND0, REG_BND1, + REG_BND2, REG_BND3, REG_MM0, REG_MM1, REG_MM2, REG_MM3, REG_MM4, REG_MM5, REG_MM6, REG_MM7, REG_ST0, REG_ST1, REG_ST2, REG_ST3, REG_ST4, REG_ST5, + REG_ST6, REG_ST7, REG_RIP, + REG_COUNT + }; + + enum ClobberFlags : u16 { + ClobberFlag_CF = 1<<0, + ClobberFlag_PF = 1<<1, + ClobberFlag_AF = 1<<2, + ClobberFlag_ZF = 1<<3, + ClobberFlag_SF = 1<<4, + ClobberFlag_OF = 1<<5, + ClobberFlag_DF = 1<<6, + ClobberFlag_IF = 1<<7, + ClobberFlag_TF = 1<<8, + }; + enum SideEffectFlags : u16 { + SideEffectFlag_FENCE = 1<<0, // memory-ordering barrier (LFENCE/SFENCE/MFENCE, LOCK) + SideEffectFlag_SERIALIZING = 1<<1, // architecturally serializing (drains pipeline) + SideEffectFlag_HINT = 1<<2, // microarchitectural hint, architecturally inert (PAUSE/PREFETCH*/ENDBR) + SideEffectFlag_CACHE = 1<<3, // cache-line maintenance with coherence effects (CLFLUSH/CLWB) + SideEffectFlag_TRAP = 1<<4, // may deliberately raise a fault (#UD/#BR): UD0-2, BOUND + SideEffectFlag_INTERRUPT = 1<<5, // software interrupt / syscall gate + SideEffectFlag_HALT = 1<<6, // stops execution until an external event + SideEffectFlag_PRIVILEGED = 1<<7, // requires CPL0 / reads-writes supervisor machine state + SideEffectFlag_CONTROL = 1<<8, // alters control flow (writes RIP): branches, calls, returns + SideEffectFlag_CET = 1<<9, // control-flow-enforcement: landing pads, shadow-stack ops + }; + enum ClobberRegs : u16 { + ClobberReg_RAX = 1<<0, + ClobberReg_RBX = 1<<1, + ClobberReg_RCX = 1<<2, + ClobberReg_RDX = 1<<3, + ClobberReg_RSI = 1<<4, + ClobberReg_RDI = 1<<5, + ClobberReg_RSP = 1<<6, + ClobberReg_RBP = 1<<7, + ClobberReg_R11 = 1<<8, + ClobberReg_XMM0 = 1<<9, + ClobberReg_VECTOR = 1<<10, + ClobberReg_MXCSR = 1<<11, + ClobberReg_FPU_ST = 1<<12, + ClobberReg_FPU_SW = 1<<13, + }; + enum OperandSet : u8 { + OperandSet_OP0 = 1<<0, + OperandSet_OP1 = 1<<1, + OperandSet_OP2 = 1<<2, + OperandSet_OP3 = 1<<3, + }; + + u16 clobber_bit_for_reg_name(String const &pin) { + static const struct { String name; u16 bit; } table[] = { + {str_lit("rax"), ClobberReg_RAX}, {str_lit("eax"), ClobberReg_RAX}, {str_lit("ax"), ClobberReg_RAX}, {str_lit("al"), ClobberReg_RAX}, {str_lit("ah"), ClobberReg_RAX}, + {str_lit("rbx"), ClobberReg_RBX}, {str_lit("ebx"), ClobberReg_RBX}, {str_lit("bx"), ClobberReg_RBX}, {str_lit("bl"), ClobberReg_RBX}, {str_lit("bh"), ClobberReg_RBX}, + {str_lit("rcx"), ClobberReg_RCX}, {str_lit("ecx"), ClobberReg_RCX}, {str_lit("cx"), ClobberReg_RCX}, {str_lit("cl"), ClobberReg_RCX}, {str_lit("ch"), ClobberReg_RCX}, + {str_lit("rdx"), ClobberReg_RDX}, {str_lit("edx"), ClobberReg_RDX}, {str_lit("dx"), ClobberReg_RDX}, {str_lit("dl"), ClobberReg_RDX}, {str_lit("dh"), ClobberReg_RDX}, + {str_lit("rsi"), ClobberReg_RSI}, {str_lit("esi"), ClobberReg_RSI}, {str_lit("si"), ClobberReg_RSI}, {str_lit("sil"), ClobberReg_RSI}, + {str_lit("rdi"), ClobberReg_RDI}, {str_lit("edi"), ClobberReg_RDI}, {str_lit("di"), ClobberReg_RDI}, {str_lit("dil"), ClobberReg_RDI}, + {str_lit("rsp"), ClobberReg_RSP}, {str_lit("esp"), ClobberReg_RSP}, + {str_lit("rbp"), ClobberReg_RBP}, {str_lit("ebp"), ClobberReg_RBP}, + {str_lit("r11"), ClobberReg_R11}, {str_lit("r11d"), ClobberReg_R11}, + {str_lit("r11w"), ClobberReg_R11}, {str_lit("r11b"), ClobberReg_R11}, + {str_lit("xmm0"), ClobberReg_XMM0}, + }; + for (auto const &t : table) { + if (pin == t.name) { + return t.bit; + } + } + return 0; + } + + char const *clobber_reg_bit_name(u16 bit) { + switch (bit) { + case ClobberReg_RAX: return "rax"; + case ClobberReg_RBX: return "rbx"; + case ClobberReg_RCX: return "rcx"; + case ClobberReg_RDX: return "rdx"; + case ClobberReg_RSI: return "rsi"; + case ClobberReg_RDI: return "rdi"; + case ClobberReg_RSP: return "rsp"; + case ClobberReg_RBP: return "rbp"; + case ClobberReg_R11: return "r11"; + case ClobberReg_XMM0: return "xmm0"; + } + return ""; + } + + i32 flag_bit_from_name(String const &name, i32 *width_) { + static const struct {String name; i32 bit; } table[] = { + {str_lit("c"), 0}, // Carry + {str_lit("p"), 2}, // Parity + {str_lit("a"), 4}, // Auxiliary Carry + {str_lit("z"), 6}, // Zero + {str_lit("s"), 7}, // Sign + {str_lit("t"), 8}, // Trap + {str_lit("i"), 9}, // Interrupt Enable + {str_lit("d"), 10}, // Direction + {str_lit("o"), 11}, // Overflow + {str_lit("iopl"),12}, // I/O Privilege Level (2-bit field: bits 12-13, low bit) + {str_lit("nt"), 14}, // Nested Task + {str_lit("r"), 16}, // Resume + {str_lit("vm"), 17}, // Virtual-8086 Mode + {str_lit("ac"), 18}, // Alignment Check / Access Control + {str_lit("vi"), 19}, // Virtual Interrupt Flag + {str_lit("vip"), 20}, // Virtual Interrupt Pending + {str_lit("id"), 21}, // Identification + }; + + for (auto const &t : table) { + if (name == t.name) { + if (width_) { + if (t.name == "iopl") { + *width_ = 2; + } else { + *width_ = 1; + } + } + return t.bit; + } + } + return -1; + } + + struct Clobber { + OperandSet written; + OperandSet read; + ClobberRegs implicit_wr; + ClobberRegs implicit_rd; + ClobberFlags flags_wr; + ClobberFlags flags_undef; + ClobberFlags flags_rd; + bool writes_mem; + bool reads_mem; + SideEffectFlags side_effects; + + bool implies_clobber_flags() const { + u16 const FLAGS_MASK = ClobberFlag_CF|ClobberFlag_PF|ClobberFlag_AF| + ClobberFlag_ZF|ClobberFlag_SF|ClobberFlag_OF; + return ((flags_wr | flags_undef) & FLAGS_MASK) != 0; + } + bool implies_clobber_memory() const { + return writes_mem || reads_mem || + (side_effects & (SideEffectFlag_FENCE | + SideEffectFlag_CACHE | + SideEffectFlag_SERIALIZING)) != 0; + } + bool implies_side_effects() const { + u16 const VOLATILE_SE = + SideEffectFlag_FENCE | + SideEffectFlag_SERIALIZING | + SideEffectFlag_CACHE | + SideEffectFlag_TRAP | + SideEffectFlag_INTERRUPT | + SideEffectFlag_HALT | + SideEffectFlag_PRIVILEGED | + SideEffectFlag_CONTROL | + SideEffectFlag_CET; + // NOTE: SideEffectFlag_HINT deliberately excluded — inert, may be DCE'd. + return ((side_effects & VOLATILE_SE) != 0); + } + }; + static u16 const register_codes [REG_COUNT]; + static String const register_strings[REG_COUNT]; + + + enum OperandType : u8 { + OP_NONE, + OP_R8, + OP_R16, + OP_R32, + OP_R64, + OP_RM8, + OP_RM16, + OP_RM32, + OP_RM64, + OP_M, + OP_M8, + OP_M16, + OP_M32, + OP_M64, + OP_M80, + OP_M128, + OP_M256, + OP_M512, + OP_IMM8, + OP_IMM16, + OP_IMM32, + OP_IMM64, + OP_IMM8SX, + OP_REL8, + OP_REL32, + OP_AL_IMPL, + OP_AX_IMPL, + OP_EAX_IMPL, + OP_RAX_IMPL, + OP_CL_IMPL, + OP_DX_IMPL, + OP_ONE_IMPL, + OP_SREG, + OP_CR, + OP_DR, + OP_XMM, + OP_YMM, + OP_ZMM, + OP_XMM_M32, + OP_XMM_M64, + OP_XMM_M128, + OP_YMM_M256, + OP_ZMM_M512, + OP_MM, + OP_MM_M64, + OP_ST0_IMPL, + OP_STI, + OP_XMM0_IMPL, + OP_K, + OP_K_M8, + OP_K_M16, + OP_K_M32, + OP_K_M64, + OP_MOFFS8, + OP_MOFFS16, + OP_MOFFS32, + OP_MOFFS64, + OP_PTR16_16, + OP_PTR16_32, + OP_PTR16_64, + OP_M16_16, + OP_M16_32, + OP_M16_64, + }; + + + enum OperandEncoding : u8 { + ENC_NONE, + ENC_MR, + ENC_REG, + ENC_VVVV, + ENC_OP_R, + ENC_IB, + ENC_IW, + ENC_ID, + ENC_IQ, + ENC_IMPL, + ENC_IS4, + ENC_AAA, + }; + + typedef u32 EncodingFlags; // cannot use a C++ bit field to due lack of portability + + #pragma pack(push, 1) + struct Encoding { + Mnemonic mnemonic; + OperandType ops[4]; + OperandEncoding enc[4]; + u8 opcode; + u8 ext; + EncodingFlags flags; + + bool has_implicit () const { return ((flags>>21u)&1) != 0; } + u8 explicit_count() const { return cast(u8)((flags>>18u)&((1u<<3)-1)); } + u8 op_count () const { return cast(u8)((flags>>22u)&((1u<<3)-1)); } + bool lock_ok () const { return ((flags>>14u)&1) != 0; } + bool rep_ok () const { return ((flags>>15u)&1) != 0; } + }; + #pragma pack(pop) + GB_STATIC_ASSERT(gb_size_of(Encoding) == 16); + + + // Companion run index: ENCODE_RUNS[mnemonic] -> contiguous run in ENCODE_FORMS. + struct EncodeRun { + u32 start; // start index in ENCODE_FORMS + u32 count; // number of forms for this mnemonic + }; + + + static EncodeRun const raw_encode_runs [1238]; + static u8 const raw_encode_forms [39216]; + static u8 const raw_clobber_forms[39216]; + + StringMap mnemonic_map; + StringMap prefix_map; + StringMap register_map; + + bool init() { + string_map_init(&mnemonic_map, MNEMONIC_COUNT*2); + for (u16 m = M_INVALID+1; m < MNEMONIC_COUNT; m++) { + string_map_set(&mnemonic_map, mnemonic_strings[m], cast(Mnemonic)m); + } + string_map_init(&prefix_map, PREFIX_COUNT*2); + for (u8 r = PREFIX_INVALID+1; r < PREFIX_COUNT; r++) { + string_map_set(&prefix_map, prefix_strings[r], cast(Prefix)r); + } + string_map_init(®ister_map, REG_COUNT*2); + for (u16 r = REG_INVALID+1; r < REG_COUNT; r++) { + string_map_set(®ister_map, register_strings[r], cast(Register)r); + } + return true; + } + + Mnemonic mnemonic_lookup(String const &name) { + Mnemonic *found = string_map_get(&mnemonic_map, name); + return found ? *found : M_INVALID; + } + Prefix prefix_lookup(String const &name) { + Prefix *found = string_map_get(&prefix_map, name); + return found ? *found : PREFIX_INVALID; + } + Register register_lookup(String const &name) { + Register *found = string_map_get(®ister_map, name); + return found ? *found : REG_INVALID; + } + Slice encoding_forms(/*Mnemonic*/ u16 m) const { + EncodeRun r = raw_encode_runs[m]; + Encoding *ENCODE_FORMS = cast(Encoding *)raw_encode_forms; + return Slice{ENCODE_FORMS+r.start, r.count}; + } + Slice clobber_forms(/*Mnemonic*/ u16 m) const { + EncodeRun r = raw_encode_runs[m]; + Clobber *CLOBBER_FORMS = cast(Clobber *)raw_clobber_forms; + return Slice{CLOBBER_FORMS+r.start, r.count}; + } + u16 reg_class(/*Register*/ u16 r) const { + return 0xFF00 & r; + } + // size in bits for register + u16 reg_size(Register r) const { + switch (reg_class(register_codes[r])) { + case REG_CLASS_GPR64: return 64; + case REG_CLASS_GPR32: return 32; + case REG_CLASS_GPR16: return 16; + case REG_CLASS_GPR8: return 8; + case REG_CLASS_GPR8H: return 8; + case REG_CLASS_XMM: return 128; + case REG_CLASS_YMM: return 256; + case REG_CLASS_ZMM: return 512; + case REG_CLASS_K: return 64; + case REG_CLASS_MM: return 64; + case REG_CLASS_ST: return 80; + case REG_CLASS_SEG: return 16; + case REG_CLASS_CR: return 64; + case REG_CLASS_DR: return 64; + case REG_CLASS_BND: return 128; + } + return 0; + } + + AsmOperandKind kind_from_operand_type(OperandType type) const { + switch (type) { + case OP_R8: case OP_R16: case OP_R32: case OP_R64: + case OP_SREG: case OP_CR: case OP_DR: + case OP_XMM: case OP_YMM: case OP_ZMM: + case OP_MM: case OP_K: case OP_STI: + case OP_AL_IMPL: case OP_AX_IMPL: case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + case OP_ST0_IMPL: case OP_XMM0_IMPL: + return AsmOperand_Register; + case OP_RM8: case OP_RM16: case OP_RM32: case OP_RM64: + case OP_XMM_M32: case OP_XMM_M64: case OP_XMM_M128: + case OP_YMM_M256: case OP_ZMM_M512: + case OP_MM_M64: + case OP_K_M8: case OP_K_M16: case OP_K_M32: case OP_K_M64: + return AsmOperand_Register_Or_Memory; + case OP_M: case OP_M8: case OP_M16: case OP_M32: case OP_M64: + case OP_M80: case OP_M128: case OP_M256: case OP_M512: + case OP_MOFFS8: case OP_MOFFS16: case OP_MOFFS32: case OP_MOFFS64: + case OP_M16_16: case OP_M16_32: case OP_M16_64: + return AsmOperand_Memory; + case OP_IMM8: case OP_IMM16: case OP_IMM32: case OP_IMM64: + case OP_IMM8SX: + case OP_ONE_IMPL: + case OP_PTR16_16: case OP_PTR16_32: case OP_PTR16_64: + return AsmOperand_Immediate; + case OP_REL8: case OP_REL32: + return AsmOperand_Label; + case OP_NONE: + default: + return AsmOperand_Invalid; + } + } + + AsmRegClass reg_class_from_operand_type(OperandType type) const { + switch (type) { + case OP_R8: case OP_R16: case OP_R32: case OP_R64: + case OP_RM8: case OP_RM16: case OP_RM32: case OP_RM64: + case OP_AL_IMPL: case OP_AX_IMPL: case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + return AsmRegClass_Integer; + + case OP_XMM: case OP_YMM: case OP_ZMM: + case OP_XMM_M32: case OP_XMM_M64: case OP_XMM_M128: + case OP_YMM_M256: case OP_ZMM_M512: + case OP_XMM0_IMPL: + return AsmRegClass_Vector; + + case OP_K: + case OP_K_M8: case OP_K_M16: case OP_K_M32: case OP_K_M64: + return AsmRegClass_Mask; + + case OP_STI: + case OP_ST0_IMPL: + return AsmRegClass_Float; + + case OP_MM: + case OP_MM_M64: + return AsmRegClass_Vector; + + case OP_SREG: case OP_CR: case OP_DR: + case OP_M: case OP_M8: case OP_M16: case OP_M32: case OP_M64: + case OP_M80: case OP_M128: case OP_M256: case OP_M512: + case OP_MOFFS8: case OP_MOFFS16: case OP_MOFFS32: case OP_MOFFS64: + case OP_M16_16: case OP_M16_32: case OP_M16_64: + case OP_IMM8: case OP_IMM16: case OP_IMM32: case OP_IMM64: + case OP_IMM8SX: + case OP_ONE_IMPL: + case OP_PTR16_16: case OP_PTR16_32: case OP_PTR16_64: + case OP_REL8: case OP_REL32: + case OP_NONE: + default: + return AsmRegClass_Unknown; + } + } + + bool operand_type_is_implicit(OperandType t) const { + switch (t) { + case OP_AL_IMPL: case OP_AX_IMPL: + case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + case OP_ONE_IMPL: + case OP_ST0_IMPL: case OP_XMM0_IMPL: + return true; + } + return false; + } + + AsmRegClass operand_type_reg_class(OperandType t) const { + switch (t) { + case OP_R8: case OP_R16: case OP_R32: case OP_R64: + case OP_RM8: case OP_RM16: case OP_RM32: case OP_RM64: + case OP_AL_IMPL: case OP_AX_IMPL: case OP_EAX_IMPL: case OP_RAX_IMPL: + case OP_CL_IMPL: case OP_DX_IMPL: + return AsmRegClass_Integer; + case OP_XMM: case OP_YMM: case OP_ZMM: + case OP_XMM_M32: case OP_XMM_M64: case OP_XMM_M128: + case OP_YMM_M256: case OP_ZMM_M512: + case OP_XMM0_IMPL: + return AsmRegClass_Vector; // xmm/ymm/zmm; float scalars also land here (see note) + case OP_K: + case OP_K_M8: case OP_K_M16: case OP_K_M32: case OP_K_M64: + return AsmRegClass_Mask; + } + return AsmRegClass_Unknown; // OP_M*, OP_IMM*, OP_REL*, OP_SREG/CR/DR/MM/STi, moffs, ptr, m16_16... : no GPR/XMM class constraint here + } + + u16 operand_type_bit_width(OperandType t) const { + switch (t) { + case OP_R8: case OP_RM8: case OP_M8: case OP_AL_IMPL: case OP_CL_IMPL: case OP_K_M8: return 8; + case OP_R16: case OP_RM16: case OP_M16: case OP_AX_IMPL: case OP_DX_IMPL: case OP_K_M16: return 16; + case OP_R32: case OP_RM32: case OP_M32: case OP_EAX_IMPL: case OP_XMM_M32: case OP_K_M32: return 32; + case OP_R64: case OP_RM64: case OP_M64: case OP_RAX_IMPL: case OP_XMM_M64: case OP_K_M64: case OP_MM: case OP_MM_M64: return 64; + case OP_M128: case OP_XMM: case OP_XMM_M128: case OP_XMM0_IMPL: return 128; + case OP_M256: case OP_YMM: case OP_YMM_M256: return 256; + case OP_M512: case OP_ZMM: case OP_ZMM_M512: return 512; + case OP_IMM8: return 8; + case OP_IMM16: return 16; + case OP_IMM32: return 32; + case OP_IMM64: return 64; + case OP_REL8: return 8; + case OP_REL32: return 32; + case OP_IMM8SX: return 8; + } + return 0; // OP_M (sizeless), OP_K (opmask width is data-dependent), OP_ONE_IMPL, moffs, ptr, sreg/cr/dr, etc. + } + + int form_explicit_slot(Encoding const &form, int explicit_index) const { + int seen = 0; + for (int j = 0; j < gb_count_of(form.ops); j++) { + auto t = form.ops[j]; + if (!t) { + break; + } + if (operand_type_is_implicit(t)) { + continue; + } + if (seen == explicit_index) { + return j; + } + seen += 1; + } + return -1; + } + + bool prefix_kind_okay(u8 prefix, Encoding const &form, bool *requires_memory_dest_) const { + PrefixKind kind = PrefixKind_None; + if (prefix != 0) { + switch (prefix) { + case PREFIX_LOCK: kind = PrefixKind_Lock; break; + case PREFIX_REP: kind = PrefixKind_Rep; break; + case PREFIX_REPNE: kind = PrefixKind_Repne; break; + default: kind = PrefixKind_Other; break; + } + } + switch (kind) { + case PrefixKind_Lock: + if (!form.lock_ok()) { + return false; + } + if (requires_memory_dest_) *requires_memory_dest_ = true; + return true; + case PrefixKind_Rep: + return form.rep_ok(); + case PrefixKind_Repne: + return form.rep_ok(); + case PrefixKind_Other: + case PrefixKind_None: + return true; + } + return true; + } +}; + + + +gb_global Asm_amd64 g_asm_amd64; + + + +String const Asm_amd64::mnemonic_strings[Asm_amd64::MNEMONIC_COUNT] { + str_lit(""), str_lit("mov"), str_lit("movabs"), str_lit("movzx"), str_lit("movsx"), str_lit("movsxd"), str_lit("xchg"), str_lit("push"), str_lit("pop"), str_lit("lea"), str_lit("add"), str_lit("adc"), str_lit("sub"), str_lit("sbb"), str_lit("mul"), str_lit("imul"), + str_lit("div"), str_lit("idiv"), str_lit("inc"), str_lit("dec"), str_lit("neg"), str_lit("cmp"), str_lit("and"), str_lit("or"), str_lit("xor"), str_lit("not"), str_lit("test"), str_lit("shl"), str_lit("shr"), str_lit("sar"), str_lit("rol"), str_lit("ror"), + str_lit("rcl"), str_lit("rcr"), str_lit("shld"), str_lit("shrd"), str_lit("bt"), str_lit("bts"), str_lit("btr"), str_lit("btc"), str_lit("bsf"), str_lit("bsr"), str_lit("popcnt"), str_lit("lzcnt"), str_lit("tzcnt"), str_lit("jmp"), str_lit("ja"), str_lit("jae"), + str_lit("jb"), str_lit("jbe"), str_lit("jc"), str_lit("je"), str_lit("jz"), str_lit("jg"), str_lit("jge"), str_lit("jl"), str_lit("jle"), str_lit("jna"), str_lit("jnae"), str_lit("jnb"), str_lit("jnbe"), str_lit("jnc"), str_lit("jne"), str_lit("jnz"), + str_lit("jng"), str_lit("jnge"), str_lit("jnl"), str_lit("jnle"), str_lit("jno"), str_lit("jnp"), str_lit("jns"), str_lit("jo"), str_lit("jp"), str_lit("jpe"), str_lit("jpo"), str_lit("js"), str_lit("jcxz"), str_lit("jecxz"), str_lit("jrcxz"), str_lit("loop"), + str_lit("loope"), str_lit("loopne"), str_lit("call"), str_lit("ret"), str_lit("iret"), str_lit("iretd"), str_lit("iretq"), str_lit("int"), str_lit("int3"), str_lit("into"), str_lit("syscall"), str_lit("sysret"), str_lit("sysenter"), str_lit("sysexit"), str_lit("seta"), str_lit("setae"), + str_lit("setb"), str_lit("setbe"), str_lit("setc"), str_lit("sete"), str_lit("setg"), str_lit("setge"), str_lit("setl"), str_lit("setle"), str_lit("setna"), str_lit("setnae"), str_lit("setnb"), str_lit("setnbe"), str_lit("setnc"), str_lit("setne"), str_lit("setng"), str_lit("setnge"), + str_lit("setnl"), str_lit("setnle"), str_lit("setno"), str_lit("setnp"), str_lit("setns"), str_lit("setnz"), str_lit("seto"), str_lit("setp"), str_lit("setpe"), str_lit("setpo"), str_lit("sets"), str_lit("setz"), str_lit("cmova"), str_lit("cmovae"), str_lit("cmovb"), str_lit("cmovbe"), + str_lit("cmovc"), str_lit("cmove"), str_lit("cmovg"), str_lit("cmovge"), str_lit("cmovl"), str_lit("cmovle"), str_lit("cmovna"), str_lit("cmovnae"), str_lit("cmovnb"), str_lit("cmovnbe"), str_lit("cmovnc"), str_lit("cmovne"), str_lit("cmovng"), str_lit("cmovnge"), str_lit("cmovnl"), str_lit("cmovnle"), + str_lit("cmovno"), str_lit("cmovnp"), str_lit("cmovns"), str_lit("cmovnz"), str_lit("cmovo"), str_lit("cmovp"), str_lit("cmovpe"), str_lit("cmovpo"), str_lit("cmovs"), str_lit("cmovz"), str_lit("movs"), str_lit("movsb"), str_lit("movsw"), str_lit("movsd"), str_lit("movsq"), str_lit("cmps"), + str_lit("cmpsb"), str_lit("cmpsw"), str_lit("cmpsd"), str_lit("cmpsq"), str_lit("scas"), str_lit("scasb"), str_lit("scasw"), str_lit("scasd"), str_lit("scasq"), str_lit("lods"), str_lit("lodsb"), str_lit("lodsw"), str_lit("lodsd"), str_lit("lodsq"), str_lit("stos"), str_lit("stosb"), + str_lit("stosw"), str_lit("stosd"), str_lit("stosq"), str_lit("clc"), str_lit("stc"), str_lit("cmc"), str_lit("cld"), str_lit("std"), str_lit("cli"), str_lit("sti"), str_lit("lahf"), str_lit("sahf"), str_lit("pushf"), str_lit("pushfd"), str_lit("pushfq"), str_lit("popf"), + str_lit("popfd"), str_lit("popfq"), str_lit("nop"), str_lit("hlt"), str_lit("wait"), str_lit("lock"), str_lit("ud0"), str_lit("ud1"), str_lit("ud2"), str_lit("cpuid"), str_lit("rdtsc"), str_lit("rdtscp"), str_lit("rdpmc"), str_lit("xgetbv"), str_lit("xsetbv"), str_lit("cbw"), + str_lit("cwde"), str_lit("cdqe"), str_lit("cwd"), str_lit("cdq"), str_lit("cqo"), str_lit("andn"), str_lit("bextr"), str_lit("blsi"), str_lit("blsmsk"), str_lit("blsr"), str_lit("bzhi"), str_lit("pdep"), str_lit("pext"), str_lit("rorx"), str_lit("sarx"), str_lit("shlx"), + str_lit("shrx"), str_lit("mulx"), str_lit("adcx"), str_lit("adox"), str_lit("movaps"), str_lit("movups"), str_lit("movapd"), str_lit("movupd"), str_lit("movss"), str_lit("movdqa"), str_lit("movdqu"), str_lit("movq"), str_lit("movd"), str_lit("movlps"), str_lit("movhps"), str_lit("movlpd"), + str_lit("movhpd"), str_lit("movlhps"), str_lit("movhlps"), str_lit("movmskps"), str_lit("movmskpd"), str_lit("movntps"), str_lit("movntpd"), str_lit("movntdq"), str_lit("movntdqa"), str_lit("addps"), str_lit("addpd"), str_lit("addss"), str_lit("addsd"), str_lit("subps"), str_lit("subpd"), str_lit("subss"), + str_lit("subsd"), str_lit("mulps"), str_lit("mulpd"), str_lit("mulss"), str_lit("mulsd"), str_lit("divps"), str_lit("divpd"), str_lit("divss"), str_lit("divsd"), str_lit("sqrtps"), str_lit("sqrtpd"), str_lit("sqrtss"), str_lit("sqrtsd"), str_lit("rcpps"), str_lit("rcpss"), str_lit("rsqrtps"), + str_lit("rsqrtss"), str_lit("maxps"), str_lit("maxpd"), str_lit("maxss"), str_lit("maxsd"), str_lit("minps"), str_lit("minpd"), str_lit("minss"), str_lit("minsd"), str_lit("andps"), str_lit("andpd"), str_lit("andnps"), str_lit("andnpd"), str_lit("orps"), str_lit("orpd"), str_lit("xorps"), + str_lit("xorpd"), str_lit("cmpps"), str_lit("cmppd"), str_lit("cmpss"), str_lit("comiss"), str_lit("comisd"), str_lit("ucomiss"), str_lit("ucomisd"), str_lit("shufps"), str_lit("shufpd"), str_lit("unpcklps"), str_lit("unpckhps"), str_lit("unpcklpd"), str_lit("unpckhpd"), str_lit("cvtps2pd"), str_lit("cvtpd2ps"), + str_lit("cvtss2sd"), str_lit("cvtsd2ss"), str_lit("cvtps2dq"), str_lit("cvtpd2dq"), str_lit("cvtdq2ps"), str_lit("cvtdq2pd"), str_lit("cvtss2si"), str_lit("cvtsd2si"), str_lit("cvtsi2ss"), str_lit("cvtsi2sd"), str_lit("cvttps2dq"), str_lit("cvttpd2dq"), str_lit("cvttss2si"), str_lit("cvttsd2si"), str_lit("paddb"), str_lit("paddw"), + str_lit("paddd"), str_lit("paddq"), str_lit("psubb"), str_lit("psubw"), str_lit("psubd"), str_lit("psubq"), str_lit("paddsb"), str_lit("paddsw"), str_lit("paddusb"), str_lit("paddusw"), str_lit("psubsb"), str_lit("psubsw"), str_lit("psubusb"), str_lit("psubusw"), str_lit("pmullw"), str_lit("pmulhw"), + str_lit("pmulhuw"), str_lit("pmuludq"), str_lit("pmaddwd"), str_lit("pand"), str_lit("pandn"), str_lit("por"), str_lit("pxor"), str_lit("psllw"), str_lit("pslld"), str_lit("psllq"), str_lit("psrlw"), str_lit("psrld"), str_lit("psrlq"), str_lit("psraw"), str_lit("psrad"), str_lit("pcmpeqb"), + str_lit("pcmpeqw"), str_lit("pcmpeqd"), str_lit("pcmpgtb"), str_lit("pcmpgtw"), str_lit("pcmpgtd"), str_lit("packsswb"), str_lit("packssdw"), str_lit("packuswb"), str_lit("punpcklbw"), str_lit("punpcklwd"), str_lit("punpckldq"), str_lit("punpcklqdq"), str_lit("punpckhbw"), str_lit("punpckhwd"), str_lit("punpckhdq"), str_lit("punpckhqdq"), + str_lit("pshufd"), str_lit("pshufhw"), str_lit("pshuflw"), str_lit("pshufw"), str_lit("pextrw"), str_lit("pinsrw"), str_lit("pmovmskb"), str_lit("pavgb"), str_lit("pavgw"), str_lit("pmaxub"), str_lit("pmaxsw"), str_lit("pminub"), str_lit("pminsw"), str_lit("psadbw"), str_lit("maskmovdqu"), str_lit("lfence"), + str_lit("sfence"), str_lit("mfence"), str_lit("pause"), str_lit("clflush"), str_lit("addsubps"), str_lit("addsubpd"), str_lit("haddps"), str_lit("haddpd"), str_lit("hsubps"), str_lit("hsubpd"), str_lit("movddup"), str_lit("movsldup"), str_lit("movshdup"), str_lit("lddqu"), str_lit("pshufb"), str_lit("phaddw"), + str_lit("phaddd"), str_lit("phaddsw"), str_lit("phsubw"), str_lit("phsubd"), str_lit("phsubsw"), str_lit("pmaddubsw"), str_lit("pmulhrsw"), str_lit("psignb"), str_lit("psignw"), str_lit("psignd"), str_lit("pabsb"), str_lit("pabsw"), str_lit("pabsd"), str_lit("palignr"), str_lit("blendps"), str_lit("blendpd"), + str_lit("blendvps"), str_lit("blendvpd"), str_lit("pblendw"), str_lit("pblendvb"), str_lit("dpps"), str_lit("dppd"), str_lit("extractps"), str_lit("insertps"), str_lit("mpsadbw"), str_lit("packusdw"), str_lit("pextrb"), str_lit("pextrd"), str_lit("pextrq"), str_lit("phminposuw"), str_lit("pinsrb"), str_lit("pinsrd"), + str_lit("pinsrq"), str_lit("pmaxsb"), str_lit("pmaxsd"), str_lit("pmaxuw"), str_lit("pmaxud"), str_lit("pminsb"), str_lit("pminsd"), str_lit("pminuw"), str_lit("pminud"), str_lit("pmovsxbw"), str_lit("pmovsxbd"), str_lit("pmovsxbq"), str_lit("pmovsxwd"), str_lit("pmovsxwq"), str_lit("pmovsxdq"), str_lit("pmovzxbw"), + str_lit("pmovzxbd"), str_lit("pmovzxbq"), str_lit("pmovzxwd"), str_lit("pmovzxwq"), str_lit("pmovzxdq"), str_lit("pmuldq"), str_lit("pmulld"), str_lit("ptest"), str_lit("roundps"), str_lit("roundpd"), str_lit("roundss"), str_lit("roundsd"), str_lit("pcmpeqq"), str_lit("crc32"), str_lit("pcmpestri"), str_lit("pcmpestrm"), + str_lit("pcmpistri"), str_lit("pcmpistrm"), str_lit("pcmpgtq"), str_lit("pclmulqdq"), str_lit("aesdec"), str_lit("aesdeclast"), str_lit("aesenc"), str_lit("aesenclast"), str_lit("aesimc"), str_lit("aeskeygenassist"), str_lit("sha1msg1"), str_lit("sha1msg2"), str_lit("sha1nexte"), str_lit("sha1rnds4"), str_lit("sha256msg1"), str_lit("sha256msg2"), + str_lit("sha256rnds2"), str_lit("vaddps"), str_lit("vaddpd"), str_lit("vaddss"), str_lit("vaddsd"), str_lit("vsubps"), str_lit("vsubpd"), str_lit("vsubss"), str_lit("vsubsd"), str_lit("vmulps"), str_lit("vmulpd"), str_lit("vmulss"), str_lit("vmulsd"), str_lit("vdivps"), str_lit("vdivpd"), str_lit("vdivss"), + str_lit("vdivsd"), str_lit("vsqrtps"), str_lit("vsqrtpd"), str_lit("vsqrtss"), str_lit("vsqrtsd"), str_lit("vrcpps"), str_lit("vrcpss"), str_lit("vrsqrtps"), str_lit("vrsqrtss"), str_lit("vmaxps"), str_lit("vmaxpd"), str_lit("vmaxss"), str_lit("vmaxsd"), str_lit("vminps"), str_lit("vminpd"), str_lit("vminss"), + str_lit("vminsd"), str_lit("vandps"), str_lit("vandpd"), str_lit("vandnps"), str_lit("vandnpd"), str_lit("vorps"), str_lit("vorpd"), str_lit("vxorps"), str_lit("vxorpd"), str_lit("vcmpps"), str_lit("vcmppd"), str_lit("vcmpss"), str_lit("vcmpsd"), str_lit("vcomiss"), str_lit("vcomisd"), str_lit("vucomiss"), + str_lit("vucomisd"), str_lit("vshufps"), str_lit("vshufpd"), str_lit("vunpcklps"), str_lit("vunpckhps"), str_lit("vunpcklpd"), str_lit("vunpckhpd"), str_lit("vblendps"), str_lit("vblendpd"), str_lit("vblendvps"), str_lit("vblendvpd"), str_lit("vdpps"), str_lit("vdppd"), str_lit("vroundps"), str_lit("vroundpd"), str_lit("vroundss"), + str_lit("vroundsd"), str_lit("vextractps"), str_lit("vinsertps"), str_lit("vmovaps"), str_lit("vmovups"), str_lit("vmovapd"), str_lit("vmovupd"), str_lit("vmovss"), str_lit("vmovsd"), str_lit("vmovdqa"), str_lit("vmovdqu"), str_lit("vmovq"), str_lit("vmovd"), str_lit("vmovlps"), str_lit("vmovhps"), str_lit("vmovlpd"), + str_lit("vmovhpd"), str_lit("vmovlhps"), str_lit("vmovhlps"), str_lit("vmovmskps"), str_lit("vmovmskpd"), str_lit("vmovntps"), str_lit("vmovntpd"), str_lit("vmovntdq"), str_lit("vmovntdqa"), str_lit("vaddsubps"), str_lit("vaddsubpd"), str_lit("vhaddps"), str_lit("vhaddpd"), str_lit("vhsubps"), str_lit("vhsubpd"), str_lit("vlddqu"), + str_lit("vmovddup"), str_lit("vmovsldup"), str_lit("vmovshdup"), str_lit("vpcmpestri"), str_lit("vpcmpestrm"), str_lit("vpcmpistri"), str_lit("vpcmpistrm"), str_lit("vpbroadcastb"), str_lit("vpbroadcastw"), str_lit("vpbroadcastd"), str_lit("vpbroadcastq"), str_lit("vcvtps2pd"), str_lit("vcvtpd2ps"), str_lit("vcvtss2sd"), str_lit("vcvtsd2ss"), str_lit("vcvtps2dq"), + str_lit("vcvtpd2dq"), str_lit("vcvtdq2ps"), str_lit("vcvtdq2pd"), str_lit("vcvtss2si"), str_lit("vcvtsd2si"), str_lit("vcvtsi2ss"), str_lit("vcvtsi2sd"), str_lit("vcvttps2dq"), str_lit("vcvttpd2dq"), str_lit("vcvttss2si"), str_lit("vcvttsd2si"), str_lit("vpaddb"), str_lit("vpaddw"), str_lit("vpaddd"), str_lit("vpaddq"), str_lit("vpsubb"), + str_lit("vpsubw"), str_lit("vpsubd"), str_lit("vpsubq"), str_lit("vpmullw"), str_lit("vpmulhw"), str_lit("vpmulhuw"), str_lit("vpmuludq"), str_lit("vpmaddwd"), str_lit("vpand"), str_lit("vpandn"), str_lit("vpor"), str_lit("vpxor"), str_lit("vpsllw"), str_lit("vpslld"), str_lit("vpsllq"), str_lit("vpsrlw"), + str_lit("vpsrld"), str_lit("vpsrlq"), str_lit("vpsraw"), str_lit("vpsrad"), str_lit("vpcmpeqb"), str_lit("vpcmpeqw"), str_lit("vpcmpeqd"), str_lit("vpcmpeqq"), str_lit("vpcmpgtb"), str_lit("vpcmpgtw"), str_lit("vpcmpgtd"), str_lit("vpcmpgtq"), str_lit("vpacksswb"), str_lit("vpackssdw"), str_lit("vpackuswb"), str_lit("vpackusdw"), + str_lit("vpunpcklbw"), str_lit("vpunpcklwd"), str_lit("vpunpckldq"), str_lit("vpunpcklqdq"), str_lit("vpunpckhbw"), str_lit("vpunpckhwd"), str_lit("vpunpckhdq"), str_lit("vpunpckhqdq"), str_lit("vpshufd"), str_lit("vpshufhw"), str_lit("vpshuflw"), str_lit("vpextrb"), str_lit("vpextrw"), str_lit("vpextrd"), str_lit("vpextrq"), str_lit("vpinsrb"), + str_lit("vpinsrw"), str_lit("vpinsrd"), str_lit("vpinsrq"), str_lit("vpmovmskb"), str_lit("vptest"), str_lit("vpshufb"), str_lit("vphaddw"), str_lit("vphaddd"), str_lit("vphaddsw"), str_lit("vphsubw"), str_lit("vphsubd"), str_lit("vphsubsw"), str_lit("vpmaddubsw"), str_lit("vpmulhrsw"), str_lit("vpsignb"), str_lit("vpsignw"), + str_lit("vpsignd"), str_lit("vpabsb"), str_lit("vpabsw"), str_lit("vpabsd"), str_lit("vpalignr"), str_lit("vpblendw"), str_lit("vpblendvb"), str_lit("vmpsadbw"), str_lit("vphminposuw"), str_lit("vpmaxsb"), str_lit("vpmaxsd"), str_lit("vpmaxuw"), str_lit("vpmaxud"), str_lit("vpminsb"), str_lit("vpminsd"), str_lit("vpminuw"), + str_lit("vpminud"), str_lit("vpmovsxbw"), str_lit("vpmovsxbd"), str_lit("vpmovsxbq"), str_lit("vpmovsxwd"), str_lit("vpmovsxwq"), str_lit("vpmovsxdq"), str_lit("vpmovzxbw"), str_lit("vpmovzxbd"), str_lit("vpmovzxbq"), str_lit("vpmovzxwd"), str_lit("vpmovzxwq"), str_lit("vpmovzxdq"), str_lit("vpmuldq"), str_lit("vpmulld"), str_lit("vmaskmovdqu"), + str_lit("vpclmulqdq"), str_lit("vaesdec"), str_lit("vaesdeclast"), str_lit("vaesenc"), str_lit("vaesenclast"), str_lit("vaesimc"), str_lit("vaeskeygenassist"), str_lit("vbroadcastss"), str_lit("vbroadcastsd"), str_lit("vbroadcastf128"), str_lit("vextractf128"), str_lit("vinsertf128"), str_lit("vperm2f128"), str_lit("vmaskmovps"), str_lit("vmaskmovpd"), str_lit("vtestps"), + str_lit("vtestpd"), str_lit("vzeroall"), str_lit("vzeroupper"), str_lit("vbroadcasti128"), str_lit("vextracti128"), str_lit("vinserti128"), str_lit("vperm2i128"), str_lit("vpermd"), str_lit("vpermps"), str_lit("vpermq"), str_lit("vpermpd"), str_lit("vpblendd"), str_lit("vpsllvd"), str_lit("vpsllvq"), str_lit("vpsrlvd"), str_lit("vpsrlvq"), + str_lit("vpsravd"), str_lit("vpmaskmovd"), str_lit("vpmaskmovq"), str_lit("vgatherdps"), str_lit("vgatherdpd"), str_lit("vgatherqps"), str_lit("vgatherqpd"), str_lit("vpgatherdd"), str_lit("vpgatherdq"), str_lit("vpgatherqd"), str_lit("vpgatherqq"), str_lit("vfmadd132ps"), str_lit("vfmadd213ps"), str_lit("vfmadd231ps"), str_lit("vfmadd132pd"), str_lit("vfmadd213pd"), + str_lit("vfmadd231pd"), str_lit("vfmadd132ss"), str_lit("vfmadd213ss"), str_lit("vfmadd231ss"), str_lit("vfmadd132sd"), str_lit("vfmadd213sd"), str_lit("vfmadd231sd"), str_lit("vfmsub132ps"), str_lit("vfmsub213ps"), str_lit("vfmsub231ps"), str_lit("vfmsub132pd"), str_lit("vfmsub213pd"), str_lit("vfmsub231pd"), str_lit("vfmsub132ss"), str_lit("vfmsub213ss"), str_lit("vfmsub231ss"), + str_lit("vfmsub132sd"), str_lit("vfmsub213sd"), str_lit("vfmsub231sd"), str_lit("vfnmadd132ps"), str_lit("vfnmadd213ps"), str_lit("vfnmadd231ps"), str_lit("vfnmadd132pd"), str_lit("vfnmadd213pd"), str_lit("vfnmadd231pd"), str_lit("vfnmadd132ss"), str_lit("vfnmadd213ss"), str_lit("vfnmadd231ss"), str_lit("vfnmadd132sd"), str_lit("vfnmadd213sd"), str_lit("vfnmadd231sd"), str_lit("vfnmsub132ps"), + str_lit("vfnmsub213ps"), str_lit("vfnmsub231ps"), str_lit("vfnmsub132pd"), str_lit("vfnmsub213pd"), str_lit("vfnmsub231pd"), str_lit("vfnmsub132ss"), str_lit("vfnmsub213ss"), str_lit("vfnmsub231ss"), str_lit("vfnmsub132sd"), str_lit("vfnmsub213sd"), str_lit("vfnmsub231sd"), str_lit("vfmaddsub132ps"), str_lit("vfmaddsub213ps"), str_lit("vfmaddsub231ps"), str_lit("vfmaddsub132pd"), str_lit("vfmaddsub213pd"), + str_lit("vfmaddsub231pd"), str_lit("vfmsubadd132ps"), str_lit("vfmsubadd213ps"), str_lit("vfmsubadd231ps"), str_lit("vfmsubadd132pd"), str_lit("vfmsubadd213pd"), str_lit("vfmsubadd231pd"), str_lit("vcvtph2ps"), str_lit("vcvtps2ph"), str_lit("vmovdqa32"), str_lit("vmovdqa64"), str_lit("vmovdqu8"), str_lit("vmovdqu16"), str_lit("vmovdqu32"), str_lit("vmovdqu64"), str_lit("vpblendmb"), + str_lit("vpblendmw"), str_lit("vpblendmd"), str_lit("vpblendmq"), str_lit("vblendmps"), str_lit("vblendmpd"), str_lit("vpcmpb"), str_lit("vpcmpub"), str_lit("vpcmpw"), str_lit("vpcmpuw"), str_lit("vpcmpd"), str_lit("vpcmpud"), str_lit("vpcmpq"), str_lit("vpcmpuq"), str_lit("vptestmb"), str_lit("vptestmw"), str_lit("vptestmd"), + str_lit("vptestmq"), str_lit("vptestnmb"), str_lit("vptestnmw"), str_lit("vptestnmd"), str_lit("vptestnmq"), str_lit("vpcompressd"), str_lit("vpcompressq"), str_lit("vcompressps"), str_lit("vcompresspd"), str_lit("vpexpandd"), str_lit("vpexpandq"), str_lit("vexpandps"), str_lit("vexpandpd"), str_lit("vpconflictd"), str_lit("vpconflictq"), str_lit("vplzcntd"), + str_lit("vplzcntq"), str_lit("vpermi2b"), str_lit("vpermi2w"), str_lit("vpermi2d"), str_lit("vpermi2q"), str_lit("vpermi2ps"), str_lit("vpermi2pd"), str_lit("vpermt2b"), str_lit("vpermt2w"), str_lit("vpermt2d"), str_lit("vpermt2q"), str_lit("vpermt2ps"), str_lit("vpermt2pd"), str_lit("vpermb"), str_lit("vpermw"), str_lit("vpmovb2m"), + str_lit("vpmovw2m"), str_lit("vpmovd2m"), str_lit("vpmovq2m"), str_lit("vpmovm2b"), str_lit("vpmovm2w"), str_lit("vpmovm2d"), str_lit("vpmovm2q"), str_lit("vpmovqb"), str_lit("vpmovsqb"), str_lit("vpmovusqb"), str_lit("vpmovqw"), str_lit("vpmovsqw"), str_lit("vpmovusqw"), str_lit("vpmovqd"), str_lit("vpmovsqd"), str_lit("vpmovusqd"), + str_lit("vpmovdb"), str_lit("vpmovsdb"), str_lit("vpmovusdb"), str_lit("vpmovdw"), str_lit("vpmovsdw"), str_lit("vpmovusdw"), str_lit("vpmovwb"), str_lit("vpmovswb"), str_lit("vpmovuswb"), str_lit("vprold"), str_lit("vprolq"), str_lit("vprolvd"), str_lit("vprolvq"), str_lit("vprord"), str_lit("vprorq"), str_lit("vprorvd"), + str_lit("vprorvq"), str_lit("vpscatterdd"), str_lit("vpscatterdq"), str_lit("vpscatterqd"), str_lit("vpscatterqq"), str_lit("vscatterdps"), str_lit("vscatterdpd"), str_lit("vscatterqps"), str_lit("vscatterqpd"), str_lit("vpsravq"), str_lit("vpsravw"), str_lit("vpsllvw"), str_lit("vpsrlvw"), str_lit("vrangeps"), str_lit("vrangepd"), str_lit("vrangess"), + str_lit("vrangesd"), str_lit("vreduceps"), str_lit("vreducepd"), str_lit("vreducess"), str_lit("vreducesd"), str_lit("vrndscaleps"), str_lit("vrndscalepd"), str_lit("vrndscaless"), str_lit("vrndscalesd"), str_lit("vrsqrt14ps"), str_lit("vrsqrt14pd"), str_lit("vrsqrt14ss"), str_lit("vrsqrt14sd"), str_lit("vrcp14ps"), str_lit("vrcp14pd"), str_lit("vrcp14ss"), + str_lit("vrcp14sd"), str_lit("vscalefps"), str_lit("vscalefpd"), str_lit("vscalefss"), str_lit("vscalefsd"), str_lit("vgetexpps"), str_lit("vgetexppd"), str_lit("vgetexpss"), str_lit("vgetexpsd"), str_lit("vgetmantps"), str_lit("vgetmantpd"), str_lit("vgetmantss"), str_lit("vgetmantsd"), str_lit("vfixupimmps"), str_lit("vfixupimmpd"), str_lit("vfixupimmss"), + str_lit("vfixupimmsd"), str_lit("vfpclassps"), str_lit("vfpclasspd"), str_lit("vfpclassss"), str_lit("vfpclasssd"), str_lit("valignq"), str_lit("valignd"), str_lit("vdbpsadbw"), str_lit("vpternlogd"), str_lit("vpternlogq"), str_lit("vpmultishiftqb"), str_lit("kaddw"), str_lit("kaddb"), str_lit("kaddq"), str_lit("kaddd"), str_lit("kandw"), + str_lit("kandb"), str_lit("kandq"), str_lit("kandd"), str_lit("kandnw"), str_lit("kandnb"), str_lit("kandnq"), str_lit("kandnd"), str_lit("kmovw"), str_lit("kmovb"), str_lit("kmovq"), str_lit("kmovd"), str_lit("knotw"), str_lit("knotb"), str_lit("knotq"), str_lit("knotd"), str_lit("korw"), + str_lit("korb"), str_lit("korq"), str_lit("kord"), str_lit("kortestw"), str_lit("kortestb"), str_lit("kortestq"), str_lit("kortestd"), str_lit("kshiftlw"), str_lit("kshiftlb"), str_lit("kshiftlq"), str_lit("kshiftld"), str_lit("kshiftrw"), str_lit("kshiftrb"), str_lit("kshiftrq"), str_lit("kshiftrd"), str_lit("ktestw"), + str_lit("ktestb"), str_lit("ktestq"), str_lit("ktestd"), str_lit("kunpckbw"), str_lit("kunpckwd"), str_lit("kunpckdq"), str_lit("kxnorw"), str_lit("kxnorb"), str_lit("kxnorq"), str_lit("kxnord"), str_lit("kxorw"), str_lit("kxorb"), str_lit("kxorq"), str_lit("kxord"), str_lit("fadd"), str_lit("faddp"), + str_lit("fiadd"), str_lit("fsub"), str_lit("fsubp"), str_lit("fisub"), str_lit("fsubr"), str_lit("fsubrp"), str_lit("fisubr"), str_lit("fmul"), str_lit("fmulp"), str_lit("fimul"), str_lit("fdiv"), str_lit("fdivp"), str_lit("fidiv"), str_lit("fdivr"), str_lit("fdivrp"), str_lit("fidivr"), + str_lit("fsqrt"), str_lit("fabs"), str_lit("fchs"), str_lit("fprem"), str_lit("fprem1"), str_lit("frndint"), str_lit("fscale"), str_lit("fxtract"), str_lit("fxam"), str_lit("fld"), str_lit("fild"), str_lit("fbld"), str_lit("fst"), str_lit("fstp"), str_lit("fist"), str_lit("fistp"), + str_lit("fisttp"), str_lit("fbstp"), str_lit("fxch"), str_lit("fcmovb"), str_lit("fcmove"), str_lit("fcmovbe"), str_lit("fcmovu"), str_lit("fcmovnb"), str_lit("fcmovne"), str_lit("fcmovnbe"), str_lit("fcmovnu"), str_lit("fcom"), str_lit("fcomp"), str_lit("fcompp"), str_lit("ficom"), str_lit("ficomp"), + str_lit("fcomi"), str_lit("fcomip"), str_lit("fucomi"), str_lit("fucomip"), str_lit("fucom"), str_lit("fucomp"), str_lit("fucompp"), str_lit("ftst"), str_lit("fldz"), str_lit("fld1"), str_lit("fldpi"), str_lit("fldl2t"), str_lit("fldl2e"), str_lit("fldlg2"), str_lit("fldln2"), str_lit("fsin"), + str_lit("fcos"), str_lit("fsincos"), str_lit("fptan"), str_lit("fpatan"), str_lit("f2xm1"), str_lit("fyl2x"), str_lit("fyl2xp1"), str_lit("finit"), str_lit("fninit"), str_lit("fincstp"), str_lit("fdecstp"), str_lit("ffree"), str_lit("ffreep"), str_lit("fnop"), str_lit("fwait"), str_lit("fclex"), + str_lit("fnclex"), str_lit("fstcw"), str_lit("fnstcw"), str_lit("fldcw"), str_lit("fstenv"), str_lit("fnstenv"), str_lit("fldenv"), str_lit("fsave"), str_lit("fnsave"), str_lit("frstor"), str_lit("fstsw"), str_lit("fnstsw"), str_lit("fxsave"), str_lit("fxsave64"), str_lit("fxrstor"), str_lit("fxrstor64"), + str_lit("lgdt"), str_lit("sgdt"), str_lit("lidt"), str_lit("sidt"), str_lit("lldt"), str_lit("sldt"), str_lit("ltr"), str_lit("str"), str_lit("lmsw"), str_lit("smsw"), str_lit("clts"), str_lit("arpl"), str_lit("lar"), str_lit("lsl"), str_lit("verr"), str_lit("verw"), + str_lit("invd"), str_lit("wbinvd"), str_lit("invlpg"), str_lit("invpcid"), str_lit("rsm"), str_lit("rdmsr"), str_lit("wrmsr"), str_lit("vmcall"), str_lit("vmlaunch"), str_lit("vmresume"), str_lit("vmxoff"), str_lit("vmxon"), str_lit("vmclear"), str_lit("vmptrld"), str_lit("vmptrst"), str_lit("vmread"), + str_lit("vmwrite"), str_lit("vmfunc"), str_lit("invept"), str_lit("invvpid"), str_lit("encls"), str_lit("enclu"), str_lit("enclv"), str_lit("rdpkru"), str_lit("wrpkru"), str_lit("incsspd"), str_lit("incsspq"), str_lit("rdsspd"), str_lit("rdsspq"), str_lit("saveprevssp"), str_lit("rstorssp"), str_lit("wrssd"), + str_lit("wrssq"), str_lit("wrussd"), str_lit("wrussq"), str_lit("setssbsy"), str_lit("clrssbsy"), str_lit("endbr64"), str_lit("endbr32"), str_lit("xsave"), str_lit("xsave64"), str_lit("xrstor"), str_lit("xrstor64"), str_lit("xsaveopt"), str_lit("xsaveopt64"), str_lit("xsavec"), str_lit("xsavec64"), str_lit("xsaves"), + str_lit("xsaves64"), str_lit("xrstors"), str_lit("xrstors64"), str_lit("prefetcht0"), str_lit("prefetcht1"), str_lit("prefetcht2"), str_lit("prefetchnta"), str_lit("prefetchw"), str_lit("clflushopt"), str_lit("clwb"), str_lit("cldemote"), str_lit("bswap"), str_lit("cmpxchg"), str_lit("cmpxchg8b"), str_lit("cmpxchg16b"), str_lit("xadd"), + str_lit("bound"), str_lit("enter"), str_lit("leave"), str_lit("xlat"), str_lit("xlatb"), str_lit("movbe"), str_lit("rdrand"), str_lit("rdseed"), str_lit("swapgs"), str_lit("monitor"), str_lit("mwait"), str_lit("clac"), str_lit("stac"), str_lit("rdfsbase"), str_lit("rdgsbase"), str_lit("wrfsbase"), + str_lit("wrgsbase"), str_lit("ptwrite"), str_lit("rdpid"), str_lit("wbnoinvd"), str_lit("serialize"), str_lit("prefetch"), str_lit("tpause"), str_lit("umonitor"), str_lit("umwait"), str_lit("movdiri"), str_lit("movdir64b"), str_lit("enqcmd"), str_lit("enqcmds"), str_lit("aadd"), str_lit("aand"), str_lit("aor"), + str_lit("axor"), str_lit("xend"), str_lit("xtest"), str_lit("vmrun"), str_lit("vmmcall"), str_lit("vmload"), str_lit("vmsave"), str_lit("stgi"), str_lit("clgi"), str_lit("skinit"), str_lit("invlpga"), str_lit("invlpgb"), str_lit("tlbsync"), str_lit("pvalidate"), str_lit("rmpadjust"), str_lit("rmpupdate"), + str_lit("psmash"), str_lit("clzero"), str_lit("monitorx"), str_lit("mwaitx"), str_lit("rdpru"), str_lit("mcommit"), +}; +String const Asm_amd64::prefix_strings[Asm_amd64::PREFIX_COUNT] { + str_lit(""), str_lit("es"), str_lit("cs"), str_lit("ss"), str_lit("ds"), str_lit("rex"), str_lit("evex"), str_lit("fs"), str_lit("gs"), str_lit("vex"), str_lit("lock"), str_lit("repne"), str_lit("rep"), +}; +u16 const Asm_amd64::register_codes[Asm_amd64::REG_COUNT] { + 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, + 271, 512, 513, 514, 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 525, 526, + 527, 768, 769, 770, 771, 772, 773, 774, 775, 776, 777, 778, 779, 780, 781, 782, + 783, 1024, 1025, 1026, 1027, 1028, 1029, 1030, 1031, 1032, 1033, 1034, 1035, 1036, 1037, 1038, + 1039, 1284, 1285, 1286, 1287, 1536, 1537, 1538, 1539, 1540, 1541, 1542, 1543, 1544, 1545, 1546, + 1547, 1548, 1549, 1550, 1551, 1552, 1553, 1554, 1555, 1556, 1557, 1558, 1559, 1560, 1561, 1562, + 1563, 1564, 1565, 1566, 1567, 1792, 1793, 1794, 1795, 1796, 1797, 1798, 1799, 1800, 1801, 1802, + 1803, 1804, 1805, 1806, 1807, 1808, 1809, 1810, 1811, 1812, 1813, 1814, 1815, 1816, 1817, 1818, + 1819, 1820, 1821, 1822, 1823, 2048, 2049, 2050, 2051, 2052, 2053, 2054, 2055, 2056, 2057, 2058, + 2059, 2060, 2061, 2062, 2063, 2064, 2065, 2066, 2067, 2068, 2069, 2070, 2071, 2072, 2073, 2074, + 2075, 2076, 2077, 2078, 2079, 2304, 2305, 2306, 2307, 2308, 2309, 2310, 2311, 2560, 2561, 2562, + 2563, 2564, 2565, 2816, 2818, 2819, 2820, 2824, 3072, 3073, 3074, 3075, 3078, 3079, 3328, 3329, + 3330, 3331, 3584, 3585, 3586, 3587, 3588, 3589, 3590, 3591, 3840, 3841, 3842, 3843, 3844, 3845, + 3846, 3847, 65534, +}; +String const Asm_amd64::register_strings[Asm_amd64::REG_COUNT] { + str_lit(""), str_lit("rax"), str_lit("rcx"), str_lit("rdx"), str_lit("rbx"), str_lit("rsp"), str_lit("rbp"), str_lit("rsi"), str_lit("rdi"), str_lit("r8"), str_lit("r9"), str_lit("r10"), str_lit("r11"), str_lit("r12"), str_lit("r13"), str_lit("r14"), + str_lit("r15"), str_lit("eax"), str_lit("ecx"), str_lit("edx"), str_lit("ebx"), str_lit("esp"), str_lit("ebp"), str_lit("esi"), str_lit("edi"), str_lit("r8d"), str_lit("r9d"), str_lit("r10d"), str_lit("r11d"), str_lit("r12d"), str_lit("r13d"), str_lit("r14d"), + str_lit("r15d"), str_lit("ax"), str_lit("cx"), str_lit("dx"), str_lit("bx"), str_lit("sp"), str_lit("bp"), str_lit("si"), str_lit("di"), str_lit("r8w"), str_lit("r9w"), str_lit("r10w"), str_lit("r11w"), str_lit("r12w"), str_lit("r13w"), str_lit("r14w"), + str_lit("r15w"), str_lit("al"), str_lit("cl"), str_lit("dl"), str_lit("bl"), str_lit("spl"), str_lit("bpl"), str_lit("sil"), str_lit("dil"), str_lit("r8b"), str_lit("r9b"), str_lit("r10b"), str_lit("r11b"), str_lit("r12b"), str_lit("r13b"), str_lit("r14b"), + str_lit("r15b"), str_lit("ah"), str_lit("ch"), str_lit("dh"), str_lit("bh"), str_lit("xmm0"), str_lit("xmm1"), str_lit("xmm2"), str_lit("xmm3"), str_lit("xmm4"), str_lit("xmm5"), str_lit("xmm6"), str_lit("xmm7"), str_lit("xmm8"), str_lit("xmm9"), str_lit("xmm10"), + str_lit("xmm11"), str_lit("xmm12"), str_lit("xmm13"), str_lit("xmm14"), str_lit("xmm15"), str_lit("xmm16"), str_lit("xmm17"), str_lit("xmm18"), str_lit("xmm19"), str_lit("xmm20"), str_lit("xmm21"), str_lit("xmm22"), str_lit("xmm23"), str_lit("xmm24"), str_lit("xmm25"), str_lit("xmm26"), + str_lit("xmm27"), str_lit("xmm28"), str_lit("xmm29"), str_lit("xmm30"), str_lit("xmm31"), str_lit("ymm0"), str_lit("ymm1"), str_lit("ymm2"), str_lit("ymm3"), str_lit("ymm4"), str_lit("ymm5"), str_lit("ymm6"), str_lit("ymm7"), str_lit("ymm8"), str_lit("ymm9"), str_lit("ymm10"), + str_lit("ymm11"), str_lit("ymm12"), str_lit("ymm13"), str_lit("ymm14"), str_lit("ymm15"), str_lit("ymm16"), str_lit("ymm17"), str_lit("ymm18"), str_lit("ymm19"), str_lit("ymm20"), str_lit("ymm21"), str_lit("ymm22"), str_lit("ymm23"), str_lit("ymm24"), str_lit("ymm25"), str_lit("ymm26"), + str_lit("ymm27"), str_lit("ymm28"), str_lit("ymm29"), str_lit("ymm30"), str_lit("ymm31"), str_lit("zmm0"), str_lit("zmm1"), str_lit("zmm2"), str_lit("zmm3"), str_lit("zmm4"), str_lit("zmm5"), str_lit("zmm6"), str_lit("zmm7"), str_lit("zmm8"), str_lit("zmm9"), str_lit("zmm10"), + str_lit("zmm11"), str_lit("zmm12"), str_lit("zmm13"), str_lit("zmm14"), str_lit("zmm15"), str_lit("zmm16"), str_lit("zmm17"), str_lit("zmm18"), str_lit("zmm19"), str_lit("zmm20"), str_lit("zmm21"), str_lit("zmm22"), str_lit("zmm23"), str_lit("zmm24"), str_lit("zmm25"), str_lit("zmm26"), + str_lit("zmm27"), str_lit("zmm28"), str_lit("zmm29"), str_lit("zmm30"), str_lit("zmm31"), str_lit("k0"), str_lit("k1"), str_lit("k2"), str_lit("k3"), str_lit("k4"), str_lit("k5"), str_lit("k6"), str_lit("k7"), str_lit("es"), str_lit("cs"), str_lit("ss"), + str_lit("ds"), str_lit("fs"), str_lit("gs"), str_lit("cr0"), str_lit("cr2"), str_lit("cr3"), str_lit("cr4"), str_lit("cr8"), str_lit("dr0"), str_lit("dr1"), str_lit("dr2"), str_lit("dr3"), str_lit("dr6"), str_lit("dr7"), str_lit("bnd0"), str_lit("bnd1"), + str_lit("bnd2"), str_lit("bnd3"), str_lit("mm0"), str_lit("mm1"), str_lit("mm2"), str_lit("mm3"), str_lit("mm4"), str_lit("mm5"), str_lit("mm6"), str_lit("mm7"), str_lit("st0"), str_lit("st1"), str_lit("st2"), str_lit("st3"), str_lit("st4"), str_lit("st5"), + str_lit("st6"), str_lit("st7"), str_lit("rip"), +}; +Asm_amd64::EncodeRun const Asm_amd64::raw_encode_runs[1238] = { + { 0, 0}, { 0, 32}, { 32, 9}, { 41, 5}, { 46, 5}, { 51, 1}, { 52, 7}, { 59, 9}, { 68, 6}, { 74, 3}, { 77, 19}, { 96, 19}, { 115, 19}, { 134, 19}, { 153, 4}, { 157, 13}, + { 170, 4}, { 174, 4}, { 178, 6}, { 184, 6}, { 190, 4}, { 194, 19}, { 213, 19}, { 232, 19}, { 251, 19}, { 270, 4}, { 274, 12}, { 286, 12}, { 298, 12}, { 310, 12}, { 322, 12}, { 334, 12}, + { 346, 12}, { 358, 12}, { 370, 6}, { 376, 6}, { 382, 6}, { 388, 6}, { 394, 6}, { 400, 6}, { 406, 3}, { 409, 3}, { 412, 3}, { 415, 3}, { 418, 3}, { 421, 6}, { 427, 2}, { 429, 2}, + { 431, 2}, { 433, 2}, { 435, 2}, { 437, 2}, { 439, 2}, { 441, 2}, { 443, 2}, { 445, 2}, { 447, 2}, { 449, 2}, { 451, 2}, { 453, 2}, { 455, 2}, { 457, 2}, { 459, 2}, { 461, 2}, + { 463, 2}, { 465, 2}, { 467, 2}, { 469, 2}, { 471, 2}, { 473, 2}, { 475, 2}, { 477, 2}, { 479, 2}, { 481, 2}, { 483, 2}, { 485, 2}, { 487, 1}, { 488, 1}, { 489, 1}, { 490, 1}, + { 491, 1}, { 492, 1}, { 493, 5}, { 498, 2}, { 500, 1}, { 501, 1}, { 502, 1}, { 503, 1}, { 504, 1}, { 505, 1}, { 506, 1}, { 507, 1}, { 508, 1}, { 509, 1}, { 510, 1}, { 511, 1}, + { 512, 1}, { 513, 1}, { 514, 1}, { 515, 1}, { 516, 1}, { 517, 1}, { 518, 1}, { 519, 1}, { 520, 1}, { 521, 1}, { 522, 1}, { 523, 1}, { 524, 1}, { 525, 1}, { 526, 1}, { 527, 1}, + { 528, 1}, { 529, 1}, { 530, 1}, { 531, 1}, { 532, 1}, { 533, 1}, { 534, 1}, { 535, 1}, { 536, 1}, { 537, 1}, { 538, 1}, { 539, 1}, { 540, 3}, { 543, 3}, { 546, 3}, { 549, 3}, + { 552, 3}, { 555, 3}, { 558, 3}, { 561, 3}, { 564, 3}, { 567, 3}, { 570, 3}, { 573, 3}, { 576, 3}, { 579, 3}, { 582, 3}, { 585, 3}, { 588, 3}, { 591, 3}, { 594, 3}, { 597, 3}, + { 600, 3}, { 603, 3}, { 606, 3}, { 609, 3}, { 612, 3}, { 615, 3}, { 618, 3}, { 621, 3}, { 624, 3}, { 627, 3}, { 630, 1}, { 631, 1}, { 632, 1}, { 633, 3}, { 636, 1}, { 637, 1}, + { 638, 1}, { 639, 1}, { 640, 2}, { 642, 1}, { 643, 1}, { 644, 1}, { 645, 1}, { 646, 1}, { 647, 1}, { 648, 1}, { 649, 1}, { 650, 1}, { 651, 1}, { 652, 1}, { 653, 1}, { 654, 1}, + { 655, 1}, { 656, 1}, { 657, 1}, { 658, 1}, { 659, 1}, { 660, 1}, { 661, 1}, { 662, 1}, { 663, 1}, { 664, 1}, { 665, 1}, { 666, 1}, { 667, 1}, { 668, 1}, { 669, 1}, { 670, 1}, + { 671, 1}, { 672, 1}, { 673, 4}, { 677, 1}, { 678, 1}, { 679, 1}, { 680, 1}, { 681, 1}, { 682, 1}, { 683, 1}, { 684, 1}, { 685, 1}, { 686, 1}, { 687, 1}, { 688, 1}, { 689, 1}, + { 690, 1}, { 691, 1}, { 692, 1}, { 693, 1}, { 694, 1}, { 695, 2}, { 697, 2}, { 699, 2}, { 701, 2}, { 703, 2}, { 705, 2}, { 707, 2}, { 709, 2}, { 711, 2}, { 713, 2}, { 715, 2}, + { 717, 2}, { 719, 2}, { 721, 2}, { 723, 2}, { 725, 2}, { 727, 2}, { 729, 2}, { 731, 2}, { 733, 2}, { 735, 2}, { 737, 2}, { 739, 6}, { 745, 4}, { 749, 2}, { 751, 2}, { 753, 2}, + { 755, 2}, { 757, 1}, { 758, 1}, { 759, 2}, { 761, 2}, { 763, 1}, { 764, 1}, { 765, 1}, { 766, 1}, { 767, 1}, { 768, 1}, { 769, 1}, { 770, 1}, { 771, 1}, { 772, 1}, { 773, 1}, + { 774, 1}, { 775, 1}, { 776, 1}, { 777, 1}, { 778, 1}, { 779, 1}, { 780, 1}, { 781, 1}, { 782, 1}, { 783, 1}, { 784, 1}, { 785, 1}, { 786, 1}, { 787, 1}, { 788, 1}, { 789, 1}, + { 790, 1}, { 791, 1}, { 792, 1}, { 793, 1}, { 794, 1}, { 795, 1}, { 796, 1}, { 797, 1}, { 798, 1}, { 799, 1}, { 800, 1}, { 801, 1}, { 802, 1}, { 803, 1}, { 804, 1}, { 805, 1}, + { 806, 1}, { 807, 1}, { 808, 1}, { 809, 1}, { 810, 1}, { 811, 1}, { 812, 1}, { 813, 1}, { 814, 1}, { 815, 1}, { 816, 1}, { 817, 1}, { 818, 1}, { 819, 1}, { 820, 1}, { 821, 1}, + { 822, 1}, { 823, 1}, { 824, 1}, { 825, 1}, { 826, 1}, { 827, 1}, { 828, 2}, { 830, 2}, { 832, 2}, { 834, 2}, { 836, 1}, { 837, 1}, { 838, 2}, { 840, 2}, { 842, 1}, { 843, 1}, + { 844, 1}, { 845, 1}, { 846, 1}, { 847, 1}, { 848, 1}, { 849, 1}, { 850, 1}, { 851, 1}, { 852, 1}, { 853, 1}, { 854, 1}, { 855, 1}, { 856, 1}, { 857, 1}, { 858, 1}, { 859, 1}, + { 860, 1}, { 861, 1}, { 862, 1}, { 863, 1}, { 864, 1}, { 865, 1}, { 866, 1}, { 867, 2}, { 869, 2}, { 871, 2}, { 873, 2}, { 875, 2}, { 877, 2}, { 879, 2}, { 881, 2}, { 883, 1}, + { 884, 1}, { 885, 1}, { 886, 1}, { 887, 1}, { 888, 1}, { 889, 1}, { 890, 1}, { 891, 1}, { 892, 1}, { 893, 1}, { 894, 1}, { 895, 1}, { 896, 1}, { 897, 1}, { 898, 1}, { 899, 1}, + { 900, 1}, { 901, 1}, { 902, 1}, { 903, 1}, { 904, 2}, { 906, 2}, { 908, 2}, { 910, 1}, { 911, 1}, { 912, 1}, { 913, 1}, { 914, 1}, { 915, 1}, { 916, 1}, { 917, 1}, { 918, 1}, + { 919, 1}, { 920, 1}, { 921, 1}, { 922, 1}, { 923, 1}, { 924, 1}, { 925, 1}, { 926, 1}, { 927, 1}, { 928, 1}, { 929, 1}, { 930, 1}, { 931, 1}, { 932, 1}, { 933, 1}, { 934, 1}, + { 935, 1}, { 936, 1}, { 937, 1}, { 938, 1}, { 939, 1}, { 940, 1}, { 941, 1}, { 942, 1}, { 943, 1}, { 944, 1}, { 945, 1}, { 946, 1}, { 947, 1}, { 948, 1}, { 949, 1}, { 950, 1}, + { 951, 1}, { 952, 1}, { 953, 1}, { 954, 1}, { 955, 1}, { 956, 1}, { 957, 1}, { 958, 1}, { 959, 1}, { 960, 1}, { 961, 1}, { 962, 1}, { 963, 1}, { 964, 1}, { 965, 1}, { 966, 1}, + { 967, 1}, { 968, 1}, { 969, 1}, { 970, 1}, { 971, 1}, { 972, 1}, { 973, 1}, { 974, 1}, { 975, 1}, { 976, 1}, { 977, 1}, { 978, 1}, { 979, 1}, { 980, 1}, { 981, 1}, { 982, 1}, + { 983, 1}, { 984, 1}, { 985, 1}, { 986, 1}, { 987, 1}, { 988, 1}, { 989, 1}, { 990, 1}, { 991, 1}, { 992, 1}, { 993, 1}, { 994, 1}, { 995, 1}, { 996, 5}, {1001, 1}, {1002, 1}, + {1003, 1}, {1004, 1}, {1005, 1}, {1006, 1}, {1007, 1}, {1008, 1}, {1009, 1}, {1010, 1}, {1011, 1}, {1012, 1}, {1013, 1}, {1014, 1}, {1015, 1}, {1016, 1}, {1017, 1}, {1018, 1}, + {1019, 1}, {1020, 2}, {1022, 2}, {1024, 1}, {1025, 1}, {1026, 2}, {1028, 2}, {1030, 1}, {1031, 1}, {1032, 2}, {1034, 2}, {1036, 1}, {1037, 1}, {1038, 2}, {1040, 2}, {1042, 1}, + {1043, 1}, {1044, 2}, {1046, 2}, {1048, 1}, {1049, 1}, {1050, 2}, {1052, 1}, {1053, 2}, {1055, 1}, {1056, 2}, {1058, 2}, {1060, 1}, {1061, 1}, {1062, 2}, {1064, 2}, {1066, 1}, + {1067, 1}, {1068, 2}, {1070, 2}, {1072, 2}, {1074, 2}, {1076, 2}, {1078, 2}, {1080, 2}, {1082, 2}, {1084, 2}, {1086, 2}, {1088, 1}, {1089, 1}, {1090, 1}, {1091, 1}, {1092, 1}, + {1093, 1}, {1094, 2}, {1096, 2}, {1098, 2}, {1100, 2}, {1102, 2}, {1104, 2}, {1106, 2}, {1108, 2}, {1110, 2}, {1112, 2}, {1114, 2}, {1116, 1}, {1117, 2}, {1119, 2}, {1121, 1}, + {1122, 1}, {1123, 1}, {1124, 1}, {1125, 4}, {1129, 4}, {1133, 4}, {1137, 4}, {1141, 3}, {1144, 3}, {1147, 4}, {1151, 4}, {1155, 4}, {1159, 2}, {1161, 2}, {1163, 2}, {1165, 2}, + {1167, 2}, {1169, 1}, {1170, 1}, {1171, 2}, {1173, 2}, {1175, 2}, {1177, 2}, {1179, 2}, {1181, 2}, {1183, 2}, {1185, 2}, {1187, 2}, {1189, 2}, {1191, 2}, {1193, 2}, {1195, 2}, + {1197, 2}, {1199, 2}, {1201, 2}, {1203, 1}, {1204, 1}, {1205, 1}, {1206, 1}, {1207, 4}, {1211, 4}, {1215, 4}, {1219, 4}, {1223, 2}, {1225, 2}, {1227, 1}, {1228, 1}, {1229, 2}, + {1231, 2}, {1233, 2}, {1235, 2}, {1237, 2}, {1239, 2}, {1241, 2}, {1243, 2}, {1245, 2}, {1247, 2}, {1249, 2}, {1251, 2}, {1253, 2}, {1255, 2}, {1257, 2}, {1259, 2}, {1261, 2}, + {1263, 2}, {1265, 2}, {1267, 2}, {1269, 2}, {1271, 2}, {1273, 2}, {1275, 2}, {1277, 2}, {1279, 2}, {1281, 2}, {1283, 2}, {1285, 2}, {1287, 4}, {1291, 4}, {1295, 4}, {1299, 4}, + {1303, 4}, {1307, 4}, {1311, 4}, {1315, 4}, {1319, 2}, {1321, 2}, {1323, 2}, {1325, 2}, {1327, 2}, {1329, 2}, {1331, 2}, {1333, 2}, {1335, 2}, {1337, 2}, {1339, 2}, {1341, 2}, + {1343, 2}, {1345, 2}, {1347, 2}, {1349, 2}, {1351, 2}, {1353, 2}, {1355, 2}, {1357, 2}, {1359, 2}, {1361, 2}, {1363, 2}, {1365, 1}, {1366, 2}, {1368, 1}, {1369, 1}, {1370, 1}, + {1371, 1}, {1372, 1}, {1373, 1}, {1374, 2}, {1376, 2}, {1378, 2}, {1380, 2}, {1382, 2}, {1384, 2}, {1386, 2}, {1388, 2}, {1390, 2}, {1392, 2}, {1394, 2}, {1396, 2}, {1398, 2}, + {1400, 2}, {1402, 2}, {1404, 2}, {1406, 2}, {1408, 2}, {1410, 2}, {1412, 2}, {1414, 2}, {1416, 1}, {1417, 2}, {1419, 2}, {1421, 2}, {1423, 2}, {1425, 2}, {1427, 2}, {1429, 2}, + {1431, 2}, {1433, 2}, {1435, 2}, {1437, 2}, {1439, 2}, {1441, 2}, {1443, 2}, {1445, 2}, {1447, 2}, {1449, 2}, {1451, 2}, {1453, 2}, {1455, 2}, {1457, 2}, {1459, 2}, {1461, 1}, + {1462, 2}, {1464, 1}, {1465, 1}, {1466, 1}, {1467, 1}, {1468, 1}, {1469, 1}, {1470, 4}, {1474, 2}, {1476, 1}, {1477, 1}, {1478, 1}, {1479, 1}, {1480, 4}, {1484, 4}, {1488, 2}, + {1490, 2}, {1492, 1}, {1493, 1}, {1494, 1}, {1495, 1}, {1496, 1}, {1497, 1}, {1498, 1}, {1499, 1}, {1500, 1}, {1501, 1}, {1502, 2}, {1504, 2}, {1506, 2}, {1508, 2}, {1510, 2}, + {1512, 2}, {1514, 4}, {1518, 4}, {1522, 2}, {1524, 2}, {1526, 2}, {1528, 2}, {1530, 2}, {1532, 2}, {1534, 2}, {1536, 2}, {1538, 2}, {1540, 2}, {1542, 2}, {1544, 2}, {1546, 2}, + {1548, 2}, {1550, 1}, {1551, 1}, {1552, 1}, {1553, 1}, {1554, 1}, {1555, 1}, {1556, 2}, {1558, 2}, {1560, 2}, {1562, 2}, {1564, 2}, {1566, 2}, {1568, 1}, {1569, 1}, {1570, 1}, + {1571, 1}, {1572, 1}, {1573, 1}, {1574, 2}, {1576, 2}, {1578, 2}, {1580, 2}, {1582, 2}, {1584, 2}, {1586, 1}, {1587, 1}, {1588, 1}, {1589, 1}, {1590, 1}, {1591, 1}, {1592, 2}, + {1594, 2}, {1596, 2}, {1598, 2}, {1600, 2}, {1602, 2}, {1604, 1}, {1605, 1}, {1606, 1}, {1607, 1}, {1608, 1}, {1609, 1}, {1610, 2}, {1612, 2}, {1614, 2}, {1616, 2}, {1618, 2}, + {1620, 2}, {1622, 2}, {1624, 2}, {1626, 2}, {1628, 2}, {1630, 2}, {1632, 2}, {1634, 3}, {1637, 3}, {1640, 6}, {1646, 6}, {1652, 6}, {1658, 6}, {1664, 6}, {1670, 6}, {1676, 3}, + {1679, 3}, {1682, 3}, {1685, 3}, {1688, 3}, {1691, 3}, {1694, 3}, {1697, 3}, {1700, 3}, {1703, 3}, {1706, 3}, {1709, 3}, {1712, 3}, {1715, 3}, {1718, 3}, {1721, 3}, {1724, 3}, + {1727, 3}, {1730, 3}, {1733, 3}, {1736, 3}, {1739, 3}, {1742, 3}, {1745, 3}, {1748, 3}, {1751, 3}, {1754, 3}, {1757, 3}, {1760, 3}, {1763, 3}, {1766, 3}, {1769, 3}, {1772, 3}, + {1775, 3}, {1778, 3}, {1781, 3}, {1784, 3}, {1787, 3}, {1790, 3}, {1793, 3}, {1796, 3}, {1799, 3}, {1802, 3}, {1805, 3}, {1808, 3}, {1811, 3}, {1814, 3}, {1817, 3}, {1820, 3}, + {1823, 3}, {1826, 3}, {1829, 3}, {1832, 3}, {1835, 3}, {1838, 3}, {1841, 3}, {1844, 3}, {1847, 3}, {1850, 3}, {1853, 3}, {1856, 3}, {1859, 3}, {1862, 3}, {1865, 3}, {1868, 3}, + {1871, 3}, {1874, 3}, {1877, 3}, {1880, 3}, {1883, 3}, {1886, 3}, {1889, 3}, {1892, 3}, {1895, 3}, {1898, 3}, {1901, 3}, {1904, 3}, {1907, 3}, {1910, 3}, {1913, 3}, {1916, 3}, + {1919, 3}, {1922, 3}, {1925, 3}, {1928, 3}, {1931, 3}, {1934, 3}, {1937, 3}, {1940, 3}, {1943, 3}, {1946, 3}, {1949, 3}, {1952, 3}, {1955, 3}, {1958, 3}, {1961, 3}, {1964, 1}, + {1965, 1}, {1966, 3}, {1969, 3}, {1972, 1}, {1973, 1}, {1974, 3}, {1977, 3}, {1980, 1}, {1981, 1}, {1982, 3}, {1985, 3}, {1988, 1}, {1989, 1}, {1990, 3}, {1993, 3}, {1996, 1}, + {1997, 1}, {1998, 3}, {2001, 3}, {2004, 1}, {2005, 1}, {2006, 3}, {2009, 3}, {2012, 1}, {2013, 1}, {2014, 3}, {2017, 3}, {2020, 1}, {2021, 1}, {2022, 3}, {2025, 3}, {2028, 1}, + {2029, 1}, {2030, 3}, {2033, 3}, {2036, 1}, {2037, 1}, {2038, 3}, {2041, 3}, {2044, 3}, {2047, 3}, {2050, 3}, {2053, 3}, {2056, 1}, {2057, 1}, {2058, 1}, {2059, 1}, {2060, 1}, + {2061, 1}, {2062, 1}, {2063, 1}, {2064, 1}, {2065, 1}, {2066, 1}, {2067, 1}, {2068, 4}, {2072, 4}, {2076, 4}, {2080, 4}, {2084, 1}, {2085, 1}, {2086, 1}, {2087, 1}, {2088, 1}, + {2089, 1}, {2090, 1}, {2091, 1}, {2092, 1}, {2093, 1}, {2094, 1}, {2095, 1}, {2096, 1}, {2097, 1}, {2098, 1}, {2099, 1}, {2100, 1}, {2101, 1}, {2102, 1}, {2103, 1}, {2104, 1}, + {2105, 1}, {2106, 1}, {2107, 1}, {2108, 1}, {2109, 1}, {2110, 1}, {2111, 1}, {2112, 1}, {2113, 1}, {2114, 1}, {2115, 1}, {2116, 1}, {2117, 1}, {2118, 1}, {2119, 4}, {2123, 2}, + {2125, 2}, {2127, 4}, {2131, 2}, {2133, 2}, {2135, 4}, {2139, 2}, {2141, 2}, {2143, 4}, {2147, 2}, {2149, 2}, {2151, 4}, {2155, 2}, {2157, 2}, {2159, 4}, {2163, 2}, {2165, 2}, + {2167, 1}, {2168, 1}, {2169, 1}, {2170, 1}, {2171, 1}, {2172, 1}, {2173, 1}, {2174, 1}, {2175, 1}, {2176, 4}, {2180, 3}, {2183, 1}, {2184, 3}, {2187, 4}, {2191, 2}, {2193, 3}, + {2196, 3}, {2199, 1}, {2200, 2}, {2202, 1}, {2203, 1}, {2204, 1}, {2205, 1}, {2206, 1}, {2207, 1}, {2208, 1}, {2209, 1}, {2210, 4}, {2214, 4}, {2218, 1}, {2219, 2}, {2221, 2}, + {2223, 1}, {2224, 1}, {2225, 1}, {2226, 1}, {2227, 2}, {2229, 2}, {2231, 1}, {2232, 1}, {2233, 1}, {2234, 1}, {2235, 1}, {2236, 1}, {2237, 1}, {2238, 1}, {2239, 1}, {2240, 1}, + {2241, 1}, {2242, 1}, {2243, 1}, {2244, 1}, {2245, 1}, {2246, 1}, {2247, 1}, {2248, 1}, {2249, 1}, {2250, 1}, {2251, 1}, {2252, 1}, {2253, 1}, {2254, 1}, {2255, 1}, {2256, 1}, + {2257, 1}, {2258, 1}, {2259, 1}, {2260, 1}, {2261, 1}, {2262, 1}, {2263, 1}, {2264, 1}, {2265, 1}, {2266, 1}, {2267, 2}, {2269, 2}, {2271, 1}, {2272, 1}, {2273, 1}, {2274, 1}, + {2275, 2}, {2277, 2}, {2279, 2}, {2281, 2}, {2283, 1}, {2284, 3}, {2287, 1}, {2288, 3}, {2291, 1}, {2292, 3}, {2295, 1}, {2296, 1}, {2297, 3}, {2300, 3}, {2303, 1}, {2304, 1}, + {2305, 1}, {2306, 1}, {2307, 1}, {2308, 2}, {2310, 1}, {2311, 1}, {2312, 1}, {2313, 1}, {2314, 1}, {2315, 1}, {2316, 1}, {2317, 1}, {2318, 1}, {2319, 1}, {2320, 1}, {2321, 1}, + {2322, 1}, {2323, 1}, {2324, 1}, {2325, 1}, {2326, 1}, {2327, 1}, {2328, 1}, {2329, 1}, {2330, 1}, {2331, 1}, {2332, 1}, {2333, 1}, {2334, 1}, {2335, 1}, {2336, 1}, {2337, 1}, + {2338, 1}, {2339, 1}, {2340, 1}, {2341, 1}, {2342, 1}, {2343, 1}, {2344, 1}, {2345, 1}, {2346, 1}, {2347, 1}, {2348, 1}, {2349, 1}, {2350, 1}, {2351, 1}, {2352, 1}, {2353, 1}, + {2354, 1}, {2355, 1}, {2356, 1}, {2357, 1}, {2358, 1}, {2359, 1}, {2360, 1}, {2361, 1}, {2362, 1}, {2363, 1}, {2364, 1}, {2365, 2}, {2367, 4}, {2371, 1}, {2372, 1}, {2373, 4}, + {2377, 2}, {2379, 1}, {2380, 1}, {2381, 1}, {2382, 1}, {2383, 6}, {2389, 3}, {2392, 3}, {2395, 1}, {2396, 1}, {2397, 1}, {2398, 1}, {2399, 1}, {2400, 2}, {2402, 2}, {2404, 2}, + {2406, 2}, {2408, 2}, {2410, 1}, {2411, 1}, {2412, 1}, {2413, 1}, {2414, 1}, {2415, 1}, {2416, 1}, {2417, 2}, {2419, 1}, {2420, 1}, {2421, 1}, {2422, 2}, {2424, 2}, {2426, 2}, + {2428, 2}, {2430, 1}, {2431, 1}, {2432, 1}, {2433, 1}, {2434, 1}, {2435, 1}, {2436, 1}, {2437, 1}, {2438, 1}, {2439, 1}, {2440, 1}, {2441, 1}, {2442, 1}, {2443, 1}, {2444, 1}, + {2445, 1}, {2446, 1}, {2447, 1}, {2448, 1}, {2449, 1}, {2450, 1}, +}; +u8 const Asm_amd64::raw_encode_forms[39216] = { + 0x01, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x88, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x89, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x89, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x01, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8b, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x01, 0x00, 0x01, 0x12, 0x00, 0x00, 0x04, 0x05, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x02, 0x13, 0x00, 0x00, 0x04, 0x06, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x03, 0x14, 0x00, 0x00, 0x04, 0x07, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x15, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x01, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc6, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xc7, 0x00, 0x00, 0x08, 0x09, 0x00, + 0x01, 0x00, 0x19, 0x35, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x1a, 0x36, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x1b, 0x37, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x08, 0x24, 0x00, + 0x01, 0x00, 0x35, 0x19, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x37, 0x1b, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x24, 0x00, 0x01, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x08, 0x24, 0x00, + 0x01, 0x00, 0x06, 0x20, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x08, 0x20, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8c, 0x00, 0x00, 0x08, 0x08, 0x00, 0x01, 0x00, 0x20, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x20, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8e, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x01, 0x00, 0x04, 0x21, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x21, 0x04, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x22, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x04, 0x22, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x01, 0x00, 0x08, 0x00, 0x01, 0x00, 0x22, 0x04, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x02, 0x00, 0x04, 0x15, 0x00, 0x00, 0x04, 0x08, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x08, 0x08, 0x00, 0x02, 0x00, 0x19, 0x35, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x24, 0x00, 0x02, 0x00, 0x1a, 0x36, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x24, 0x00, 0x02, 0x00, 0x1b, 0x37, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x02, 0x00, 0x1c, 0x38, 0x00, 0x00, 0x09, 0x08, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x08, 0x24, 0x00, 0x02, 0x00, 0x35, 0x19, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa2, 0x00, 0x00, 0x00, 0x24, 0x00, 0x02, 0x00, 0x36, 0x1a, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x24, 0x00, 0x02, 0x00, 0x37, 0x1b, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x02, 0x00, 0x38, 0x1c, 0x00, 0x00, 0x08, 0x09, 0x00, 0x00, 0xa3, 0x00, 0x00, 0x08, 0x24, 0x00, 0x03, 0x00, 0x02, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x03, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x04, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb6, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x03, 0x00, 0x03, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb7, 0x00, 0x01, 0x00, 0x08, 0x00, 0x03, 0x00, 0x04, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb7, 0x00, 0x01, 0x08, 0x08, 0x00, 0x04, 0x00, 0x02, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbe, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x03, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbe, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x04, 0x00, 0x04, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbe, 0x00, 0x01, 0x08, 0x08, 0x00, 0x04, 0x00, 0x03, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbf, 0x00, 0x01, 0x00, 0x08, 0x00, 0x04, 0x00, 0x04, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbf, 0x00, 0x01, 0x08, 0x08, 0x00, 0x05, 0x00, 0x04, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x63, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x06, 0x00, 0x1a, 0x02, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x24, 0x00, 0x06, 0x00, 0x1b, 0x03, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x24, 0x00, 0x06, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0x90, 0x00, 0x00, 0x08, 0x24, 0x00, 0x06, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x86, 0x00, 0x00, 0x40, 0x08, 0x00, + 0x06, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x40, 0x08, 0x00, 0x06, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x40, 0x08, 0x00, 0x06, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x87, 0x00, 0x00, 0x48, 0x08, 0x00, 0x07, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x50, 0x00, 0x00, 0x04, 0x04, 0x00, 0x07, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x00, 0x05, 0x00, 0x07, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x06, 0x00, 0x04, 0x05, 0x00, 0x07, 0x00, 0x16, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x6a, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x07, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00, 0x14, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x68, 0x00, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xa0, 0x00, 0x01, 0x00, 0x04, 0x00, 0x07, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xa8, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x08, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x00, 0x04, 0x00, 0x08, 0x00, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x58, 0x00, 0x00, 0x04, 0x04, 0x00, 0x08, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x00, 0x05, 0x00, 0x08, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x00, 0x04, 0x05, 0x00, + 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xa1, 0x00, 0x01, 0x00, 0x04, 0x00, 0x08, 0x00, 0x20, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xa9, 0x00, 0x01, 0x00, 0x04, 0x00, 0x09, 0x00, 0x02, 0x09, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x08, 0x00, 0x09, 0x00, 0x03, 0x09, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x09, 0x00, 0x04, 0x09, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x8d, 0x00, 0x00, 0x08, 0x08, 0x00, 0x0a, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0a, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0a, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x40, 0x08, 0x00, + 0x0a, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x48, 0x08, 0x00, 0x0a, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0a, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0a, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x00, 0x08, 0x08, 0x00, 0x0a, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0a, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x0a, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x08, 0x24, 0x00, 0x0a, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x00, 0x00, 0x40, 0x09, 0x00, 0x0a, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x00, 0x00, 0x40, 0x09, 0x00, 0x0a, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x00, 0x00, 0x40, 0x09, 0x00, + 0x0a, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x00, 0x00, 0x48, 0x09, 0x00, 0x0a, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x00, 0x00, 0x40, 0x09, 0x00, 0x0a, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x00, 0x00, 0x40, 0x09, 0x00, 0x0a, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x00, 0x00, 0x48, 0x09, 0x00, + 0x0b, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0b, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0b, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0b, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x00, 0x48, 0x08, 0x00, + 0x0b, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0b, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0b, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0b, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x13, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x0b, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0b, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0b, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x15, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0b, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x15, 0x00, 0x00, 0x08, 0x24, 0x00, + 0x0b, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x02, 0x00, 0x40, 0x09, 0x00, 0x0b, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x02, 0x00, 0x40, 0x09, 0x00, 0x0b, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x02, 0x00, 0x40, 0x09, 0x00, 0x0b, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x02, 0x00, 0x48, 0x09, 0x00, + 0x0b, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x02, 0x00, 0x40, 0x09, 0x00, 0x0b, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x02, 0x00, 0x40, 0x09, 0x00, 0x0b, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x02, 0x00, 0x48, 0x09, 0x00, 0x0c, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x28, 0x00, 0x00, 0x40, 0x08, 0x00, + 0x0c, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0c, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0c, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x00, 0x48, 0x08, 0x00, 0x0c, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0c, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0c, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x00, 0x08, 0x08, 0x00, 0x0c, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x2c, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x0c, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0c, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0c, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x2d, 0x00, 0x00, 0x08, 0x24, 0x00, 0x0c, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x05, 0x00, 0x40, 0x09, 0x00, + 0x0c, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x05, 0x00, 0x40, 0x09, 0x00, 0x0c, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x05, 0x00, 0x40, 0x09, 0x00, 0x0c, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x05, 0x00, 0x48, 0x09, 0x00, 0x0c, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x05, 0x00, 0x40, 0x09, 0x00, + 0x0c, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x05, 0x00, 0x40, 0x09, 0x00, 0x0c, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x05, 0x00, 0x48, 0x09, 0x00, 0x0d, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x18, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0d, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x40, 0x08, 0x00, + 0x0d, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x40, 0x08, 0x00, 0x0d, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x19, 0x00, 0x00, 0x48, 0x08, 0x00, 0x0d, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x0d, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x0d, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1b, 0x00, 0x00, 0x08, 0x08, 0x00, 0x0d, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0d, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x0d, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x00, 0x24, 0x00, 0x0d, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x1d, 0x00, 0x00, 0x08, 0x24, 0x00, 0x0d, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x03, 0x00, 0x40, 0x09, 0x00, 0x0d, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x03, 0x00, 0x40, 0x09, 0x00, + 0x0d, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x03, 0x00, 0x40, 0x09, 0x00, 0x0d, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x03, 0x00, 0x48, 0x09, 0x00, 0x0d, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x03, 0x00, 0x40, 0x09, 0x00, 0x0d, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x03, 0x00, 0x40, 0x09, 0x00, + 0x0d, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x03, 0x00, 0x48, 0x09, 0x00, 0x0e, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x04, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x04, 0x00, 0x00, 0x05, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x04, 0x00, 0x08, 0x05, 0x00, 0x0f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x05, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x05, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x05, 0x00, 0x00, 0x05, 0x00, + 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x05, 0x00, 0x08, 0x05, 0x00, 0x0f, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xaf, 0x00, 0x01, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xaf, 0x00, 0x01, 0x00, 0x08, 0x00, 0x0f, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xaf, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x0f, 0x00, 0x02, 0x06, 0x16, 0x00, 0x02, 0x01, 0x05, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x03, 0x07, 0x16, 0x00, 0x02, 0x01, 0x05, 0x00, 0x6b, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x04, 0x08, 0x16, 0x00, 0x02, 0x01, 0x05, 0x00, 0x6b, 0x00, 0x00, 0x08, 0x0c, 0x00, 0x0f, 0x00, 0x02, 0x06, 0x13, 0x00, 0x02, 0x01, 0x06, 0x00, 0x69, 0x00, 0x00, 0x00, 0x0c, 0x00, + 0x0f, 0x00, 0x03, 0x07, 0x14, 0x00, 0x02, 0x01, 0x07, 0x00, 0x69, 0x00, 0x00, 0x00, 0x0c, 0x00, 0x0f, 0x00, 0x04, 0x08, 0x14, 0x00, 0x02, 0x01, 0x07, 0x00, 0x69, 0x00, 0x00, 0x08, 0x0c, 0x00, 0x10, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x06, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x06, 0x00, 0x00, 0x05, 0x00, + 0x10, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x06, 0x00, 0x00, 0x05, 0x00, 0x10, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x06, 0x00, 0x08, 0x05, 0x00, 0x11, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x07, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x07, 0x00, 0x00, 0x05, 0x00, + 0x11, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x07, 0x00, 0x00, 0x05, 0x00, 0x11, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x07, 0x00, 0x08, 0x05, 0x00, 0x12, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, 0x12, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x06, 0x00, + 0x12, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfe, 0x00, 0x00, 0x40, 0x05, 0x00, 0x12, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x40, 0x05, 0x00, 0x12, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x40, 0x05, 0x00, 0x12, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x00, 0x00, 0x48, 0x05, 0x00, + 0x13, 0x00, 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x06, 0x00, 0x13, 0x00, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x48, 0x00, 0x00, 0x00, 0x06, 0x00, 0x13, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xfe, 0x01, 0x00, 0x40, 0x05, 0x00, 0x13, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x40, 0x05, 0x00, + 0x13, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x40, 0x05, 0x00, 0x13, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x01, 0x00, 0x48, 0x05, 0x00, 0x14, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x03, 0x00, 0x40, 0x05, 0x00, 0x14, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x03, 0x00, 0x40, 0x05, 0x00, + 0x14, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x03, 0x00, 0x40, 0x05, 0x00, 0x14, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x03, 0x00, 0x48, 0x05, 0x00, 0x15, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x08, 0x00, 0x15, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x15, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x39, 0x00, 0x00, 0x00, 0x08, 0x00, 0x15, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x39, 0x00, 0x00, 0x08, 0x08, 0x00, 0x15, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x15, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x15, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x15, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x00, 0x08, 0x08, 0x00, 0x15, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x15, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x15, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x24, 0x00, 0x15, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x3d, 0x00, 0x00, 0x08, 0x24, 0x00, 0x15, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x07, 0x00, 0x00, 0x09, 0x00, 0x15, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x07, 0x00, 0x00, 0x09, 0x00, + 0x15, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x07, 0x00, 0x00, 0x09, 0x00, 0x15, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x07, 0x00, 0x08, 0x09, 0x00, 0x15, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x07, 0x00, 0x00, 0x09, 0x00, 0x15, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x07, 0x00, 0x00, 0x09, 0x00, + 0x15, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x07, 0x00, 0x08, 0x09, 0x00, 0x16, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x20, 0x00, 0x00, 0x40, 0x08, 0x00, 0x16, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x00, 0x40, 0x08, 0x00, 0x16, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x00, 0x40, 0x08, 0x00, + 0x16, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x00, 0x48, 0x08, 0x00, 0x16, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x08, 0x00, 0x16, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, 0x16, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x16, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x00, 0x08, 0x08, 0x00, 0x16, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x24, 0x00, 0x00, 0x00, 0x24, 0x00, 0x16, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, 0x16, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x16, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x25, 0x00, 0x00, 0x08, 0x24, 0x00, 0x16, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x04, 0x00, 0x40, 0x09, 0x00, 0x16, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x04, 0x00, 0x40, 0x09, 0x00, 0x16, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x04, 0x00, 0x40, 0x09, 0x00, + 0x16, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x04, 0x00, 0x48, 0x09, 0x00, 0x16, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x04, 0x00, 0x40, 0x09, 0x00, 0x16, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x04, 0x00, 0x40, 0x09, 0x00, 0x16, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x04, 0x00, 0x48, 0x09, 0x00, + 0x17, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x08, 0x00, 0x00, 0x40, 0x08, 0x00, 0x17, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x40, 0x08, 0x00, 0x17, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x40, 0x08, 0x00, 0x17, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x09, 0x00, 0x00, 0x48, 0x08, 0x00, + 0x17, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x00, 0x00, 0x08, 0x00, 0x17, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x17, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x00, 0x08, 0x00, 0x17, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x00, 0x08, 0x08, 0x00, + 0x17, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x24, 0x00, 0x17, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x24, 0x00, 0x17, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x24, 0x00, 0x17, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x08, 0x24, 0x00, + 0x17, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x01, 0x00, 0x40, 0x09, 0x00, 0x17, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x01, 0x00, 0x40, 0x09, 0x00, 0x17, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x01, 0x00, 0x40, 0x09, 0x00, 0x17, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x01, 0x00, 0x48, 0x09, 0x00, + 0x17, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x01, 0x00, 0x40, 0x09, 0x00, 0x17, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x01, 0x00, 0x40, 0x09, 0x00, 0x17, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x01, 0x00, 0x48, 0x09, 0x00, 0x18, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x30, 0x00, 0x00, 0x40, 0x08, 0x00, + 0x18, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x31, 0x00, 0x00, 0x40, 0x08, 0x00, 0x18, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x31, 0x00, 0x00, 0x40, 0x08, 0x00, 0x18, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x31, 0x00, 0x00, 0x48, 0x08, 0x00, 0x18, 0x00, 0x01, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x32, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x18, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x33, 0x00, 0x00, 0x00, 0x08, 0x00, 0x18, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x33, 0x00, 0x00, 0x08, 0x08, 0x00, 0x18, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0x34, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x18, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x24, 0x00, 0x18, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x35, 0x00, 0x00, 0x00, 0x24, 0x00, 0x18, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0x35, 0x00, 0x00, 0x08, 0x24, 0x00, 0x18, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x80, 0x06, 0x00, 0x40, 0x09, 0x00, + 0x18, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x81, 0x06, 0x00, 0x40, 0x09, 0x00, 0x18, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x06, 0x00, 0x40, 0x09, 0x00, 0x18, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x81, 0x06, 0x00, 0x48, 0x09, 0x00, 0x18, 0x00, 0x06, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x06, 0x00, 0x40, 0x09, 0x00, + 0x18, 0x00, 0x07, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x06, 0x00, 0x40, 0x09, 0x00, 0x18, 0x00, 0x08, 0x16, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x83, 0x06, 0x00, 0x48, 0x09, 0x00, 0x19, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf6, 0x02, 0x00, 0x40, 0x05, 0x00, 0x19, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x02, 0x00, 0x40, 0x05, 0x00, + 0x19, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x02, 0x00, 0x40, 0x05, 0x00, 0x19, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xf7, 0x02, 0x00, 0x48, 0x05, 0x00, 0x1a, 0x00, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x84, 0x00, 0x00, 0x00, 0x08, 0x00, 0x1a, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x08, 0x00, + 0x1a, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x00, 0x08, 0x00, 0x1a, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x85, 0x00, 0x00, 0x08, 0x08, 0x00, 0x1a, 0x00, 0x19, 0x12, 0x00, 0x00, 0x09, 0x05, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x24, 0x00, 0x1a, 0x00, 0x1a, 0x13, 0x00, 0x00, 0x09, 0x06, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x24, 0x00, + 0x1a, 0x00, 0x1b, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x00, 0x24, 0x00, 0x1a, 0x00, 0x1c, 0x14, 0x00, 0x00, 0x09, 0x07, 0x00, 0x00, 0xa9, 0x00, 0x00, 0x08, 0x24, 0x00, 0x1a, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xf6, 0x00, 0x00, 0x00, 0x09, 0x00, 0x1a, 0x00, 0x06, 0x13, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x09, 0x00, + 0x1a, 0x00, 0x07, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x00, 0x09, 0x00, 0x1a, 0x00, 0x08, 0x14, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0xf7, 0x00, 0x00, 0x08, 0x09, 0x00, 0x1b, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x04, 0x00, 0x00, 0x25, 0x00, 0x1b, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x04, 0x00, 0x00, 0x25, 0x00, + 0x1b, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x04, 0x00, 0x00, 0x09, 0x00, 0x1b, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x04, 0x00, 0x00, 0x25, 0x00, 0x1b, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x04, 0x00, 0x00, 0x25, 0x00, 0x1b, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x04, 0x00, 0x00, 0x09, 0x00, + 0x1b, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x04, 0x00, 0x00, 0x25, 0x00, 0x1b, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x04, 0x00, 0x00, 0x25, 0x00, 0x1b, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x04, 0x00, 0x00, 0x09, 0x00, 0x1b, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x04, 0x00, 0x08, 0x25, 0x00, + 0x1b, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x04, 0x00, 0x08, 0x25, 0x00, 0x1b, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x04, 0x00, 0x08, 0x09, 0x00, 0x1c, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x05, 0x00, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x05, 0x00, 0x00, 0x25, 0x00, + 0x1c, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x05, 0x00, 0x00, 0x09, 0x00, 0x1c, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x05, 0x00, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x05, 0x00, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x05, 0x00, 0x00, 0x09, 0x00, + 0x1c, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x05, 0x00, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x05, 0x00, 0x00, 0x25, 0x00, 0x1c, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x05, 0x00, 0x00, 0x09, 0x00, 0x1c, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x05, 0x00, 0x08, 0x25, 0x00, + 0x1c, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x05, 0x00, 0x08, 0x25, 0x00, 0x1c, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x05, 0x00, 0x08, 0x09, 0x00, 0x1d, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x07, 0x00, 0x00, 0x25, 0x00, 0x1d, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x07, 0x00, 0x00, 0x25, 0x00, + 0x1d, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x07, 0x00, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x07, 0x00, 0x00, 0x25, 0x00, 0x1d, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x07, 0x00, 0x00, 0x25, 0x00, 0x1d, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x07, 0x00, 0x00, 0x09, 0x00, + 0x1d, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x07, 0x00, 0x00, 0x25, 0x00, 0x1d, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x07, 0x00, 0x00, 0x25, 0x00, 0x1d, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x07, 0x00, 0x00, 0x09, 0x00, 0x1d, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x07, 0x00, 0x08, 0x25, 0x00, + 0x1d, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x07, 0x00, 0x08, 0x25, 0x00, 0x1d, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x07, 0x00, 0x08, 0x09, 0x00, 0x1e, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x25, 0x00, 0x1e, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x00, 0x00, 0x00, 0x25, 0x00, + 0x1e, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x09, 0x00, 0x1e, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x25, 0x00, 0x1e, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x25, 0x00, 0x1e, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x09, 0x00, + 0x1e, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x25, 0x00, 0x1e, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x25, 0x00, 0x1e, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x00, 0x09, 0x00, 0x1e, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x08, 0x25, 0x00, + 0x1e, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x08, 0x25, 0x00, 0x1e, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x00, 0x00, 0x08, 0x09, 0x00, 0x1f, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x01, 0x00, 0x00, 0x25, 0x00, 0x1f, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x01, 0x00, 0x00, 0x25, 0x00, + 0x1f, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x01, 0x00, 0x00, 0x09, 0x00, 0x1f, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x25, 0x00, 0x1f, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x01, 0x00, 0x00, 0x25, 0x00, 0x1f, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x09, 0x00, + 0x1f, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x00, 0x25, 0x00, 0x1f, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x01, 0x00, 0x00, 0x25, 0x00, 0x1f, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x00, 0x09, 0x00, 0x1f, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x01, 0x00, 0x08, 0x25, 0x00, + 0x1f, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x01, 0x00, 0x08, 0x25, 0x00, 0x1f, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x01, 0x00, 0x08, 0x09, 0x00, 0x20, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x02, 0x00, 0x00, 0x25, 0x00, 0x20, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0x25, 0x00, + 0x20, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x02, 0x00, 0x00, 0x09, 0x00, 0x20, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x02, 0x00, 0x00, 0x25, 0x00, 0x20, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x00, 0x25, 0x00, 0x20, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x02, 0x00, 0x00, 0x09, 0x00, + 0x20, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x02, 0x00, 0x00, 0x25, 0x00, 0x20, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x00, 0x25, 0x00, 0x20, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x02, 0x00, 0x00, 0x09, 0x00, 0x20, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x02, 0x00, 0x08, 0x25, 0x00, + 0x20, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x02, 0x00, 0x08, 0x25, 0x00, 0x20, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x02, 0x00, 0x08, 0x09, 0x00, 0x21, 0x00, 0x05, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd0, 0x03, 0x00, 0x00, 0x25, 0x00, 0x21, 0x00, 0x05, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd2, 0x03, 0x00, 0x00, 0x25, 0x00, + 0x21, 0x00, 0x05, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc0, 0x03, 0x00, 0x00, 0x09, 0x00, 0x21, 0x00, 0x06, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x03, 0x00, 0x00, 0x25, 0x00, 0x21, 0x00, 0x06, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x03, 0x00, 0x00, 0x25, 0x00, 0x21, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x03, 0x00, 0x00, 0x09, 0x00, + 0x21, 0x00, 0x07, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x03, 0x00, 0x00, 0x25, 0x00, 0x21, 0x00, 0x07, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x03, 0x00, 0x00, 0x25, 0x00, 0x21, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x03, 0x00, 0x00, 0x09, 0x00, 0x21, 0x00, 0x08, 0x1f, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd1, 0x03, 0x00, 0x08, 0x25, 0x00, + 0x21, 0x00, 0x08, 0x1d, 0x00, 0x00, 0x01, 0x09, 0x00, 0x00, 0xd3, 0x03, 0x00, 0x08, 0x25, 0x00, 0x21, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xc1, 0x03, 0x00, 0x08, 0x09, 0x00, 0x22, 0x00, 0x06, 0x02, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0xa4, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x22, 0x00, 0x07, 0x03, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0xa4, 0x00, 0x01, 0x00, 0x0c, 0x00, + 0x22, 0x00, 0x08, 0x04, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0xa4, 0x00, 0x01, 0x08, 0x0c, 0x00, 0x22, 0x00, 0x06, 0x02, 0x1d, 0x00, 0x01, 0x02, 0x09, 0x00, 0xa5, 0x00, 0x01, 0x00, 0x28, 0x00, 0x22, 0x00, 0x07, 0x03, 0x1d, 0x00, 0x01, 0x02, 0x09, 0x00, 0xa5, 0x00, 0x01, 0x00, 0x28, 0x00, 0x22, 0x00, 0x08, 0x04, 0x1d, 0x00, 0x01, 0x02, 0x09, 0x00, 0xa5, 0x00, 0x01, 0x08, 0x28, 0x00, + 0x23, 0x00, 0x06, 0x02, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0xac, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x23, 0x00, 0x07, 0x03, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0xac, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x23, 0x00, 0x08, 0x04, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0xac, 0x00, 0x01, 0x08, 0x0c, 0x00, 0x23, 0x00, 0x06, 0x02, 0x1d, 0x00, 0x01, 0x02, 0x09, 0x00, 0xad, 0x00, 0x01, 0x00, 0x28, 0x00, + 0x23, 0x00, 0x07, 0x03, 0x1d, 0x00, 0x01, 0x02, 0x09, 0x00, 0xad, 0x00, 0x01, 0x00, 0x28, 0x00, 0x23, 0x00, 0x08, 0x04, 0x1d, 0x00, 0x01, 0x02, 0x09, 0x00, 0xad, 0x00, 0x01, 0x08, 0x28, 0x00, 0x24, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0x01, 0x00, 0x08, 0x00, 0x24, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x24, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0x01, 0x08, 0x08, 0x00, 0x24, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x04, 0x01, 0x00, 0x09, 0x00, 0x24, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x04, 0x01, 0x00, 0x09, 0x00, 0x24, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x04, 0x01, 0x08, 0x09, 0x00, + 0x25, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xab, 0x00, 0x01, 0x40, 0x08, 0x00, 0x25, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xab, 0x00, 0x01, 0x40, 0x08, 0x00, 0x25, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xab, 0x00, 0x01, 0x48, 0x08, 0x00, 0x25, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x05, 0x01, 0x40, 0x09, 0x00, + 0x25, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x05, 0x01, 0x40, 0x09, 0x00, 0x25, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x05, 0x01, 0x48, 0x09, 0x00, 0x26, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb3, 0x00, 0x01, 0x40, 0x08, 0x00, 0x26, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb3, 0x00, 0x01, 0x40, 0x08, 0x00, + 0x26, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb3, 0x00, 0x01, 0x48, 0x08, 0x00, 0x26, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x06, 0x01, 0x40, 0x09, 0x00, 0x26, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x06, 0x01, 0x40, 0x09, 0x00, 0x26, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x06, 0x01, 0x48, 0x09, 0x00, + 0x27, 0x00, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xbb, 0x00, 0x01, 0x40, 0x08, 0x00, 0x27, 0x00, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xbb, 0x00, 0x01, 0x40, 0x08, 0x00, 0x27, 0x00, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xbb, 0x00, 0x01, 0x48, 0x08, 0x00, 0x27, 0x00, 0x06, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x07, 0x01, 0x40, 0x09, 0x00, + 0x27, 0x00, 0x07, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x07, 0x01, 0x40, 0x09, 0x00, 0x27, 0x00, 0x08, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0xba, 0x07, 0x01, 0x48, 0x09, 0x00, 0x28, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x01, 0x00, 0x08, 0x00, 0x28, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x28, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x01, 0x08, 0x08, 0x00, 0x29, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbd, 0x00, 0x01, 0x00, 0x08, 0x00, 0x29, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbd, 0x00, 0x01, 0x00, 0x08, 0x00, 0x29, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbd, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x2a, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb8, 0x00, 0x09, 0x00, 0x08, 0x00, 0x2a, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb8, 0x00, 0x09, 0x00, 0x08, 0x00, 0x2a, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb8, 0x00, 0x09, 0x08, 0x08, 0x00, 0x2b, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbd, 0x00, 0x09, 0x00, 0x08, 0x00, + 0x2b, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbd, 0x00, 0x09, 0x00, 0x08, 0x00, 0x2b, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbd, 0x00, 0x09, 0x08, 0x08, 0x00, 0x2c, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x09, 0x00, 0x08, 0x00, 0x2c, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x09, 0x00, 0x08, 0x00, + 0x2c, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xbc, 0x00, 0x09, 0x08, 0x08, 0x00, 0x2d, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xeb, 0x00, 0x00, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x2d, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x04, 0x00, 0x04, 0x05, 0x00, + 0x2d, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0x05, 0x00, 0x2d, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x05, 0x00, 0x00, 0x05, 0x00, 0x2d, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x05, 0x00, 0x08, 0x05, 0x00, 0x2e, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x2e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x87, 0x00, 0x01, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x2f, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x83, 0x00, 0x01, 0x00, 0x04, 0x00, 0x30, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x30, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x82, 0x00, 0x01, 0x00, 0x04, 0x00, 0x31, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x04, 0x00, 0x31, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x86, 0x00, 0x01, 0x00, 0x04, 0x00, 0x32, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x32, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x82, 0x00, 0x01, 0x00, 0x04, 0x00, 0x33, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x04, 0x00, 0x33, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x84, 0x00, 0x01, 0x00, 0x04, 0x00, 0x34, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x74, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x34, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x84, 0x00, 0x01, 0x00, 0x04, 0x00, 0x35, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x35, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x01, 0x00, 0x04, 0x00, 0x36, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x36, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x01, 0x00, 0x04, 0x00, 0x37, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x37, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x01, 0x00, 0x04, 0x00, 0x38, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x38, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x01, 0x00, 0x04, 0x00, 0x39, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x76, 0x00, 0x00, 0x00, 0x04, 0x00, 0x39, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x86, 0x00, 0x01, 0x00, 0x04, 0x00, 0x3a, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x72, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x3a, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x82, 0x00, 0x01, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x83, 0x00, 0x01, 0x00, 0x04, 0x00, 0x3c, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x77, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x3c, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x87, 0x00, 0x01, 0x00, 0x04, 0x00, 0x3d, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x73, 0x00, 0x00, 0x00, 0x04, 0x00, 0x3d, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x83, 0x00, 0x01, 0x00, 0x04, 0x00, 0x3e, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x3e, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x85, 0x00, 0x01, 0x00, 0x04, 0x00, 0x3f, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x75, 0x00, 0x00, 0x00, 0x04, 0x00, 0x3f, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x85, 0x00, 0x01, 0x00, 0x04, 0x00, 0x40, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7e, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x40, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8e, 0x00, 0x01, 0x00, 0x04, 0x00, 0x41, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x04, 0x00, 0x41, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8c, 0x00, 0x01, 0x00, 0x04, 0x00, 0x42, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7d, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x42, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8d, 0x00, 0x01, 0x00, 0x04, 0x00, 0x43, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x04, 0x00, 0x43, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8f, 0x00, 0x01, 0x00, 0x04, 0x00, 0x44, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x71, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x44, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x81, 0x00, 0x01, 0x00, 0x04, 0x00, 0x45, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x04, 0x00, 0x45, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x01, 0x00, 0x04, 0x00, 0x46, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x79, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x46, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x89, 0x00, 0x01, 0x00, 0x04, 0x00, 0x47, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x70, 0x00, 0x00, 0x00, 0x04, 0x00, 0x47, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x80, 0x00, 0x01, 0x00, 0x04, 0x00, 0x48, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x48, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x01, 0x00, 0x04, 0x00, 0x49, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7a, 0x00, 0x00, 0x00, 0x04, 0x00, 0x49, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8a, 0x00, 0x01, 0x00, 0x04, 0x00, 0x4a, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x7b, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x4a, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x8b, 0x00, 0x01, 0x00, 0x04, 0x00, 0x4b, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x78, 0x00, 0x00, 0x00, 0x04, 0x00, 0x4b, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x88, 0x00, 0x01, 0x00, 0x04, 0x00, 0x4c, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x4d, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x00, 0x04, 0x00, 0x4e, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe3, 0x00, 0x00, 0x08, 0x04, 0x00, 0x4f, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe2, 0x00, 0x00, 0x00, 0x04, 0x00, 0x50, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe1, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x51, 0x00, 0x17, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x04, 0x00, 0x52, 0x00, 0x18, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0xe8, 0x00, 0x00, 0x00, 0x04, 0x00, 0x52, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x02, 0x00, 0x04, 0x05, 0x00, 0x52, 0x00, 0x3c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x05, 0x00, + 0x52, 0x00, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x00, 0x05, 0x00, 0x52, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xff, 0x03, 0x00, 0x08, 0x05, 0x00, 0x53, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x53, 0x00, 0x13, 0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x54, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x10, 0x00, 0x00, 0x55, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x56, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x08, 0x00, 0x00, 0x57, 0x00, 0x12, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x04, 0x00, + 0x58, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x59, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x5a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x35, 0x00, 0x01, 0x00, 0x00, 0x00, 0x5e, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x97, 0x00, 0x01, 0x00, 0x04, 0x00, 0x5f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x93, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x60, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x92, 0x00, 0x01, 0x00, 0x04, 0x00, 0x61, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x00, 0x01, 0x00, 0x04, 0x00, 0x62, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x92, 0x00, 0x01, 0x00, 0x04, 0x00, 0x63, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x64, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x01, 0x00, 0x04, 0x00, 0x65, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x01, 0x00, 0x04, 0x00, 0x66, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x01, 0x00, 0x04, 0x00, 0x67, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x68, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x96, 0x00, 0x01, 0x00, 0x04, 0x00, 0x69, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x92, 0x00, 0x01, 0x00, 0x04, 0x00, 0x6a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x93, 0x00, 0x01, 0x00, 0x04, 0x00, 0x6b, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x97, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x6c, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x93, 0x00, 0x01, 0x00, 0x04, 0x00, 0x6d, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x95, 0x00, 0x01, 0x00, 0x04, 0x00, 0x6e, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x01, 0x00, 0x04, 0x00, 0x6f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x70, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x01, 0x00, 0x04, 0x00, 0x71, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x01, 0x00, 0x04, 0x00, 0x72, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x91, 0x00, 0x01, 0x00, 0x04, 0x00, 0x73, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x74, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x99, 0x00, 0x01, 0x00, 0x04, 0x00, 0x75, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x95, 0x00, 0x01, 0x00, 0x04, 0x00, 0x76, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x90, 0x00, 0x01, 0x00, 0x04, 0x00, 0x77, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x78, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9a, 0x00, 0x01, 0x00, 0x04, 0x00, 0x79, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x01, 0x00, 0x04, 0x00, 0x7a, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x98, 0x00, 0x01, 0x00, 0x04, 0x00, 0x7b, 0x00, 0x05, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x94, 0x00, 0x01, 0x00, 0x04, 0x00, + 0x7c, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x47, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7c, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x47, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7c, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x47, 0x00, 0x01, 0x08, 0x08, 0x00, 0x7d, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x7d, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7d, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x08, 0x08, 0x00, 0x7e, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7e, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x7e, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x08, 0x08, 0x00, 0x7f, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x46, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7f, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x46, 0x00, 0x01, 0x00, 0x08, 0x00, 0x7f, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x46, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x80, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x00, 0x08, 0x00, 0x80, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x00, 0x08, 0x00, 0x80, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x08, 0x08, 0x00, 0x81, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x81, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x08, 0x00, 0x81, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x01, 0x08, 0x08, 0x00, 0x82, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x01, 0x00, 0x08, 0x00, 0x82, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x82, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x01, 0x08, 0x08, 0x00, 0x83, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x08, 0x00, 0x83, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x08, 0x00, 0x83, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x84, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x00, 0x08, 0x00, 0x84, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x00, 0x08, 0x00, 0x84, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x08, 0x08, 0x00, 0x85, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x85, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x08, 0x00, 0x85, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x01, 0x08, 0x08, 0x00, 0x86, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x46, 0x00, 0x01, 0x00, 0x08, 0x00, 0x86, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x46, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x86, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x46, 0x00, 0x01, 0x08, 0x08, 0x00, 0x87, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x00, 0x08, 0x00, 0x87, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x00, 0x08, 0x00, 0x87, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x88, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x00, 0x08, 0x00, 0x88, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x00, 0x08, 0x00, 0x88, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x08, 0x08, 0x00, 0x89, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x47, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x89, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x47, 0x00, 0x01, 0x00, 0x08, 0x00, 0x89, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x47, 0x00, 0x01, 0x08, 0x08, 0x00, 0x8a, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8a, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x8a, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x43, 0x00, 0x01, 0x08, 0x08, 0x00, 0x8b, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8b, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8b, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x8c, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8c, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8c, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x01, 0x08, 0x08, 0x00, 0x8d, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x8d, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8d, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x01, 0x08, 0x08, 0x00, 0x8e, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8e, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x8e, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4d, 0x00, 0x01, 0x08, 0x08, 0x00, 0x8f, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8f, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x01, 0x00, 0x08, 0x00, 0x8f, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4f, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x90, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x41, 0x00, 0x01, 0x00, 0x08, 0x00, 0x90, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x41, 0x00, 0x01, 0x00, 0x08, 0x00, 0x90, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x41, 0x00, 0x01, 0x08, 0x08, 0x00, 0x91, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4b, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x91, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4b, 0x00, 0x01, 0x00, 0x08, 0x00, 0x91, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4b, 0x00, 0x01, 0x08, 0x08, 0x00, 0x92, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x49, 0x00, 0x01, 0x00, 0x08, 0x00, 0x92, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x49, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x92, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x49, 0x00, 0x01, 0x08, 0x08, 0x00, 0x93, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x00, 0x01, 0x00, 0x08, 0x00, 0x93, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x00, 0x01, 0x00, 0x08, 0x00, 0x93, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x45, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x94, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x08, 0x00, 0x94, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x08, 0x00, 0x94, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x40, 0x00, 0x01, 0x08, 0x08, 0x00, 0x95, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x95, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x08, 0x00, 0x95, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x01, 0x08, 0x08, 0x00, 0x96, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x08, 0x00, 0x96, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x96, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4a, 0x00, 0x01, 0x08, 0x08, 0x00, 0x97, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4b, 0x00, 0x01, 0x00, 0x08, 0x00, 0x97, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4b, 0x00, 0x01, 0x00, 0x08, 0x00, 0x97, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4b, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x98, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x48, 0x00, 0x01, 0x00, 0x08, 0x00, 0x98, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x48, 0x00, 0x01, 0x00, 0x08, 0x00, 0x98, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x48, 0x00, 0x01, 0x08, 0x08, 0x00, 0x99, 0x00, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x99, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x01, 0x00, 0x08, 0x00, 0x99, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x01, 0x08, 0x08, 0x00, 0x9a, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x80, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x80, 0x00, 0x00, + 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x90, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x80, 0x00, 0x00, 0x9d, 0x00, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x9d, 0x00, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x0d, 0x00, 0x08, 0x00, + 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x00, 0x00, 0x88, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x80, 0x00, 0x00, 0xa0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x80, 0x00, 0x00, 0xa1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x90, 0x00, 0x00, + 0xa2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x80, 0x00, 0x00, 0xa2, 0x00, 0x23, 0x27, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc2, 0x00, 0x0d, 0x00, 0x0c, 0x00, 0xa3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x88, 0x00, 0x00, 0xa4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x80, 0x00, 0x00, + 0xa5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0x00, 0x00, 0x80, 0x00, 0x00, 0xa6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x90, 0x00, 0x00, 0xa7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x80, 0x00, 0x00, 0xa8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x88, 0x00, 0x00, + 0xa9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xac, 0x00, 0x00, 0x80, 0x00, 0x00, 0xab, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x90, 0x00, 0x00, 0xac, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x80, 0x00, 0x00, + 0xad, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xad, 0x00, 0x00, 0x88, 0x00, 0x00, 0xae, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x80, 0x00, 0x00, 0xaf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x00, 0x80, 0x00, 0x00, 0xb0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x90, 0x00, 0x00, + 0xb1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x80, 0x00, 0x00, 0xb2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xab, 0x00, 0x00, 0x88, 0x00, 0x00, 0xb3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf5, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb7, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfa, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xb9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x00, 0xba, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9e, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x10, 0x00, 0x00, + 0xbd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x00, 0x00, 0x00, 0xbe, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9c, 0x00, 0x00, 0x04, 0x00, 0x00, 0xbf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x10, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0x00, 0x00, 0x04, 0x00, 0x00, 0xc2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc2, 0x00, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x01, 0x00, 0x05, 0x00, 0xc2, 0x00, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x01, 0x00, 0x05, 0x00, + 0xc2, 0x00, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x01, 0x08, 0x05, 0x00, 0xc3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc5, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xc6, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x08, 0x00, 0xc7, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xb9, 0x00, 0x01, 0x00, 0x08, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0b, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x00, 0x01, 0x00, 0x00, 0x00, + 0xca, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x31, 0x00, 0x01, 0x00, 0x00, 0x00, 0xcb, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf9, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x33, 0x00, 0x01, 0x00, 0x00, 0x00, 0xcd, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd0, 0x01, 0x00, 0x00, 0x00, + 0xce, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd1, 0x01, 0x00, 0x00, 0x00, 0xcf, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x10, 0x00, 0x00, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x98, 0x00, 0x00, 0x08, 0x00, 0x00, + 0xd2, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x10, 0x00, 0x00, 0xd3, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd4, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x99, 0x00, 0x00, 0x08, 0x00, 0x00, 0xd5, 0x00, 0x03, 0x03, 0x07, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf2, 0x00, 0x52, 0x01, 0x0c, 0x00, + 0xd5, 0x00, 0x04, 0x04, 0x08, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf2, 0x00, 0x92, 0x01, 0x0c, 0x00, 0xd6, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x52, 0x01, 0x0c, 0x00, 0xd6, 0x00, 0x04, 0x08, 0x04, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x92, 0x01, 0x0c, 0x00, 0xd7, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xf3, 0x03, 0x52, 0x01, 0x09, 0x00, + 0xd7, 0x00, 0x04, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xf3, 0x03, 0x92, 0x01, 0x09, 0x00, 0xd8, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xf3, 0x02, 0x52, 0x01, 0x09, 0x00, 0xd8, 0x00, 0x04, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xf3, 0x02, 0x92, 0x01, 0x09, 0x00, 0xd9, 0x00, 0x03, 0x07, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xf3, 0x01, 0x52, 0x01, 0x09, 0x00, + 0xd9, 0x00, 0x04, 0x08, 0x00, 0x00, 0x03, 0x01, 0x00, 0x00, 0xf3, 0x01, 0x92, 0x01, 0x09, 0x00, 0xda, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf5, 0x00, 0x52, 0x01, 0x0c, 0x00, 0xda, 0x00, 0x04, 0x08, 0x04, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf5, 0x00, 0x92, 0x01, 0x0c, 0x00, 0xdb, 0x00, 0x03, 0x03, 0x07, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf5, 0x00, 0x5e, 0x01, 0x0c, 0x00, + 0xdb, 0x00, 0x04, 0x04, 0x08, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf5, 0x00, 0x9e, 0x01, 0x0c, 0x00, 0xdc, 0x00, 0x03, 0x03, 0x07, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf5, 0x00, 0x5a, 0x01, 0x0c, 0x00, 0xdc, 0x00, 0x04, 0x04, 0x08, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf5, 0x00, 0x9a, 0x01, 0x0c, 0x00, 0xdd, 0x00, 0x03, 0x07, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xf0, 0x00, 0x5f, 0x01, 0x0c, 0x00, + 0xdd, 0x00, 0x04, 0x08, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xf0, 0x00, 0x9f, 0x01, 0x0c, 0x00, 0xde, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x5a, 0x01, 0x0c, 0x00, 0xde, 0x00, 0x04, 0x08, 0x04, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x9a, 0x01, 0x0c, 0x00, 0xdf, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x56, 0x01, 0x0c, 0x00, + 0xdf, 0x00, 0x04, 0x08, 0x04, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xe0, 0x00, 0x03, 0x07, 0x03, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x5e, 0x01, 0x0c, 0x00, 0xe0, 0x00, 0x04, 0x08, 0x04, 0x00, 0x02, 0x01, 0x03, 0x00, 0xf7, 0x00, 0x9e, 0x01, 0x0c, 0x00, 0xe1, 0x00, 0x03, 0x03, 0x07, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf6, 0x00, 0x5e, 0x01, 0x0c, 0x00, + 0xe1, 0x00, 0x04, 0x04, 0x08, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf6, 0x00, 0x9e, 0x01, 0x0c, 0x00, 0xe2, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x06, 0x00, 0x08, 0x00, 0xe2, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x06, 0x08, 0x08, 0x00, 0xe3, 0x00, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x0a, 0x00, 0x08, 0x00, + 0xe3, 0x00, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x0a, 0x08, 0x08, 0x00, 0xe4, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x01, 0x00, 0x08, 0x00, 0xe4, 0x00, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x01, 0x00, 0x08, 0x00, 0xe5, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xe5, 0x00, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x01, 0x00, 0x08, 0x00, 0xe6, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x05, 0x00, 0x08, 0x00, 0xe6, 0x00, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x05, 0x00, 0x08, 0x00, 0xe7, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x05, 0x00, 0x08, 0x00, + 0xe7, 0x00, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x05, 0x00, 0x08, 0x00, 0xe8, 0x00, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x09, 0x00, 0x08, 0x00, 0xe8, 0x00, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x09, 0x00, 0x08, 0x00, 0xe9, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x05, 0x00, 0x08, 0x00, + 0xe9, 0x00, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x05, 0x00, 0x08, 0x00, 0xea, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x09, 0x00, 0x08, 0x00, 0xea, 0x00, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x09, 0x00, 0x08, 0x00, 0xeb, 0x00, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x7e, 0x00, 0x09, 0x00, 0x08, 0x00, + 0xeb, 0x00, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xd6, 0x00, 0x05, 0x00, 0x08, 0x00, 0xeb, 0x00, 0x2b, 0x2c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x01, 0x00, 0x08, 0x00, 0xeb, 0x00, 0x2c, 0x2b, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x01, 0x00, 0x08, 0x00, 0xeb, 0x00, 0x04, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7e, 0x00, 0x05, 0x08, 0x08, 0x00, + 0xeb, 0x00, 0x23, 0x04, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x05, 0x08, 0x08, 0x00, 0xec, 0x00, 0x23, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x05, 0x00, 0x08, 0x00, 0xec, 0x00, 0x07, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7e, 0x00, 0x05, 0x00, 0x08, 0x00, 0xec, 0x00, 0x2b, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xec, 0x00, 0x07, 0x2b, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7e, 0x00, 0x01, 0x00, 0x08, 0x00, 0xed, 0x00, 0x23, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0xed, 0x00, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x01, 0x00, 0x08, 0x00, 0xee, 0x00, 0x23, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x16, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xee, 0x00, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x17, 0x00, 0x01, 0x00, 0x08, 0x00, 0xef, 0x00, 0x23, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x05, 0x00, 0x08, 0x00, 0xef, 0x00, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x05, 0x00, 0x08, 0x00, 0xf0, 0x00, 0x23, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x16, 0x00, 0x05, 0x00, 0x08, 0x00, + 0xf0, 0x00, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x17, 0x00, 0x05, 0x00, 0x08, 0x00, 0xf1, 0x00, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x16, 0x00, 0x01, 0x00, 0x08, 0x00, 0xf2, 0x00, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x01, 0x00, 0x08, 0x00, 0xf3, 0x00, 0x03, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xf3, 0x00, 0x04, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x01, 0x08, 0x08, 0x00, 0xf4, 0x00, 0x03, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x05, 0x00, 0x08, 0x00, 0xf4, 0x00, 0x04, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x05, 0x08, 0x08, 0x00, 0xf5, 0x00, 0x0f, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xf6, 0x00, 0x0f, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x05, 0x00, 0x08, 0x00, 0xf7, 0x00, 0x0f, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xe7, 0x00, 0x05, 0x00, 0x08, 0x00, 0xf8, 0x00, 0x23, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x06, 0x00, 0x08, 0x00, 0xf9, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xfa, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x05, 0x00, 0x08, 0x00, 0xfb, 0x00, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x09, 0x00, 0x08, 0x00, 0xfc, 0x00, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x0d, 0x00, 0x08, 0x00, 0xfd, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5c, 0x00, 0x01, 0x00, 0x08, 0x00, + 0xfe, 0x00, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5c, 0x00, 0x05, 0x00, 0x08, 0x00, 0xff, 0x00, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5c, 0x00, 0x09, 0x00, 0x08, 0x00, 0x00, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5c, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x01, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x02, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x05, 0x00, 0x08, 0x00, 0x03, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x09, 0x00, 0x08, 0x00, 0x04, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x05, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5e, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x06, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5e, 0x00, 0x05, 0x00, 0x08, 0x00, 0x07, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5e, 0x00, 0x09, 0x00, 0x08, 0x00, 0x08, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5e, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x09, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x0a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x05, 0x00, 0x08, 0x00, 0x0b, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x09, 0x00, 0x08, 0x00, 0x0c, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x0d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x53, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x0e, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x53, 0x00, 0x09, 0x00, 0x08, 0x00, 0x0f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x52, 0x00, 0x01, 0x00, 0x08, 0x00, 0x10, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x52, 0x00, 0x09, 0x00, 0x08, 0x00, 0x11, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5f, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x12, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5f, 0x00, 0x05, 0x00, 0x08, 0x00, 0x13, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5f, 0x00, 0x09, 0x00, 0x08, 0x00, 0x14, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5f, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x15, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x16, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x05, 0x00, 0x08, 0x00, 0x17, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x09, 0x00, 0x08, 0x00, 0x18, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5d, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x19, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x54, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x1a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x54, 0x00, 0x05, 0x00, 0x08, 0x00, 0x1b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x55, 0x00, 0x01, 0x00, 0x08, 0x00, 0x1c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x55, 0x00, 0x05, 0x00, 0x08, 0x00, 0x1d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x56, 0x00, 0x01, 0x00, 0x08, 0x00, + 0x1e, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x56, 0x00, 0x05, 0x00, 0x08, 0x00, 0x1f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x57, 0x00, 0x01, 0x00, 0x08, 0x00, 0x20, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x57, 0x00, 0x05, 0x00, 0x08, 0x00, 0x21, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc2, 0x00, 0x01, 0x00, 0x0c, 0x00, + 0x22, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc2, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x23, 0x01, 0x23, 0x26, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc2, 0x00, 0x09, 0x00, 0x0c, 0x00, 0x24, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2f, 0x00, 0x01, 0x00, 0x08, 0x00, 0x25, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2f, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x26, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x01, 0x00, 0x08, 0x00, 0x27, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x05, 0x00, 0x08, 0x00, 0x28, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc6, 0x00, 0x01, 0x00, 0x0c, 0x00, 0x29, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc6, 0x00, 0x05, 0x00, 0x0c, 0x00, + 0x2a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x14, 0x00, 0x01, 0x00, 0x08, 0x00, 0x2b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x15, 0x00, 0x01, 0x00, 0x08, 0x00, 0x2c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x14, 0x00, 0x05, 0x00, 0x08, 0x00, 0x2d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x15, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x2e, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x01, 0x00, 0x08, 0x00, 0x2f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x05, 0x00, 0x08, 0x00, 0x30, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x09, 0x00, 0x08, 0x00, 0x31, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x0d, 0x00, 0x08, 0x00, + 0x32, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x05, 0x00, 0x08, 0x00, 0x33, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x34, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x01, 0x00, 0x08, 0x00, 0x35, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x09, 0x00, 0x08, 0x00, + 0x36, 0x01, 0x03, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x09, 0x00, 0x08, 0x00, 0x36, 0x01, 0x04, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x09, 0x08, 0x08, 0x00, 0x37, 0x01, 0x03, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x37, 0x01, 0x04, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x0d, 0x08, 0x08, 0x00, + 0x38, 0x01, 0x23, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x09, 0x00, 0x08, 0x00, 0x38, 0x01, 0x23, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x09, 0x08, 0x08, 0x00, 0x39, 0x01, 0x23, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x39, 0x01, 0x23, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x0d, 0x08, 0x08, 0x00, + 0x3a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x09, 0x00, 0x08, 0x00, 0x3b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x05, 0x00, 0x08, 0x00, 0x3c, 0x01, 0x03, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x09, 0x00, 0x08, 0x00, 0x3c, 0x01, 0x04, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x09, 0x08, 0x08, 0x00, + 0x3d, 0x01, 0x03, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x3d, 0x01, 0x04, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x0d, 0x08, 0x08, 0x00, 0x3e, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xfc, 0x00, 0x05, 0x00, 0x08, 0x00, 0x3f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xfd, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x40, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xfe, 0x00, 0x05, 0x00, 0x08, 0x00, 0x41, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd4, 0x00, 0x05, 0x00, 0x08, 0x00, 0x42, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x05, 0x00, 0x08, 0x00, 0x43, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf9, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x44, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xfa, 0x00, 0x05, 0x00, 0x08, 0x00, 0x45, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xfb, 0x00, 0x05, 0x00, 0x08, 0x00, 0x46, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xec, 0x00, 0x05, 0x00, 0x08, 0x00, 0x47, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xed, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x48, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdc, 0x00, 0x05, 0x00, 0x08, 0x00, 0x49, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdd, 0x00, 0x05, 0x00, 0x08, 0x00, 0x4a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe8, 0x00, 0x05, 0x00, 0x08, 0x00, 0x4b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe9, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x4c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd8, 0x00, 0x05, 0x00, 0x08, 0x00, 0x4d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd9, 0x00, 0x05, 0x00, 0x08, 0x00, 0x4e, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd5, 0x00, 0x05, 0x00, 0x08, 0x00, 0x4f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe5, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x50, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe4, 0x00, 0x05, 0x00, 0x08, 0x00, 0x51, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf4, 0x00, 0x05, 0x00, 0x08, 0x00, 0x52, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf5, 0x00, 0x05, 0x00, 0x08, 0x00, 0x53, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdb, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x54, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdf, 0x00, 0x05, 0x00, 0x08, 0x00, 0x55, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xeb, 0x00, 0x05, 0x00, 0x08, 0x00, 0x56, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xef, 0x00, 0x05, 0x00, 0x08, 0x00, 0x57, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf1, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x57, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x71, 0x06, 0x05, 0x00, 0x09, 0x00, 0x58, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf2, 0x00, 0x05, 0x00, 0x08, 0x00, 0x58, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x72, 0x06, 0x05, 0x00, 0x09, 0x00, 0x59, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf3, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x59, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x73, 0x06, 0x05, 0x00, 0x09, 0x00, 0x5a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd1, 0x00, 0x05, 0x00, 0x08, 0x00, 0x5a, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x71, 0x02, 0x05, 0x00, 0x09, 0x00, 0x5b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd2, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x5b, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x72, 0x02, 0x05, 0x00, 0x09, 0x00, 0x5c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd3, 0x00, 0x05, 0x00, 0x08, 0x00, 0x5c, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x73, 0x02, 0x05, 0x00, 0x09, 0x00, 0x5d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe1, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x5d, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x71, 0x04, 0x05, 0x00, 0x09, 0x00, 0x5e, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe2, 0x00, 0x05, 0x00, 0x08, 0x00, 0x5e, 0x01, 0x23, 0x12, 0x00, 0x00, 0x01, 0x05, 0x00, 0x00, 0x72, 0x04, 0x05, 0x00, 0x09, 0x00, 0x5f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x74, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x60, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x75, 0x00, 0x05, 0x00, 0x08, 0x00, 0x61, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x76, 0x00, 0x05, 0x00, 0x08, 0x00, 0x62, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x64, 0x00, 0x05, 0x00, 0x08, 0x00, 0x63, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x65, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x64, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x66, 0x00, 0x05, 0x00, 0x08, 0x00, 0x65, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x63, 0x00, 0x05, 0x00, 0x08, 0x00, 0x66, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6b, 0x00, 0x05, 0x00, 0x08, 0x00, 0x67, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x67, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x68, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x60, 0x00, 0x05, 0x00, 0x08, 0x00, 0x69, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x61, 0x00, 0x05, 0x00, 0x08, 0x00, 0x6a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x62, 0x00, 0x05, 0x00, 0x08, 0x00, 0x6b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6c, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x6c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x68, 0x00, 0x05, 0x00, 0x08, 0x00, 0x6d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x69, 0x00, 0x05, 0x00, 0x08, 0x00, 0x6e, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6a, 0x00, 0x05, 0x00, 0x08, 0x00, 0x6f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6d, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x70, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x71, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x09, 0x00, 0x0c, 0x00, 0x72, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x0d, 0x00, 0x0c, 0x00, 0x73, 0x01, 0x2b, 0x2c, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x01, 0x00, 0x0c, 0x00, + 0x74, 0x01, 0x03, 0x23, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc5, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x74, 0x01, 0x04, 0x23, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc5, 0x00, 0x05, 0x08, 0x0c, 0x00, 0x75, 0x01, 0x23, 0x03, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc4, 0x00, 0x05, 0x00, 0x0c, 0x00, 0x75, 0x01, 0x23, 0x0b, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc4, 0x00, 0x05, 0x00, 0x0c, 0x00, + 0x76, 0x01, 0x03, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd7, 0x00, 0x05, 0x00, 0x08, 0x00, 0x76, 0x01, 0x04, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd7, 0x00, 0x05, 0x08, 0x08, 0x00, 0x77, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe0, 0x00, 0x05, 0x00, 0x08, 0x00, 0x78, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe3, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x79, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xde, 0x00, 0x05, 0x00, 0x08, 0x00, 0x7a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xee, 0x00, 0x05, 0x00, 0x08, 0x00, 0x7b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xda, 0x00, 0x05, 0x00, 0x08, 0x00, 0x7c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xea, 0x00, 0x05, 0x00, 0x08, 0x00, + 0x7d, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf6, 0x00, 0x05, 0x00, 0x08, 0x00, 0x7e, 0x01, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf7, 0x00, 0x05, 0x00, 0x08, 0x00, 0x7f, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xe8, 0x01, 0x00, 0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xf8, 0x01, 0x00, 0x00, 0x00, + 0x81, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xae, 0xf0, 0x01, 0x00, 0x00, 0x00, 0x82, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, 0x00, 0x08, 0x00, 0x00, 0x00, 0x83, 0x01, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x07, 0x01, 0x00, 0x05, 0x00, 0x84, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd0, 0x00, 0x0d, 0x00, 0x08, 0x00, + 0x85, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd0, 0x00, 0x05, 0x00, 0x08, 0x00, 0x86, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x87, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x7c, 0x00, 0x05, 0x00, 0x08, 0x00, 0x88, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x7d, 0x00, 0x0d, 0x00, 0x08, 0x00, + 0x89, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x7d, 0x00, 0x05, 0x00, 0x08, 0x00, 0x8a, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x8b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x09, 0x00, 0x08, 0x00, 0x8c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x16, 0x00, 0x09, 0x00, 0x08, 0x00, + 0x8d, 0x01, 0x23, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x0d, 0x00, 0x08, 0x00, 0x8e, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x08, 0x00, 0x8f, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x01, 0x00, 0x06, 0x00, 0x08, 0x00, 0x90, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x00, 0x06, 0x00, 0x08, 0x00, + 0x91, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x06, 0x00, 0x08, 0x00, 0x92, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x05, 0x00, 0x06, 0x00, 0x08, 0x00, 0x93, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x06, 0x00, 0x06, 0x00, 0x08, 0x00, 0x94, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x07, 0x00, 0x06, 0x00, 0x08, 0x00, + 0x95, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x04, 0x00, 0x06, 0x00, 0x08, 0x00, 0x96, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0b, 0x00, 0x06, 0x00, 0x08, 0x00, 0x97, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x08, 0x00, 0x06, 0x00, 0x08, 0x00, 0x98, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x09, 0x00, 0x06, 0x00, 0x08, 0x00, + 0x99, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x06, 0x00, 0x08, 0x00, 0x9a, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x06, 0x00, 0x08, 0x00, 0x9b, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x06, 0x00, 0x08, 0x00, 0x9c, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x06, 0x00, 0x08, 0x00, + 0x9d, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x0f, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x9e, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x0c, 0x00, 0x07, 0x00, 0x0c, 0x00, 0x9f, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x0d, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xa0, 0x01, 0x23, 0x28, 0x2f, 0x00, 0x02, 0x01, 0x09, 0x00, 0x14, 0x00, 0x06, 0x00, 0x28, 0x00, + 0xa1, 0x01, 0x23, 0x28, 0x2f, 0x00, 0x02, 0x01, 0x09, 0x00, 0x15, 0x00, 0x06, 0x00, 0x28, 0x00, 0xa2, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x0e, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xa3, 0x01, 0x23, 0x28, 0x2f, 0x00, 0x02, 0x01, 0x09, 0x00, 0x10, 0x00, 0x06, 0x00, 0x28, 0x00, 0xa4, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x40, 0x00, 0x07, 0x00, 0x0c, 0x00, + 0xa5, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x41, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xa6, 0x01, 0x07, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x17, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xa7, 0x01, 0x23, 0x26, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x21, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xa8, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x42, 0x00, 0x07, 0x00, 0x0c, 0x00, + 0xa9, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2b, 0x00, 0x06, 0x00, 0x08, 0x00, 0xaa, 0x01, 0x05, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x14, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xab, 0x01, 0x07, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x16, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xac, 0x01, 0x08, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x16, 0x00, 0x07, 0x08, 0x0c, 0x00, + 0xad, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x41, 0x00, 0x06, 0x00, 0x08, 0x00, 0xae, 0x01, 0x23, 0x05, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x20, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xaf, 0x01, 0x23, 0x07, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x22, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xb0, 0x01, 0x23, 0x08, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x22, 0x00, 0x07, 0x08, 0x0c, 0x00, + 0xb1, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3c, 0x00, 0x06, 0x00, 0x08, 0x00, 0xb2, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3d, 0x00, 0x06, 0x00, 0x08, 0x00, 0xb3, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3e, 0x00, 0x06, 0x00, 0x08, 0x00, 0xb4, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3f, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xb5, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0x06, 0x00, 0x08, 0x00, 0xb6, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x08, 0x00, 0xb7, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3a, 0x00, 0x06, 0x00, 0x08, 0x00, 0xb8, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x3b, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xb9, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x20, 0x00, 0x06, 0x00, 0x08, 0x00, 0xba, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbb, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x22, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbc, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xbd, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x24, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbe, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x25, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbf, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x30, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc0, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x31, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xc1, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x32, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc2, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x33, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc3, 0x01, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x34, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc4, 0x01, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x35, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xc5, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc6, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x40, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc7, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x17, 0x00, 0x06, 0x00, 0x08, 0x00, 0xc8, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x08, 0x00, 0x07, 0x00, 0x0c, 0x00, + 0xc9, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x09, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xca, 0x01, 0x23, 0x26, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x0a, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xcb, 0x01, 0x23, 0x27, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x0b, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xcc, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xcd, 0x01, 0x03, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xcd, 0x01, 0x03, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf1, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xcd, 0x01, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf1, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xcd, 0x01, 0x04, 0x05, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x0e, 0x08, 0x08, 0x00, + 0xcd, 0x01, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf1, 0x00, 0x0e, 0x08, 0x08, 0x00, 0xce, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x61, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xcf, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x60, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xd0, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x63, 0x00, 0x07, 0x00, 0x0c, 0x00, + 0xd1, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x62, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xd2, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x37, 0x00, 0x06, 0x00, 0x08, 0x00, 0xd3, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x44, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xd4, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xde, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xd5, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdf, 0x00, 0x06, 0x00, 0x08, 0x00, 0xd6, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdc, 0x00, 0x06, 0x00, 0x08, 0x00, 0xd7, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdd, 0x00, 0x06, 0x00, 0x08, 0x00, 0xd8, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdb, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xd9, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xdf, 0x00, 0x07, 0x00, 0x0c, 0x00, 0xda, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc9, 0x00, 0x02, 0x00, 0x08, 0x00, 0xdb, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xca, 0x00, 0x02, 0x00, 0x08, 0x00, 0xdc, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc8, 0x00, 0x02, 0x00, 0x08, 0x00, + 0xdd, 0x01, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xcc, 0x00, 0x03, 0x00, 0x0c, 0x00, 0xde, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xcc, 0x00, 0x02, 0x00, 0x08, 0x00, 0xdf, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xcd, 0x00, 0x02, 0x00, 0x08, 0x00, 0xe0, 0x01, 0x23, 0x28, 0x2f, 0x00, 0x02, 0x01, 0x09, 0x00, 0xcb, 0x00, 0x02, 0x00, 0x28, 0x00, + 0xe1, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x58, 0x00, 0x11, 0x01, 0x0c, 0x00, 0xe1, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x58, 0x00, 0x11, 0x02, 0x0c, 0x00, 0xe2, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x58, 0x00, 0x15, 0x01, 0x0c, 0x00, 0xe2, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x58, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0xe3, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x58, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xe4, 0x01, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x58, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0xe5, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x00, 0x11, 0x01, 0x0c, 0x00, 0xe5, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x00, 0x11, 0x02, 0x0c, 0x00, + 0xe6, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x00, 0x15, 0x01, 0x0c, 0x00, 0xe6, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x00, 0x15, 0x02, 0x0c, 0x00, 0xe7, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xe8, 0x01, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5c, 0x00, 0x1d, 0x00, 0x0c, 0x00, + 0xe9, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x59, 0x00, 0x11, 0x01, 0x0c, 0x00, 0xe9, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x59, 0x00, 0x11, 0x02, 0x0c, 0x00, 0xea, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x59, 0x00, 0x15, 0x01, 0x0c, 0x00, 0xea, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x59, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0xeb, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x59, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xec, 0x01, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x59, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0xed, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5e, 0x00, 0x11, 0x01, 0x0c, 0x00, 0xed, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5e, 0x00, 0x11, 0x02, 0x0c, 0x00, + 0xee, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5e, 0x00, 0x15, 0x01, 0x0c, 0x00, 0xee, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5e, 0x00, 0x15, 0x02, 0x0c, 0x00, 0xef, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5e, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xf0, 0x01, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5e, 0x00, 0x1d, 0x00, 0x0c, 0x00, + 0xf1, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x11, 0x01, 0x08, 0x00, 0xf1, 0x01, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x11, 0x02, 0x08, 0x00, 0xf2, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x15, 0x01, 0x08, 0x00, 0xf2, 0x01, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x51, 0x00, 0x15, 0x02, 0x08, 0x00, + 0xf3, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x51, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xf4, 0x01, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x51, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0xf5, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x53, 0x00, 0x11, 0x01, 0x08, 0x00, 0xf5, 0x01, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x53, 0x00, 0x11, 0x02, 0x08, 0x00, + 0xf6, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x53, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xf7, 0x01, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x52, 0x00, 0x11, 0x01, 0x08, 0x00, 0xf7, 0x01, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x52, 0x00, 0x11, 0x02, 0x08, 0x00, 0xf8, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x52, 0x00, 0x19, 0x00, 0x0c, 0x00, + 0xf9, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5f, 0x00, 0x11, 0x01, 0x0c, 0x00, 0xf9, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5f, 0x00, 0x11, 0x02, 0x0c, 0x00, 0xfa, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5f, 0x00, 0x15, 0x01, 0x0c, 0x00, 0xfa, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5f, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0xfb, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5f, 0x00, 0x19, 0x00, 0x0c, 0x00, 0xfc, 0x01, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5f, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0xfd, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5d, 0x00, 0x11, 0x01, 0x0c, 0x00, 0xfd, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5d, 0x00, 0x11, 0x02, 0x0c, 0x00, + 0xfe, 0x01, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5d, 0x00, 0x15, 0x01, 0x0c, 0x00, 0xfe, 0x01, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5d, 0x00, 0x15, 0x02, 0x0c, 0x00, 0xff, 0x01, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5d, 0x00, 0x19, 0x00, 0x0c, 0x00, 0x00, 0x02, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5d, 0x00, 0x1d, 0x00, 0x0c, 0x00, + 0x01, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x54, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x01, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x54, 0x00, 0x11, 0x02, 0x0c, 0x00, 0x02, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x54, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x02, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x54, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0x03, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x55, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x03, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x55, 0x00, 0x11, 0x02, 0x0c, 0x00, 0x04, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x55, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x04, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x55, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0x05, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x56, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x05, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x56, 0x00, 0x11, 0x02, 0x0c, 0x00, 0x06, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x56, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x06, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x56, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0x07, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x57, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x07, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x57, 0x00, 0x11, 0x02, 0x0c, 0x00, 0x08, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x57, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x08, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x57, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0x09, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc2, 0x00, 0x11, 0x01, 0x10, 0x00, 0x09, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc2, 0x00, 0x11, 0x02, 0x10, 0x00, 0x0a, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc2, 0x00, 0x15, 0x01, 0x10, 0x00, 0x0a, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc2, 0x00, 0x15, 0x02, 0x10, 0x00, + 0x0b, 0x02, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc2, 0x00, 0x19, 0x00, 0x10, 0x00, 0x0c, 0x02, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc2, 0x00, 0x1d, 0x00, 0x10, 0x00, 0x0d, 0x02, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2f, 0x00, 0x11, 0x00, 0x08, 0x00, 0x0e, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2f, 0x00, 0x15, 0x00, 0x08, 0x00, + 0x0f, 0x02, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x11, 0x00, 0x08, 0x00, 0x10, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2e, 0x00, 0x15, 0x00, 0x08, 0x00, 0x11, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc6, 0x00, 0x11, 0x01, 0x10, 0x00, 0x11, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc6, 0x00, 0x11, 0x02, 0x10, 0x00, + 0x12, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc6, 0x00, 0x15, 0x01, 0x10, 0x00, 0x12, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc6, 0x00, 0x15, 0x02, 0x10, 0x00, 0x13, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x13, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x11, 0x02, 0x0c, 0x00, + 0x14, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x14, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x11, 0x02, 0x0c, 0x00, 0x15, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x15, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x15, 0x02, 0x0c, 0x00, + 0x16, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x16, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x17, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0c, 0x00, 0x17, 0x01, 0x10, 0x00, 0x17, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0c, 0x00, 0x17, 0x02, 0x10, 0x00, + 0x18, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0d, 0x00, 0x17, 0x01, 0x10, 0x00, 0x18, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0d, 0x00, 0x17, 0x02, 0x10, 0x00, 0x19, 0x02, 0x23, 0x23, 0x28, 0x23, 0x02, 0x03, 0x01, 0x0a, 0x4a, 0x00, 0x57, 0x01, 0x10, 0x00, 0x19, 0x02, 0x24, 0x24, 0x29, 0x24, 0x02, 0x03, 0x01, 0x0a, 0x4a, 0x00, 0x57, 0x02, 0x10, 0x00, + 0x1a, 0x02, 0x23, 0x23, 0x28, 0x23, 0x02, 0x03, 0x01, 0x0a, 0x4b, 0x00, 0x57, 0x01, 0x10, 0x00, 0x1a, 0x02, 0x24, 0x24, 0x29, 0x24, 0x02, 0x03, 0x01, 0x0a, 0x4b, 0x00, 0x57, 0x02, 0x10, 0x00, 0x1b, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x40, 0x00, 0x17, 0x01, 0x10, 0x00, 0x1b, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x40, 0x00, 0x17, 0x02, 0x10, 0x00, + 0x1c, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x41, 0x00, 0x17, 0x01, 0x10, 0x00, 0x1d, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x08, 0x00, 0x17, 0x01, 0x0c, 0x00, 0x1d, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x08, 0x00, 0x17, 0x02, 0x0c, 0x00, 0x1e, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x09, 0x00, 0x17, 0x01, 0x0c, 0x00, + 0x1e, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x09, 0x00, 0x17, 0x02, 0x0c, 0x00, 0x1f, 0x02, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0a, 0x00, 0x17, 0x00, 0x10, 0x00, 0x20, 0x02, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0b, 0x00, 0x17, 0x00, 0x10, 0x00, 0x21, 0x02, 0x07, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x17, 0x00, 0x17, 0x01, 0x0c, 0x00, + 0x22, 0x02, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x21, 0x00, 0x17, 0x01, 0x10, 0x00, 0x23, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x11, 0x01, 0x08, 0x00, 0x23, 0x02, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x11, 0x01, 0x08, 0x00, 0x23, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x11, 0x02, 0x08, 0x00, + 0x23, 0x02, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x11, 0x02, 0x08, 0x00, 0x24, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x11, 0x01, 0x08, 0x00, 0x24, 0x02, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x11, 0x01, 0x08, 0x00, 0x24, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x11, 0x02, 0x08, 0x00, + 0x24, 0x02, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x11, 0x02, 0x08, 0x00, 0x25, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x15, 0x01, 0x08, 0x00, 0x25, 0x02, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x15, 0x01, 0x08, 0x00, 0x25, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x15, 0x02, 0x08, 0x00, + 0x25, 0x02, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x29, 0x00, 0x15, 0x02, 0x08, 0x00, 0x26, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x15, 0x01, 0x08, 0x00, 0x26, 0x02, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x15, 0x01, 0x08, 0x00, 0x26, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x15, 0x02, 0x08, 0x00, + 0x26, 0x02, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x15, 0x02, 0x08, 0x00, 0x27, 0x02, 0x23, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x19, 0x00, 0x08, 0x00, 0x27, 0x02, 0x0c, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x19, 0x00, 0x08, 0x00, 0x27, 0x02, 0x23, 0x23, 0x23, 0x00, 0x02, 0x03, 0x01, 0x00, 0x10, 0x00, 0x19, 0x00, 0x0c, 0x00, + 0x28, 0x02, 0x23, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x10, 0x00, 0x1d, 0x00, 0x08, 0x00, 0x28, 0x02, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x1d, 0x00, 0x08, 0x00, 0x28, 0x02, 0x23, 0x23, 0x23, 0x00, 0x02, 0x03, 0x01, 0x00, 0x10, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0x29, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x15, 0x01, 0x08, 0x00, + 0x29, 0x02, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x15, 0x01, 0x08, 0x00, 0x29, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x15, 0x02, 0x08, 0x00, 0x29, 0x02, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x15, 0x02, 0x08, 0x00, 0x2a, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x19, 0x01, 0x08, 0x00, + 0x2a, 0x02, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x19, 0x01, 0x08, 0x00, 0x2a, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x19, 0x02, 0x08, 0x00, 0x2a, 0x02, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x19, 0x02, 0x08, 0x00, 0x2b, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x7e, 0x00, 0x19, 0x01, 0x08, 0x00, + 0x2b, 0x02, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xd6, 0x00, 0x15, 0x01, 0x08, 0x00, 0x2b, 0x02, 0x23, 0x04, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x95, 0x01, 0x08, 0x00, 0x2b, 0x02, 0x04, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7e, 0x00, 0x95, 0x01, 0x08, 0x00, 0x2c, 0x02, 0x23, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6e, 0x00, 0x15, 0x01, 0x08, 0x00, + 0x2c, 0x02, 0x07, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7e, 0x00, 0x15, 0x01, 0x08, 0x00, 0x2d, 0x02, 0x23, 0x23, 0x0d, 0x00, 0x02, 0x03, 0x01, 0x00, 0x12, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x2d, 0x02, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x11, 0x01, 0x08, 0x00, 0x2e, 0x02, 0x23, 0x23, 0x0d, 0x00, 0x02, 0x03, 0x01, 0x00, 0x16, 0x00, 0x11, 0x01, 0x0c, 0x00, + 0x2e, 0x02, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x17, 0x00, 0x11, 0x01, 0x08, 0x00, 0x2f, 0x02, 0x23, 0x23, 0x0d, 0x00, 0x02, 0x03, 0x01, 0x00, 0x12, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x2f, 0x02, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x15, 0x01, 0x08, 0x00, 0x30, 0x02, 0x23, 0x23, 0x0d, 0x00, 0x02, 0x03, 0x01, 0x00, 0x16, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x30, 0x02, 0x0d, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x17, 0x00, 0x15, 0x01, 0x08, 0x00, 0x31, 0x02, 0x23, 0x23, 0x23, 0x00, 0x02, 0x03, 0x01, 0x00, 0x16, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x32, 0x02, 0x23, 0x23, 0x23, 0x00, 0x02, 0x03, 0x01, 0x00, 0x12, 0x00, 0x11, 0x01, 0x0c, 0x00, 0x33, 0x02, 0x03, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x11, 0x01, 0x08, 0x00, + 0x33, 0x02, 0x03, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x11, 0x02, 0x08, 0x00, 0x34, 0x02, 0x03, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x15, 0x01, 0x08, 0x00, 0x34, 0x02, 0x03, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x50, 0x00, 0x15, 0x02, 0x08, 0x00, 0x35, 0x02, 0x0f, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x11, 0x01, 0x08, 0x00, + 0x35, 0x02, 0x10, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x11, 0x02, 0x08, 0x00, 0x36, 0x02, 0x0f, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x15, 0x01, 0x08, 0x00, 0x36, 0x02, 0x10, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x2b, 0x00, 0x15, 0x02, 0x08, 0x00, 0x37, 0x02, 0x0f, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xe7, 0x00, 0x15, 0x01, 0x08, 0x00, + 0x37, 0x02, 0x10, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xe7, 0x00, 0x15, 0x02, 0x08, 0x00, 0x38, 0x02, 0x23, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x16, 0x01, 0x08, 0x00, 0x38, 0x02, 0x24, 0x10, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2a, 0x00, 0x16, 0x02, 0x08, 0x00, 0x39, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd0, 0x00, 0x1d, 0x01, 0x0c, 0x00, + 0x39, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd0, 0x00, 0x1d, 0x02, 0x0c, 0x00, 0x3a, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd0, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x3a, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd0, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x3b, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7c, 0x00, 0x1d, 0x01, 0x0c, 0x00, + 0x3b, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7c, 0x00, 0x1d, 0x02, 0x0c, 0x00, 0x3c, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7c, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x3c, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7c, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x3d, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x1d, 0x01, 0x0c, 0x00, + 0x3d, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x1d, 0x02, 0x0c, 0x00, 0x3e, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x3e, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x3f, 0x02, 0x23, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x1d, 0x01, 0x08, 0x00, + 0x3f, 0x02, 0x24, 0x10, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x1d, 0x02, 0x08, 0x00, 0x40, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x1d, 0x01, 0x08, 0x00, 0x40, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x1d, 0x02, 0x08, 0x00, 0x41, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x19, 0x01, 0x08, 0x00, + 0x41, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x12, 0x00, 0x19, 0x02, 0x08, 0x00, 0x42, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x16, 0x00, 0x19, 0x01, 0x08, 0x00, 0x42, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x16, 0x00, 0x19, 0x02, 0x08, 0x00, 0x43, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x61, 0x00, 0x57, 0x01, 0x0c, 0x00, + 0x44, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x60, 0x00, 0x57, 0x01, 0x0c, 0x00, 0x45, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x63, 0x00, 0x17, 0x01, 0x0c, 0x00, 0x46, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x62, 0x00, 0x17, 0x01, 0x0c, 0x00, 0x47, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x78, 0x00, 0x56, 0x01, 0x08, 0x00, + 0x47, 0x02, 0x24, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x78, 0x00, 0x56, 0x02, 0x08, 0x00, 0x47, 0x02, 0x23, 0x0a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x78, 0x00, 0x56, 0x01, 0x08, 0x00, 0x47, 0x02, 0x24, 0x0a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x78, 0x00, 0x56, 0x02, 0x08, 0x00, 0x48, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x79, 0x00, 0x56, 0x01, 0x08, 0x00, + 0x48, 0x02, 0x24, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x79, 0x00, 0x56, 0x02, 0x08, 0x00, 0x48, 0x02, 0x23, 0x0b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x79, 0x00, 0x56, 0x01, 0x08, 0x00, 0x48, 0x02, 0x24, 0x0b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x79, 0x00, 0x56, 0x02, 0x08, 0x00, 0x49, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x56, 0x01, 0x08, 0x00, + 0x49, 0x02, 0x24, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x56, 0x02, 0x08, 0x00, 0x49, 0x02, 0x23, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x56, 0x01, 0x08, 0x00, 0x49, 0x02, 0x24, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x58, 0x00, 0x56, 0x02, 0x08, 0x00, 0x4a, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x56, 0x01, 0x08, 0x00, + 0x4a, 0x02, 0x24, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x56, 0x02, 0x08, 0x00, 0x4a, 0x02, 0x23, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x56, 0x01, 0x08, 0x00, 0x4a, 0x02, 0x24, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x59, 0x00, 0x56, 0x02, 0x08, 0x00, 0x4b, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x11, 0x01, 0x08, 0x00, + 0x4b, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x11, 0x02, 0x08, 0x00, 0x4c, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x15, 0x01, 0x08, 0x00, 0x4c, 0x02, 0x23, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x15, 0x02, 0x08, 0x00, 0x4d, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5a, 0x00, 0x19, 0x00, 0x0c, 0x00, + 0x4e, 0x02, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x5a, 0x00, 0x1d, 0x00, 0x0c, 0x00, 0x4f, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x15, 0x01, 0x08, 0x00, 0x4f, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x15, 0x02, 0x08, 0x00, 0x50, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x1d, 0x01, 0x08, 0x00, + 0x50, 0x02, 0x23, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x1d, 0x02, 0x08, 0x00, 0x51, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x11, 0x01, 0x08, 0x00, 0x51, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x11, 0x02, 0x08, 0x00, 0x52, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x19, 0x01, 0x08, 0x00, + 0x52, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x19, 0x02, 0x08, 0x00, 0x53, 0x02, 0x03, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x19, 0x00, 0x08, 0x00, 0x53, 0x02, 0x04, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x99, 0x00, 0x08, 0x00, 0x54, 0x02, 0x03, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x1d, 0x00, 0x08, 0x00, + 0x54, 0x02, 0x04, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2d, 0x00, 0x9d, 0x00, 0x08, 0x00, 0x55, 0x02, 0x23, 0x23, 0x07, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2a, 0x00, 0x19, 0x00, 0x0c, 0x00, 0x55, 0x02, 0x23, 0x23, 0x08, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2a, 0x00, 0x99, 0x00, 0x0c, 0x00, 0x56, 0x02, 0x23, 0x23, 0x07, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2a, 0x00, 0x1d, 0x00, 0x0c, 0x00, + 0x56, 0x02, 0x23, 0x23, 0x08, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2a, 0x00, 0x9d, 0x00, 0x0c, 0x00, 0x57, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x19, 0x01, 0x08, 0x00, 0x57, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5b, 0x00, 0x19, 0x02, 0x08, 0x00, 0x58, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x15, 0x01, 0x08, 0x00, + 0x58, 0x02, 0x23, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xe6, 0x00, 0x15, 0x02, 0x08, 0x00, 0x59, 0x02, 0x03, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x19, 0x00, 0x08, 0x00, 0x59, 0x02, 0x04, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x99, 0x00, 0x08, 0x00, 0x5a, 0x02, 0x03, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x1d, 0x00, 0x08, 0x00, + 0x5a, 0x02, 0x04, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x2c, 0x00, 0x9d, 0x00, 0x08, 0x00, 0x5b, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfc, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x5b, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfc, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x5c, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfd, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x5c, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfd, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x5d, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfe, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x5d, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfe, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x5e, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd4, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x5e, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd4, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x5f, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf8, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x5f, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf8, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x60, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf9, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x60, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf9, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x61, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfa, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x61, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfa, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x62, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfb, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x62, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xfb, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x63, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd5, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x63, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xd5, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x64, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xe5, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x64, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xe5, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x65, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xe4, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x65, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xe4, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x66, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf4, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x66, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf4, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x67, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf5, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x67, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xf5, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x68, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdb, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x68, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdb, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x69, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdf, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x69, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdf, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6a, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xeb, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x6a, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xeb, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6b, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xef, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x6b, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xef, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6c, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xf1, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x6c, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x71, 0x06, 0x15, 0x01, 0x0d, 0x00, 0x6c, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xf1, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6c, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x71, 0x06, 0x15, 0x02, 0x0d, 0x00, 0x6d, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xf2, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x6d, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x06, 0x15, 0x01, 0x0d, 0x00, 0x6d, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xf2, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6d, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x06, 0x15, 0x02, 0x0d, 0x00, 0x6e, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xf3, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x6e, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x73, 0x06, 0x15, 0x01, 0x0d, 0x00, 0x6e, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xf3, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6e, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x73, 0x06, 0x15, 0x02, 0x0d, 0x00, 0x6f, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xd1, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x6f, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x71, 0x02, 0x15, 0x01, 0x0d, 0x00, 0x6f, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xd1, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x6f, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x71, 0x02, 0x15, 0x02, 0x0d, 0x00, 0x70, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xd2, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x70, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x02, 0x15, 0x01, 0x0d, 0x00, 0x70, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xd2, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x70, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x02, 0x15, 0x02, 0x0d, 0x00, 0x71, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xd3, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x71, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x73, 0x02, 0x15, 0x01, 0x0d, 0x00, 0x71, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xd3, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x71, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x73, 0x02, 0x15, 0x02, 0x0d, 0x00, 0x72, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xe1, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x72, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x71, 0x04, 0x15, 0x01, 0x0d, 0x00, 0x72, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xe1, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x72, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x71, 0x04, 0x15, 0x02, 0x0d, 0x00, 0x73, 0x02, 0x23, 0x23, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xe2, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x73, 0x02, 0x23, 0x23, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x04, 0x15, 0x01, 0x0d, 0x00, 0x73, 0x02, 0x24, 0x24, 0x28, 0x00, 0x03, 0x02, 0x01, 0x00, 0xe2, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x73, 0x02, 0x24, 0x24, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x04, 0x15, 0x02, 0x0d, 0x00, 0x74, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x74, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x74, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x74, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x75, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x75, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x76, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x76, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x77, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x29, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x77, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x29, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x78, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x78, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x79, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x79, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x7a, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x7a, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x7b, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x37, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x7b, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x37, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x7c, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x63, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x7c, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x63, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x7d, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6b, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x7d, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6b, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x7e, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x67, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x7e, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x67, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x7f, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2b, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x7f, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2b, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x80, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x60, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x80, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x60, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x81, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x61, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x81, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x61, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x82, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x62, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x82, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x62, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x83, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6c, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x83, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6c, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x84, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x68, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x84, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x68, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x85, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x69, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x85, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x69, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x86, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6a, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x86, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6a, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x87, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6d, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x87, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x6d, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x88, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x15, 0x01, 0x0c, 0x00, + 0x88, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x15, 0x02, 0x0c, 0x00, 0x89, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x19, 0x01, 0x0c, 0x00, 0x89, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x19, 0x02, 0x0c, 0x00, 0x8a, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x1d, 0x01, 0x0c, 0x00, + 0x8a, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x70, 0x00, 0x1d, 0x02, 0x0c, 0x00, 0x8b, 0x02, 0x05, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x14, 0x00, 0x17, 0x01, 0x0c, 0x00, 0x8c, 0x02, 0x03, 0x23, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xc5, 0x00, 0x15, 0x01, 0x0c, 0x00, 0x8c, 0x02, 0x06, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x15, 0x00, 0x17, 0x01, 0x0c, 0x00, + 0x8d, 0x02, 0x07, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x16, 0x00, 0x17, 0x01, 0x0c, 0x00, 0x8e, 0x02, 0x08, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x16, 0x00, 0x97, 0x01, 0x0c, 0x00, 0x8f, 0x02, 0x23, 0x23, 0x05, 0x12, 0x02, 0x03, 0x01, 0x05, 0x20, 0x00, 0x17, 0x01, 0x10, 0x00, 0x90, 0x02, 0x23, 0x23, 0x06, 0x12, 0x02, 0x03, 0x01, 0x05, 0xc4, 0x00, 0x15, 0x01, 0x10, 0x00, + 0x91, 0x02, 0x23, 0x23, 0x07, 0x12, 0x02, 0x03, 0x01, 0x05, 0x22, 0x00, 0x17, 0x01, 0x10, 0x00, 0x92, 0x02, 0x23, 0x23, 0x08, 0x12, 0x02, 0x03, 0x01, 0x05, 0x22, 0x00, 0x97, 0x01, 0x10, 0x00, 0x93, 0x02, 0x03, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd7, 0x00, 0x15, 0x01, 0x08, 0x00, 0x93, 0x02, 0x03, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xd7, 0x00, 0x15, 0x02, 0x08, 0x00, + 0x94, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x17, 0x00, 0x16, 0x01, 0x08, 0x00, 0x94, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x17, 0x00, 0x16, 0x02, 0x08, 0x00, 0x95, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x95, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x00, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0x96, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x96, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x01, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x97, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x02, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x97, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x02, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0x98, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x98, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x03, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x99, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x05, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x99, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x05, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0x9a, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x06, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x9a, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x06, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x9b, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x07, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x9b, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x07, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0x9c, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x04, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x9c, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x04, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x9d, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x0b, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x9d, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x0b, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0x9e, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x08, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x9e, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x08, 0x00, 0x16, 0x02, 0x0c, 0x00, 0x9f, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x09, 0x00, 0x16, 0x01, 0x0c, 0x00, 0x9f, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x09, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0xa0, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x0a, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xa0, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x0a, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xa1, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x16, 0x01, 0x08, 0x00, 0xa1, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1c, 0x00, 0x16, 0x02, 0x08, 0x00, + 0xa2, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x16, 0x01, 0x08, 0x00, 0xa2, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1d, 0x00, 0x16, 0x02, 0x08, 0x00, 0xa3, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x16, 0x01, 0x08, 0x00, 0xa3, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1e, 0x00, 0x16, 0x02, 0x08, 0x00, + 0xa4, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0f, 0x00, 0x17, 0x01, 0x10, 0x00, 0xa4, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0f, 0x00, 0x17, 0x02, 0x10, 0x00, 0xa5, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0e, 0x00, 0x17, 0x01, 0x10, 0x00, 0xa5, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0e, 0x00, 0x17, 0x02, 0x10, 0x00, + 0xa6, 0x02, 0x23, 0x23, 0x28, 0x23, 0x02, 0x03, 0x01, 0x0a, 0x4c, 0x00, 0x57, 0x01, 0x10, 0x00, 0xa6, 0x02, 0x24, 0x24, 0x29, 0x24, 0x02, 0x03, 0x01, 0x0a, 0x4c, 0x00, 0x57, 0x02, 0x10, 0x00, 0xa7, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x42, 0x00, 0x17, 0x01, 0x10, 0x00, 0xa7, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x42, 0x00, 0x17, 0x02, 0x10, 0x00, + 0xa8, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x41, 0x00, 0x16, 0x01, 0x08, 0x00, 0xa9, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3c, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xa9, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3c, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xaa, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3d, 0x00, 0x16, 0x01, 0x0c, 0x00, + 0xaa, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3d, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xab, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3e, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xab, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3e, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xac, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3f, 0x00, 0x16, 0x01, 0x0c, 0x00, + 0xac, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3f, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xad, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x38, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xad, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x38, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xae, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x39, 0x00, 0x16, 0x01, 0x0c, 0x00, + 0xae, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x39, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xaf, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3a, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xaf, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3a, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xb0, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3b, 0x00, 0x16, 0x01, 0x0c, 0x00, + 0xb0, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x3b, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xb1, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x20, 0x00, 0x16, 0x01, 0x08, 0x00, 0xb1, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x20, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb2, 0x02, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, 0x00, 0x16, 0x01, 0x08, 0x00, + 0xb2, 0x02, 0x24, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x21, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb3, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x22, 0x00, 0x16, 0x01, 0x08, 0x00, 0xb3, 0x02, 0x24, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x22, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb4, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x16, 0x01, 0x08, 0x00, + 0xb4, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x23, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb5, 0x02, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x24, 0x00, 0x16, 0x01, 0x08, 0x00, 0xb5, 0x02, 0x24, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x24, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb6, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x25, 0x00, 0x16, 0x01, 0x08, 0x00, + 0xb6, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x25, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb7, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x30, 0x00, 0x16, 0x01, 0x08, 0x00, 0xb7, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x30, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb8, 0x02, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x31, 0x00, 0x16, 0x01, 0x08, 0x00, + 0xb8, 0x02, 0x24, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x31, 0x00, 0x16, 0x02, 0x08, 0x00, 0xb9, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x32, 0x00, 0x16, 0x01, 0x08, 0x00, 0xb9, 0x02, 0x24, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x32, 0x00, 0x16, 0x02, 0x08, 0x00, 0xba, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x33, 0x00, 0x16, 0x01, 0x08, 0x00, + 0xba, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x33, 0x00, 0x16, 0x02, 0x08, 0x00, 0xbb, 0x02, 0x23, 0x26, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x34, 0x00, 0x16, 0x01, 0x08, 0x00, 0xbb, 0x02, 0x24, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x34, 0x00, 0x16, 0x02, 0x08, 0x00, 0xbc, 0x02, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x35, 0x00, 0x16, 0x01, 0x08, 0x00, + 0xbc, 0x02, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x35, 0x00, 0x16, 0x02, 0x08, 0x00, 0xbd, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x28, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xbd, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x28, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xbe, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x40, 0x00, 0x16, 0x01, 0x0c, 0x00, + 0xbe, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x40, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xbf, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf7, 0x00, 0x15, 0x01, 0x08, 0x00, 0xc0, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x44, 0x00, 0x17, 0x01, 0x10, 0x00, 0xc0, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x44, 0x00, 0x17, 0x02, 0x10, 0x00, + 0xc1, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xde, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xc2, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdf, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xc3, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdc, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xc4, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xdd, 0x00, 0x16, 0x01, 0x0c, 0x00, + 0xc5, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xdb, 0x00, 0x16, 0x01, 0x08, 0x00, 0xc6, 0x02, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0xdf, 0x00, 0x17, 0x01, 0x0c, 0x00, 0xc7, 0x02, 0x23, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x18, 0x00, 0x16, 0x01, 0x08, 0x00, 0xc7, 0x02, 0x24, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x18, 0x00, 0x16, 0x02, 0x08, 0x00, + 0xc7, 0x02, 0x23, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x18, 0x00, 0x16, 0x01, 0x08, 0x00, 0xc7, 0x02, 0x24, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x18, 0x00, 0x16, 0x02, 0x08, 0x00, 0xc8, 0x02, 0x24, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x19, 0x00, 0x16, 0x02, 0x08, 0x00, 0xc8, 0x02, 0x24, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x19, 0x00, 0x16, 0x02, 0x08, 0x00, + 0xc9, 0x02, 0x24, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x1a, 0x00, 0x16, 0x02, 0x08, 0x00, 0xca, 0x02, 0x28, 0x24, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x19, 0x00, 0x17, 0x02, 0x0c, 0x00, 0xcb, 0x02, 0x24, 0x24, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x18, 0x00, 0x17, 0x02, 0x10, 0x00, 0xcc, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x06, 0x00, 0x17, 0x02, 0x10, 0x00, + 0xcd, 0x02, 0x23, 0x23, 0x0f, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xcd, 0x02, 0x24, 0x24, 0x10, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xcd, 0x02, 0x0f, 0x23, 0x23, 0x00, 0x01, 0x03, 0x02, 0x00, 0x2e, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xcd, 0x02, 0x10, 0x24, 0x24, 0x00, 0x01, 0x03, 0x02, 0x00, 0x2e, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0xce, 0x02, 0x23, 0x23, 0x0f, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2d, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xce, 0x02, 0x24, 0x24, 0x10, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2d, 0x00, 0x16, 0x02, 0x0c, 0x00, 0xce, 0x02, 0x0f, 0x23, 0x23, 0x00, 0x01, 0x03, 0x02, 0x00, 0x2f, 0x00, 0x16, 0x01, 0x0c, 0x00, 0xce, 0x02, 0x10, 0x24, 0x24, 0x00, 0x01, 0x03, 0x02, 0x00, 0x2f, 0x00, 0x16, 0x02, 0x0c, 0x00, + 0xcf, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x16, 0x01, 0x08, 0x00, 0xcf, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0e, 0x00, 0x16, 0x02, 0x08, 0x00, 0xd0, 0x02, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x16, 0x01, 0x08, 0x00, 0xd0, 0x02, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0f, 0x00, 0x16, 0x02, 0x08, 0x00, + 0xd1, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x11, 0x02, 0x00, 0x00, 0xd2, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x77, 0x00, 0x11, 0x01, 0x00, 0x00, 0xd3, 0x02, 0x24, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x5a, 0x00, 0x16, 0x02, 0x08, 0x00, 0xd4, 0x02, 0x28, 0x24, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x39, 0x00, 0x17, 0x02, 0x0c, 0x00, + 0xd5, 0x02, 0x24, 0x24, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x38, 0x00, 0x17, 0x02, 0x10, 0x00, 0xd6, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x46, 0x00, 0x17, 0x02, 0x10, 0x00, 0xd7, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x36, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xd8, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x16, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xd9, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x00, 0x00, 0x97, 0x02, 0x0c, 0x00, 0xda, 0x02, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x01, 0x00, 0x97, 0x02, 0x0c, 0x00, 0xdb, 0x02, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x02, 0x00, 0x57, 0x01, 0x10, 0x00, 0xdb, 0x02, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x02, 0x00, 0x57, 0x02, 0x10, 0x00, + 0xdc, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xdc, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xdd, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xdd, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0xde, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xde, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xdf, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xdf, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0xe0, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe0, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xe1, 0x02, 0x23, 0x23, 0x0f, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8c, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe1, 0x02, 0x24, 0x24, 0x10, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8c, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xe1, 0x02, 0x0f, 0x23, 0x23, 0x00, 0x01, 0x03, 0x02, 0x00, 0x8e, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe1, 0x02, 0x10, 0x24, 0x24, 0x00, 0x01, 0x03, 0x02, 0x00, 0x8e, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xe2, 0x02, 0x23, 0x23, 0x0f, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8c, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xe2, 0x02, 0x24, 0x24, 0x10, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8c, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0xe2, 0x02, 0x0f, 0x23, 0x23, 0x00, 0x01, 0x03, 0x02, 0x00, 0x8e, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xe2, 0x02, 0x10, 0x24, 0x24, 0x00, 0x01, 0x03, 0x02, 0x00, 0x8e, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xe3, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x92, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe3, 0x02, 0x24, 0x09, 0x24, 0x00, 0x02, 0x01, 0x03, 0x00, 0x92, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xe4, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x92, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xe4, 0x02, 0x24, 0x09, 0x24, 0x00, 0x02, 0x01, 0x03, 0x00, 0x92, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xe5, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x93, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe5, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x93, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xe6, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x93, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xe6, 0x02, 0x24, 0x09, 0x24, 0x00, 0x02, 0x01, 0x03, 0x00, 0x93, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xe7, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x90, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe7, 0x02, 0x24, 0x09, 0x24, 0x00, 0x02, 0x01, 0x03, 0x00, 0x90, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xe8, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x90, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xe8, 0x02, 0x24, 0x09, 0x24, 0x00, 0x02, 0x01, 0x03, 0x00, 0x90, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xe9, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x91, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xe9, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x91, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xea, 0x02, 0x23, 0x09, 0x23, 0x00, 0x02, 0x01, 0x03, 0x00, 0x91, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xea, 0x02, 0x24, 0x09, 0x24, 0x00, 0x02, 0x01, 0x03, 0x00, 0x91, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xeb, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x98, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xeb, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x98, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xec, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa8, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xec, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa8, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xed, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb8, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xed, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb8, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xee, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x98, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xee, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x98, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xef, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa8, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xef, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa8, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0xf0, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb8, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xf0, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb8, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xf1, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x99, 0x00, 0x56, 0x00, 0x0c, 0x00, 0xf2, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa9, 0x00, 0x56, 0x00, 0x0c, 0x00, + 0xf3, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb9, 0x00, 0x56, 0x00, 0x0c, 0x00, 0xf4, 0x02, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x99, 0x00, 0x96, 0x00, 0x0c, 0x00, 0xf5, 0x02, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa9, 0x00, 0x96, 0x00, 0x0c, 0x00, 0xf6, 0x02, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb9, 0x00, 0x96, 0x00, 0x0c, 0x00, + 0xf7, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9a, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xf7, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9a, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xf8, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xaa, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xf8, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xaa, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0xf9, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xba, 0x00, 0x56, 0x01, 0x0c, 0x00, 0xf9, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xba, 0x00, 0x56, 0x02, 0x0c, 0x00, 0xfa, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9a, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xfa, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9a, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0xfb, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xaa, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xfb, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xaa, 0x00, 0x96, 0x02, 0x0c, 0x00, 0xfc, 0x02, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xba, 0x00, 0x96, 0x01, 0x0c, 0x00, 0xfc, 0x02, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xba, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0xfd, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9b, 0x00, 0x56, 0x00, 0x0c, 0x00, 0xfe, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xab, 0x00, 0x56, 0x00, 0x0c, 0x00, 0xff, 0x02, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbb, 0x00, 0x56, 0x00, 0x0c, 0x00, 0x00, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9b, 0x00, 0x96, 0x00, 0x0c, 0x00, + 0x01, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xab, 0x00, 0x96, 0x00, 0x0c, 0x00, 0x02, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbb, 0x00, 0x96, 0x00, 0x0c, 0x00, 0x03, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9c, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x03, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9c, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x04, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xac, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x04, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xac, 0x00, 0x56, 0x02, 0x0c, 0x00, 0x05, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbc, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x05, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbc, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x06, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9c, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x06, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9c, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x07, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xac, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x07, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xac, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0x08, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbc, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x08, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbc, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x09, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9d, 0x00, 0x56, 0x00, 0x0c, 0x00, 0x0a, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xad, 0x00, 0x56, 0x00, 0x0c, 0x00, + 0x0b, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbd, 0x00, 0x56, 0x00, 0x0c, 0x00, 0x0c, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9d, 0x00, 0x96, 0x00, 0x0c, 0x00, 0x0d, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xad, 0x00, 0x96, 0x00, 0x0c, 0x00, 0x0e, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbd, 0x00, 0x96, 0x00, 0x0c, 0x00, + 0x0f, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9e, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x0f, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9e, 0x00, 0x56, 0x02, 0x0c, 0x00, 0x10, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xae, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x10, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xae, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x11, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbe, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x11, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbe, 0x00, 0x56, 0x02, 0x0c, 0x00, 0x12, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9e, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x12, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9e, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0x13, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xae, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x13, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xae, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x14, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbe, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x14, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbe, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0x15, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9f, 0x00, 0x56, 0x00, 0x0c, 0x00, 0x16, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xaf, 0x00, 0x56, 0x00, 0x0c, 0x00, 0x17, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbf, 0x00, 0x56, 0x00, 0x0c, 0x00, 0x18, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x9f, 0x00, 0x96, 0x00, 0x0c, 0x00, + 0x19, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xaf, 0x00, 0x96, 0x00, 0x0c, 0x00, 0x1a, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0xbf, 0x00, 0x96, 0x00, 0x0c, 0x00, 0x1b, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x96, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x1b, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x96, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x1c, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa6, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x1c, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa6, 0x00, 0x56, 0x02, 0x0c, 0x00, 0x1d, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb6, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x1d, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb6, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x1e, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x96, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x1e, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x96, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x1f, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa6, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x1f, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa6, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0x20, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb6, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x20, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb6, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x21, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x97, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x21, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x97, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x22, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa7, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x22, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa7, 0x00, 0x56, 0x02, 0x0c, 0x00, 0x23, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb7, 0x00, 0x56, 0x01, 0x0c, 0x00, 0x23, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb7, 0x00, 0x56, 0x02, 0x0c, 0x00, + 0x24, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x97, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x24, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x97, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x25, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa7, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x25, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xa7, 0x00, 0x96, 0x02, 0x0c, 0x00, + 0x26, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb7, 0x00, 0x96, 0x01, 0x0c, 0x00, 0x26, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0xb7, 0x00, 0x96, 0x02, 0x0c, 0x00, 0x27, 0x03, 0x23, 0x27, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x13, 0x00, 0x16, 0x01, 0x08, 0x00, 0x27, 0x03, 0x24, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x13, 0x00, 0x16, 0x02, 0x08, 0x00, + 0x27, 0x03, 0x25, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x13, 0x00, 0x26, 0x03, 0x08, 0x00, 0x28, 0x03, 0x27, 0x23, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x1d, 0x00, 0x17, 0x01, 0x0c, 0x00, 0x28, 0x03, 0x28, 0x24, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x1d, 0x00, 0x17, 0x02, 0x0c, 0x00, 0x28, 0x03, 0x29, 0x25, 0x12, 0x00, 0x01, 0x02, 0x05, 0x00, 0x1d, 0x00, 0x27, 0x03, 0x0c, 0x00, + 0x29, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x65, 0x01, 0x08, 0x00, 0x29, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x65, 0x01, 0x08, 0x00, 0x29, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x65, 0x02, 0x08, 0x00, 0x29, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x65, 0x02, 0x08, 0x00, + 0x29, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x65, 0x03, 0x08, 0x00, 0x29, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x65, 0x03, 0x08, 0x00, 0x2a, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xa5, 0x01, 0x08, 0x00, 0x2a, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xa5, 0x01, 0x08, 0x00, + 0x2a, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xa5, 0x02, 0x08, 0x00, 0x2a, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xa5, 0x02, 0x08, 0x00, 0x2a, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xa5, 0x03, 0x08, 0x00, 0x2a, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xa5, 0x03, 0x08, 0x00, + 0x2b, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x6d, 0x01, 0x08, 0x00, 0x2b, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x6d, 0x01, 0x08, 0x00, 0x2b, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x6d, 0x02, 0x08, 0x00, 0x2b, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x6d, 0x02, 0x08, 0x00, + 0x2b, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x6d, 0x03, 0x08, 0x00, 0x2b, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x6d, 0x03, 0x08, 0x00, 0x2c, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xad, 0x01, 0x08, 0x00, 0x2c, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xad, 0x01, 0x08, 0x00, + 0x2c, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xad, 0x02, 0x08, 0x00, 0x2c, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xad, 0x02, 0x08, 0x00, 0x2c, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xad, 0x03, 0x08, 0x00, 0x2c, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xad, 0x03, 0x08, 0x00, + 0x2d, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x69, 0x01, 0x08, 0x00, 0x2d, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x69, 0x01, 0x08, 0x00, 0x2d, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x69, 0x02, 0x08, 0x00, 0x2d, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x69, 0x02, 0x08, 0x00, + 0x2d, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0x69, 0x03, 0x08, 0x00, 0x2d, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0x69, 0x03, 0x08, 0x00, 0x2e, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xa9, 0x01, 0x08, 0x00, 0x2e, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xa9, 0x01, 0x08, 0x00, + 0x2e, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xa9, 0x02, 0x08, 0x00, 0x2e, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xa9, 0x02, 0x08, 0x00, 0x2e, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x6f, 0x00, 0xa9, 0x03, 0x08, 0x00, 0x2e, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x7f, 0x00, 0xa9, 0x03, 0x08, 0x00, + 0x2f, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x2f, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x2f, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x30, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x30, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x30, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x66, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x31, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x31, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0x31, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x32, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x32, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x32, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x64, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x33, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x33, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x33, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x34, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x34, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x34, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x65, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x35, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3f, 0x00, 0x67, 0x01, 0x10, 0x00, 0x35, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3f, 0x00, 0x67, 0x02, 0x10, 0x00, + 0x35, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3f, 0x00, 0x67, 0x03, 0x10, 0x00, 0x36, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3e, 0x00, 0x67, 0x01, 0x10, 0x00, 0x36, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3e, 0x00, 0x67, 0x02, 0x10, 0x00, 0x36, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3e, 0x00, 0x67, 0x03, 0x10, 0x00, + 0x37, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3f, 0x00, 0xa7, 0x01, 0x10, 0x00, 0x37, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3f, 0x00, 0xa7, 0x02, 0x10, 0x00, 0x37, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3f, 0x00, 0xa7, 0x03, 0x10, 0x00, 0x38, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3e, 0x00, 0xa7, 0x01, 0x10, 0x00, + 0x38, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3e, 0x00, 0xa7, 0x02, 0x10, 0x00, 0x38, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x3e, 0x00, 0xa7, 0x03, 0x10, 0x00, 0x39, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1f, 0x00, 0x67, 0x01, 0x10, 0x00, 0x39, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1f, 0x00, 0x67, 0x02, 0x10, 0x00, + 0x39, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1f, 0x00, 0x67, 0x03, 0x10, 0x00, 0x3a, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1e, 0x00, 0x67, 0x01, 0x10, 0x00, 0x3a, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1e, 0x00, 0x67, 0x02, 0x10, 0x00, 0x3a, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1e, 0x00, 0x67, 0x03, 0x10, 0x00, + 0x3b, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1f, 0x00, 0xa7, 0x01, 0x10, 0x00, 0x3b, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1f, 0x00, 0xa7, 0x02, 0x10, 0x00, 0x3b, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1f, 0x00, 0xa7, 0x03, 0x10, 0x00, 0x3c, 0x03, 0x30, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1e, 0x00, 0xa7, 0x01, 0x10, 0x00, + 0x3c, 0x03, 0x30, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1e, 0x00, 0xa7, 0x02, 0x10, 0x00, 0x3c, 0x03, 0x30, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x1e, 0x00, 0xa7, 0x03, 0x10, 0x00, 0x3d, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x3d, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0x3d, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x3e, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x3e, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x3e, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x3f, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x3f, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x3f, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x40, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x40, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x40, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x41, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0x6a, 0x01, 0x0c, 0x00, 0x41, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0x6a, 0x02, 0x0c, 0x00, + 0x41, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0x6a, 0x03, 0x0c, 0x00, 0x42, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0xaa, 0x01, 0x0c, 0x00, 0x42, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0xaa, 0x02, 0x0c, 0x00, 0x42, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x26, 0x00, 0xaa, 0x03, 0x0c, 0x00, + 0x43, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0x6a, 0x01, 0x0c, 0x00, 0x43, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0x6a, 0x02, 0x0c, 0x00, 0x43, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0x6a, 0x03, 0x0c, 0x00, 0x44, 0x03, 0x30, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0xaa, 0x01, 0x0c, 0x00, + 0x44, 0x03, 0x30, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0xaa, 0x02, 0x0c, 0x00, 0x44, 0x03, 0x30, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x27, 0x00, 0xaa, 0x03, 0x0c, 0x00, 0x45, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x66, 0x01, 0x08, 0x00, 0x45, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x45, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8b, 0x00, 0x66, 0x03, 0x08, 0x00, 0x46, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8b, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x46, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8b, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x46, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8b, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x47, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8a, 0x00, 0x66, 0x01, 0x08, 0x00, 0x47, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8a, 0x00, 0x66, 0x02, 0x08, 0x00, 0x47, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8a, 0x00, 0x66, 0x03, 0x08, 0x00, 0x48, 0x03, 0x28, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8a, 0x00, 0xa6, 0x01, 0x08, 0x00, + 0x48, 0x03, 0x29, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8a, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x48, 0x03, 0x2a, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x8a, 0x00, 0xa6, 0x03, 0x08, 0x00, 0x49, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x89, 0x00, 0x66, 0x01, 0x08, 0x00, 0x49, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x89, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x49, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x89, 0x00, 0x66, 0x03, 0x08, 0x00, 0x4a, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x89, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x4a, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x89, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x4a, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x89, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x4b, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x88, 0x00, 0x66, 0x01, 0x08, 0x00, 0x4b, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x88, 0x00, 0x66, 0x02, 0x08, 0x00, 0x4b, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x88, 0x00, 0x66, 0x03, 0x08, 0x00, 0x4c, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x88, 0x00, 0xa6, 0x01, 0x08, 0x00, + 0x4c, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x88, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x4c, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x88, 0x00, 0xa6, 0x03, 0x08, 0x00, 0x4d, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc4, 0x00, 0x66, 0x01, 0x08, 0x00, 0x4d, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc4, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x4d, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc4, 0x00, 0x66, 0x03, 0x08, 0x00, 0x4e, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc4, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x4e, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc4, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x4e, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xc4, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x4f, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x66, 0x01, 0x08, 0x00, 0x4f, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x66, 0x02, 0x08, 0x00, 0x4f, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x66, 0x03, 0x08, 0x00, 0x50, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0xa6, 0x01, 0x08, 0x00, + 0x50, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x50, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0xa6, 0x03, 0x08, 0x00, 0x51, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x51, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0x51, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x52, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x52, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x52, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x75, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x53, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x53, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x53, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x54, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x54, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x54, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x76, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x55, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x77, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x55, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x77, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0x55, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x77, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x56, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x77, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x56, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x77, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x56, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x77, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x57, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x57, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x57, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x58, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x58, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x58, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7d, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x59, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7e, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x59, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7e, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0x59, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7e, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x5a, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7e, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x5a, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7e, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x5a, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7e, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x5b, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7f, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x5b, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7f, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x5b, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7f, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x5c, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7f, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x5c, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7f, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x5c, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x7f, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x5d, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8d, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x5d, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8d, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0x5d, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8d, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x5e, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8d, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x5e, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8d, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x5e, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x8d, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x5f, 0x03, 0x30, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x5f, 0x03, 0x30, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x5f, 0x03, 0x30, 0x25, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x60, 0x03, 0x30, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0xaa, 0x01, 0x08, 0x00, + 0x60, 0x03, 0x30, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0xaa, 0x02, 0x08, 0x00, 0x60, 0x03, 0x30, 0x25, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x29, 0x00, 0xaa, 0x03, 0x08, 0x00, 0x61, 0x03, 0x30, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x61, 0x03, 0x30, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0x6a, 0x02, 0x08, 0x00, + 0x61, 0x03, 0x30, 0x25, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x62, 0x03, 0x30, 0x23, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0xaa, 0x01, 0x08, 0x00, 0x62, 0x03, 0x30, 0x24, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0xaa, 0x02, 0x08, 0x00, 0x62, 0x03, 0x30, 0x25, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x39, 0x00, 0xaa, 0x03, 0x08, 0x00, + 0x63, 0x03, 0x23, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x63, 0x03, 0x24, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x63, 0x03, 0x25, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x64, 0x03, 0x23, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0xaa, 0x01, 0x08, 0x00, + 0x64, 0x03, 0x24, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0xaa, 0x02, 0x08, 0x00, 0x64, 0x03, 0x25, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x28, 0x00, 0xaa, 0x03, 0x08, 0x00, 0x65, 0x03, 0x23, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x65, 0x03, 0x24, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0x6a, 0x02, 0x08, 0x00, + 0x65, 0x03, 0x25, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x66, 0x03, 0x23, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0xaa, 0x01, 0x08, 0x00, 0x66, 0x03, 0x24, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0xaa, 0x02, 0x08, 0x00, 0x66, 0x03, 0x25, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x38, 0x00, 0xaa, 0x03, 0x08, 0x00, + 0x67, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x32, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x67, 0x03, 0x26, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x32, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x67, 0x03, 0x27, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x32, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x68, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x22, 0x00, 0x6a, 0x01, 0x08, 0x00, + 0x68, 0x03, 0x26, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x22, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x68, 0x03, 0x27, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x22, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x69, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x12, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x69, 0x03, 0x26, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x12, 0x00, 0x6a, 0x02, 0x08, 0x00, + 0x69, 0x03, 0x27, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x12, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x6a, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x34, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x6a, 0x03, 0x27, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x34, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x6a, 0x03, 0x28, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x34, 0x00, 0x6a, 0x03, 0x08, 0x00, + 0x6b, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x24, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x6b, 0x03, 0x27, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x24, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x6b, 0x03, 0x28, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x24, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x6c, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x14, 0x00, 0x6a, 0x01, 0x08, 0x00, + 0x6c, 0x03, 0x27, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x14, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x6c, 0x03, 0x28, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x14, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x6d, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x35, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x6d, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x35, 0x00, 0x6a, 0x02, 0x08, 0x00, + 0x6d, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x35, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x6e, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x25, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x6e, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x25, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x6e, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x25, 0x00, 0x6a, 0x03, 0x08, 0x00, + 0x6f, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x15, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x6f, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x15, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x6f, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x15, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x70, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x31, 0x00, 0x6a, 0x01, 0x08, 0x00, + 0x70, 0x03, 0x27, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x31, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x70, 0x03, 0x28, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x31, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x71, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x71, 0x03, 0x27, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x6a, 0x02, 0x08, 0x00, + 0x71, 0x03, 0x28, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x21, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x72, 0x03, 0x26, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x72, 0x03, 0x27, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x72, 0x03, 0x28, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x11, 0x00, 0x6a, 0x03, 0x08, 0x00, + 0x73, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x33, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x73, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x33, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x73, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x33, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x74, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x23, 0x00, 0x6a, 0x01, 0x08, 0x00, + 0x74, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x23, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x74, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x23, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x75, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x75, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x6a, 0x02, 0x08, 0x00, + 0x75, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x13, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x76, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x30, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x76, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x30, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x76, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x30, 0x00, 0x6a, 0x03, 0x08, 0x00, + 0x77, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x20, 0x00, 0x6a, 0x01, 0x08, 0x00, 0x77, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x20, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x77, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x20, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x78, 0x03, 0x27, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00, 0x6a, 0x01, 0x08, 0x00, + 0x78, 0x03, 0x28, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00, 0x6a, 0x02, 0x08, 0x00, 0x78, 0x03, 0x29, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x10, 0x00, 0x6a, 0x03, 0x08, 0x00, 0x79, 0x03, 0x23, 0x28, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x01, 0x65, 0x01, 0x0d, 0x00, 0x79, 0x03, 0x24, 0x29, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x01, 0x65, 0x02, 0x0d, 0x00, + 0x79, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x01, 0x65, 0x03, 0x0d, 0x00, 0x7a, 0x03, 0x23, 0x28, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x01, 0xa5, 0x01, 0x0d, 0x00, 0x7a, 0x03, 0x24, 0x29, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x01, 0xa5, 0x02, 0x0d, 0x00, 0x7a, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x01, 0xa5, 0x03, 0x0d, 0x00, + 0x7b, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x7b, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x7b, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x7c, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x7c, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x7c, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x15, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x7d, 0x03, 0x23, 0x28, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x00, 0x65, 0x01, 0x0c, 0x00, 0x7d, 0x03, 0x24, 0x29, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x00, 0x65, 0x02, 0x0c, 0x00, + 0x7d, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x00, 0x65, 0x03, 0x0c, 0x00, 0x7e, 0x03, 0x23, 0x28, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x00, 0xa5, 0x01, 0x0c, 0x00, 0x7e, 0x03, 0x24, 0x29, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x00, 0xa5, 0x02, 0x0c, 0x00, 0x7e, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x03, 0x01, 0x05, 0x00, 0x72, 0x00, 0xa5, 0x03, 0x0c, 0x00, + 0x7f, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x66, 0x01, 0x0c, 0x00, 0x7f, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x66, 0x02, 0x0c, 0x00, 0x7f, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0x66, 0x03, 0x0c, 0x00, 0x80, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x80, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x80, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x14, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x81, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa0, 0x00, 0x66, 0x01, 0x08, 0x00, 0x81, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa0, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x81, 0x03, 0x09, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa0, 0x00, 0x66, 0x03, 0x08, 0x00, 0x82, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa0, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x82, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa0, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x82, 0x03, 0x09, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa0, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x83, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa1, 0x00, 0x66, 0x01, 0x08, 0x00, 0x83, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa1, 0x00, 0x66, 0x02, 0x08, 0x00, 0x83, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa1, 0x00, 0x66, 0x03, 0x08, 0x00, 0x84, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa1, 0x00, 0xa6, 0x01, 0x08, 0x00, + 0x84, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa1, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x84, 0x03, 0x09, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa1, 0x00, 0xa6, 0x03, 0x08, 0x00, 0x85, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa2, 0x00, 0x66, 0x01, 0x08, 0x00, 0x85, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa2, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x85, 0x03, 0x09, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa2, 0x00, 0x66, 0x03, 0x08, 0x00, 0x86, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa2, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x86, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa2, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x86, 0x03, 0x09, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa2, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x87, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0x66, 0x01, 0x08, 0x00, 0x87, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0x66, 0x02, 0x08, 0x00, 0x87, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0x66, 0x03, 0x08, 0x00, 0x88, 0x03, 0x09, 0x23, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0xa6, 0x01, 0x08, 0x00, + 0x88, 0x03, 0x09, 0x24, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x88, 0x03, 0x09, 0x25, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xa3, 0x00, 0xa6, 0x03, 0x08, 0x00, 0x89, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x89, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0xa6, 0x02, 0x0c, 0x00, + 0x89, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x8a, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x11, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x8a, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x11, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x8a, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x11, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0x8b, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x12, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0x8b, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x12, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x8b, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x12, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x8c, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x10, 0x00, 0xa6, 0x01, 0x0c, 0x00, + 0x8c, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x10, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0x8c, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x10, 0x00, 0xa6, 0x03, 0x0c, 0x00, 0x8d, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x50, 0x00, 0x67, 0x01, 0x10, 0x00, 0x8d, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x50, 0x00, 0x67, 0x02, 0x10, 0x00, + 0x8d, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x50, 0x00, 0x67, 0x03, 0x10, 0x00, 0x8e, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x50, 0x00, 0xa7, 0x01, 0x10, 0x00, 0x8e, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x50, 0x00, 0xa7, 0x02, 0x10, 0x00, 0x8e, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x50, 0x00, 0xa7, 0x03, 0x10, 0x00, + 0x8f, 0x03, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x51, 0x00, 0x67, 0x00, 0x10, 0x00, 0x90, 0x03, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0x51, 0x00, 0xa7, 0x00, 0x10, 0x00, 0x91, 0x03, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x56, 0x00, 0x67, 0x01, 0x0c, 0x00, 0x91, 0x03, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x56, 0x00, 0x67, 0x02, 0x0c, 0x00, + 0x91, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x56, 0x00, 0x67, 0x03, 0x0c, 0x00, 0x92, 0x03, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x56, 0x00, 0xa7, 0x01, 0x0c, 0x00, 0x92, 0x03, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x56, 0x00, 0xa7, 0x02, 0x0c, 0x00, 0x92, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x56, 0x00, 0xa7, 0x03, 0x0c, 0x00, + 0x93, 0x03, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x57, 0x00, 0x67, 0x00, 0x10, 0x00, 0x94, 0x03, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0x57, 0x00, 0xa7, 0x00, 0x10, 0x00, 0x95, 0x03, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x08, 0x00, 0x67, 0x01, 0x0c, 0x00, 0x95, 0x03, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x08, 0x00, 0x67, 0x02, 0x0c, 0x00, + 0x95, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x08, 0x00, 0x67, 0x03, 0x0c, 0x00, 0x96, 0x03, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x09, 0x00, 0xa7, 0x01, 0x0c, 0x00, 0x96, 0x03, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x09, 0x00, 0xa7, 0x02, 0x0c, 0x00, 0x96, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x09, 0x00, 0xa7, 0x03, 0x0c, 0x00, + 0x97, 0x03, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0a, 0x00, 0x67, 0x00, 0x10, 0x00, 0x98, 0x03, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0x0b, 0x00, 0xa7, 0x00, 0x10, 0x00, 0x99, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x66, 0x01, 0x08, 0x00, 0x99, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x99, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0x66, 0x03, 0x08, 0x00, 0x9a, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x9a, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x9a, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4e, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x9b, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4f, 0x00, 0x66, 0x00, 0x0c, 0x00, 0x9c, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4f, 0x00, 0xa6, 0x00, 0x0c, 0x00, 0x9d, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x66, 0x01, 0x08, 0x00, 0x9d, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x66, 0x02, 0x08, 0x00, + 0x9d, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0x66, 0x03, 0x08, 0x00, 0x9e, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0xa6, 0x01, 0x08, 0x00, 0x9e, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0xa6, 0x02, 0x08, 0x00, 0x9e, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x4c, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0x9f, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4d, 0x00, 0x66, 0x00, 0x0c, 0x00, 0xa0, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4d, 0x00, 0xa6, 0x00, 0x0c, 0x00, 0xa1, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0x66, 0x01, 0x0c, 0x00, 0xa1, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0x66, 0x02, 0x0c, 0x00, + 0xa1, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0x66, 0x03, 0x0c, 0x00, 0xa2, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0xa2, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0xa2, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2c, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0xa3, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2d, 0x00, 0x66, 0x00, 0x0c, 0x00, 0xa4, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x2d, 0x00, 0xa6, 0x00, 0x0c, 0x00, 0xa5, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x66, 0x01, 0x08, 0x00, 0xa5, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x66, 0x02, 0x08, 0x00, + 0xa5, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0x66, 0x03, 0x08, 0x00, 0xa6, 0x03, 0x23, 0x28, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0xa6, 0x01, 0x08, 0x00, 0xa6, 0x03, 0x24, 0x29, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0xa6, 0x02, 0x08, 0x00, 0xa6, 0x03, 0x25, 0x2a, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x42, 0x00, 0xa6, 0x03, 0x08, 0x00, + 0xa7, 0x03, 0x23, 0x23, 0x26, 0x00, 0x02, 0x03, 0x01, 0x00, 0x43, 0x00, 0x66, 0x00, 0x0c, 0x00, 0xa8, 0x03, 0x23, 0x23, 0x27, 0x00, 0x02, 0x03, 0x01, 0x00, 0x43, 0x00, 0xa6, 0x00, 0x0c, 0x00, 0xa9, 0x03, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x26, 0x00, 0x67, 0x01, 0x0c, 0x00, 0xa9, 0x03, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x26, 0x00, 0x67, 0x02, 0x0c, 0x00, + 0xa9, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x26, 0x00, 0x67, 0x03, 0x0c, 0x00, 0xaa, 0x03, 0x23, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x26, 0x00, 0xa7, 0x01, 0x0c, 0x00, 0xaa, 0x03, 0x24, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x26, 0x00, 0xa7, 0x02, 0x0c, 0x00, 0xaa, 0x03, 0x25, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x26, 0x00, 0xa7, 0x03, 0x0c, 0x00, + 0xab, 0x03, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x27, 0x00, 0x67, 0x00, 0x10, 0x00, 0xac, 0x03, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0x27, 0x00, 0xa7, 0x00, 0x10, 0x00, 0xad, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x54, 0x00, 0x67, 0x01, 0x10, 0x00, 0xad, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x54, 0x00, 0x67, 0x02, 0x10, 0x00, + 0xad, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x54, 0x00, 0x67, 0x03, 0x10, 0x00, 0xae, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x54, 0x00, 0xa7, 0x01, 0x10, 0x00, 0xae, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x54, 0x00, 0xa7, 0x02, 0x10, 0x00, 0xae, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x54, 0x00, 0xa7, 0x03, 0x10, 0x00, + 0xaf, 0x03, 0x23, 0x23, 0x26, 0x12, 0x02, 0x03, 0x01, 0x05, 0x55, 0x00, 0x67, 0x00, 0x10, 0x00, 0xb0, 0x03, 0x23, 0x23, 0x27, 0x12, 0x02, 0x03, 0x01, 0x05, 0x55, 0x00, 0xa7, 0x00, 0x10, 0x00, 0xb1, 0x03, 0x30, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x66, 0x00, 0x67, 0x01, 0x0c, 0x00, 0xb1, 0x03, 0x30, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x66, 0x00, 0x67, 0x02, 0x0c, 0x00, + 0xb1, 0x03, 0x30, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x66, 0x00, 0x67, 0x03, 0x0c, 0x00, 0xb2, 0x03, 0x30, 0x28, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x66, 0x00, 0xa7, 0x01, 0x0c, 0x00, 0xb2, 0x03, 0x30, 0x29, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x66, 0x00, 0xa7, 0x02, 0x0c, 0x00, 0xb2, 0x03, 0x30, 0x2a, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x66, 0x00, 0xa7, 0x03, 0x0c, 0x00, + 0xb3, 0x03, 0x30, 0x26, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x67, 0x00, 0x67, 0x00, 0x0c, 0x00, 0xb4, 0x03, 0x30, 0x27, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x67, 0x00, 0xa7, 0x00, 0x0c, 0x00, 0xb5, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x03, 0x00, 0xa7, 0x01, 0x10, 0x00, 0xb5, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x03, 0x00, 0xa7, 0x02, 0x10, 0x00, + 0xb5, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x03, 0x00, 0xa7, 0x03, 0x10, 0x00, 0xb6, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x03, 0x00, 0x67, 0x01, 0x10, 0x00, 0xb6, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x03, 0x00, 0x67, 0x02, 0x10, 0x00, 0xb6, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x03, 0x00, 0x67, 0x03, 0x10, 0x00, + 0xb7, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x42, 0x00, 0x67, 0x01, 0x10, 0x00, 0xb7, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x42, 0x00, 0x67, 0x02, 0x10, 0x00, 0xb7, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x42, 0x00, 0x67, 0x03, 0x10, 0x00, 0xb8, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x25, 0x00, 0x67, 0x01, 0x10, 0x00, + 0xb8, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x25, 0x00, 0x67, 0x02, 0x10, 0x00, 0xb8, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x25, 0x00, 0x67, 0x03, 0x10, 0x00, 0xb9, 0x03, 0x23, 0x23, 0x28, 0x12, 0x02, 0x03, 0x01, 0x05, 0x25, 0x00, 0xa7, 0x01, 0x10, 0x00, 0xb9, 0x03, 0x24, 0x24, 0x29, 0x12, 0x02, 0x03, 0x01, 0x05, 0x25, 0x00, 0xa7, 0x02, 0x10, 0x00, + 0xb9, 0x03, 0x25, 0x25, 0x2a, 0x12, 0x02, 0x03, 0x01, 0x05, 0x25, 0x00, 0xa7, 0x03, 0x10, 0x00, 0xba, 0x03, 0x23, 0x23, 0x28, 0x00, 0x02, 0x03, 0x01, 0x00, 0x83, 0x00, 0xa6, 0x01, 0x0c, 0x00, 0xba, 0x03, 0x24, 0x24, 0x29, 0x00, 0x02, 0x03, 0x01, 0x00, 0x83, 0x00, 0xa6, 0x02, 0x0c, 0x00, 0xba, 0x03, 0x25, 0x25, 0x2a, 0x00, 0x02, 0x03, 0x01, 0x00, 0x83, 0x00, 0xa6, 0x03, 0x0c, 0x00, + 0xbb, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4a, 0x00, 0x51, 0x02, 0x0c, 0x00, 0xbc, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4a, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xbd, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4a, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xbe, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4a, 0x00, 0x95, 0x02, 0x0c, 0x00, + 0xbf, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x41, 0x00, 0x51, 0x02, 0x0c, 0x00, 0xc0, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x41, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xc1, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x41, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xc2, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x41, 0x00, 0x95, 0x02, 0x0c, 0x00, + 0xc3, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x42, 0x00, 0x51, 0x02, 0x0c, 0x00, 0xc4, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x42, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xc5, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x42, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xc6, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x42, 0x00, 0x95, 0x02, 0x0c, 0x00, + 0xc7, 0x03, 0x30, 0x32, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x90, 0x00, 0x51, 0x01, 0x08, 0x00, 0xc7, 0x03, 0x0b, 0x30, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x91, 0x00, 0x51, 0x01, 0x08, 0x00, 0xc7, 0x03, 0x30, 0x03, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x92, 0x00, 0x51, 0x01, 0x08, 0x00, 0xc7, 0x03, 0x03, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x93, 0x00, 0x51, 0x01, 0x08, 0x00, + 0xc8, 0x03, 0x30, 0x31, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x90, 0x00, 0x55, 0x01, 0x08, 0x00, 0xc8, 0x03, 0x0a, 0x30, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x91, 0x00, 0x55, 0x01, 0x08, 0x00, 0xc8, 0x03, 0x30, 0x03, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x92, 0x00, 0x55, 0x01, 0x08, 0x00, 0xc8, 0x03, 0x03, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x93, 0x00, 0x55, 0x01, 0x08, 0x00, + 0xc9, 0x03, 0x30, 0x34, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x90, 0x00, 0x91, 0x01, 0x08, 0x00, 0xc9, 0x03, 0x0d, 0x30, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x91, 0x00, 0x91, 0x01, 0x08, 0x00, 0xc9, 0x03, 0x30, 0x04, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x92, 0x00, 0x9d, 0x01, 0x08, 0x00, 0xc9, 0x03, 0x04, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x93, 0x00, 0x9d, 0x01, 0x08, 0x00, + 0xca, 0x03, 0x30, 0x33, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x90, 0x00, 0x95, 0x01, 0x08, 0x00, 0xca, 0x03, 0x0c, 0x30, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x91, 0x00, 0x95, 0x01, 0x08, 0x00, 0xca, 0x03, 0x30, 0x03, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x92, 0x00, 0x5d, 0x01, 0x08, 0x00, 0xca, 0x03, 0x03, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x93, 0x00, 0x5d, 0x01, 0x08, 0x00, + 0xcb, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x51, 0x01, 0x08, 0x00, 0xcc, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x55, 0x01, 0x08, 0x00, 0xcd, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x91, 0x01, 0x08, 0x00, 0xce, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x44, 0x00, 0x95, 0x01, 0x08, 0x00, + 0xcf, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x51, 0x02, 0x0c, 0x00, 0xd0, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xd1, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xd2, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x45, 0x00, 0x95, 0x02, 0x0c, 0x00, + 0xd3, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x98, 0x00, 0x51, 0x01, 0x08, 0x00, 0xd4, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x98, 0x00, 0x55, 0x01, 0x08, 0x00, 0xd5, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x98, 0x00, 0x91, 0x01, 0x08, 0x00, 0xd6, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x98, 0x00, 0x95, 0x01, 0x08, 0x00, + 0xd7, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x32, 0x00, 0x97, 0x01, 0x0c, 0x00, 0xd8, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x32, 0x00, 0x57, 0x01, 0x0c, 0x00, 0xd9, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x33, 0x00, 0x97, 0x01, 0x0c, 0x00, 0xda, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x33, 0x00, 0x57, 0x01, 0x0c, 0x00, + 0xdb, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x30, 0x00, 0x97, 0x01, 0x0c, 0x00, 0xdc, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x30, 0x00, 0x57, 0x01, 0x0c, 0x00, 0xdd, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x31, 0x00, 0x97, 0x01, 0x0c, 0x00, 0xde, 0x03, 0x30, 0x30, 0x12, 0x00, 0x02, 0x01, 0x05, 0x00, 0x31, 0x00, 0x57, 0x01, 0x0c, 0x00, + 0xdf, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x99, 0x00, 0x51, 0x01, 0x08, 0x00, 0xe0, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x99, 0x00, 0x55, 0x01, 0x08, 0x00, 0xe1, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x99, 0x00, 0x91, 0x01, 0x08, 0x00, 0xe2, 0x03, 0x30, 0x30, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x99, 0x00, 0x95, 0x01, 0x08, 0x00, + 0xe3, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4b, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xe4, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4b, 0x00, 0x51, 0x02, 0x0c, 0x00, 0xe5, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x4b, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xe6, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0x51, 0x02, 0x0c, 0x00, + 0xe7, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xe8, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xe9, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x46, 0x00, 0x95, 0x02, 0x0c, 0x00, 0xea, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x51, 0x02, 0x0c, 0x00, + 0xeb, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x55, 0x02, 0x0c, 0x00, 0xec, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x91, 0x02, 0x0c, 0x00, 0xed, 0x03, 0x30, 0x30, 0x30, 0x00, 0x02, 0x03, 0x01, 0x00, 0x47, 0x00, 0x95, 0x02, 0x0c, 0x00, 0xee, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x00, 0x00, 0x00, 0x04, 0x00, + 0xee, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x00, 0x00, 0x00, 0x04, 0x00, 0xee, 0x03, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xd8, 0xc0, 0x00, 0x00, 0x24, 0x00, 0xee, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xdc, 0xc0, 0x00, 0x00, 0x24, 0x00, 0xef, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xde, 0xc0, 0x00, 0x00, 0x24, 0x00, + 0xef, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc1, 0x00, 0x00, 0x00, 0x00, 0xf0, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x00, 0x00, 0x00, 0x04, 0x00, 0xf0, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x00, 0x00, 0x00, 0x04, 0x00, 0xf1, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x04, 0x00, 0x00, 0x05, 0x00, + 0xf1, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x04, 0x00, 0x00, 0x05, 0x00, 0xf1, 0x03, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xd8, 0xe0, 0x00, 0x00, 0x24, 0x00, 0xf1, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xdc, 0xe8, 0x00, 0x00, 0x24, 0x00, 0xf2, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xde, 0xe8, 0x00, 0x00, 0x24, 0x00, + 0xf2, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xe9, 0x00, 0x00, 0x00, 0x00, 0xf3, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x04, 0x00, 0x00, 0x05, 0x00, 0xf3, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x04, 0x00, 0x00, 0x05, 0x00, 0xf4, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x05, 0x00, 0x00, 0x05, 0x00, + 0xf4, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x05, 0x00, 0x00, 0x05, 0x00, 0xf4, 0x03, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xd8, 0xe8, 0x00, 0x00, 0x24, 0x00, 0xf4, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xdc, 0xe0, 0x00, 0x00, 0x24, 0x00, 0xf5, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xde, 0xe0, 0x00, 0x00, 0x24, 0x00, + 0xf5, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xe1, 0x00, 0x00, 0x00, 0x00, 0xf6, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x05, 0x00, 0x00, 0x05, 0x00, 0xf6, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x05, 0x00, 0x00, 0x05, 0x00, 0xf7, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x01, 0x00, 0x00, 0x05, 0x00, + 0xf7, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x01, 0x00, 0x00, 0x05, 0x00, 0xf7, 0x03, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xd8, 0xc8, 0x00, 0x00, 0x24, 0x00, 0xf7, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xdc, 0xc8, 0x00, 0x00, 0x24, 0x00, 0xf8, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xde, 0xc8, 0x00, 0x00, 0x24, 0x00, + 0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xc9, 0x00, 0x00, 0x00, 0x00, 0xf9, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x01, 0x00, 0x00, 0x05, 0x00, 0xf9, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x01, 0x00, 0x00, 0x05, 0x00, 0xfa, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x06, 0x00, 0x00, 0x05, 0x00, + 0xfa, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x06, 0x00, 0x00, 0x05, 0x00, 0xfa, 0x03, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xd8, 0xf0, 0x00, 0x00, 0x24, 0x00, 0xfa, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xdc, 0xf8, 0x00, 0x00, 0x24, 0x00, 0xfb, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xde, 0xf8, 0x00, 0x00, 0x24, 0x00, + 0xfb, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xf9, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x06, 0x00, 0x00, 0x05, 0x00, 0xfc, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x06, 0x00, 0x00, 0x05, 0x00, 0xfd, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x07, 0x00, 0x00, 0x05, 0x00, + 0xfd, 0x03, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x07, 0x00, 0x00, 0x05, 0x00, 0xfd, 0x03, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xd8, 0xf8, 0x00, 0x00, 0x24, 0x00, 0xfd, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xdc, 0xf0, 0x00, 0x00, 0x24, 0x00, 0xfe, 0x03, 0x2e, 0x2d, 0x00, 0x00, 0x04, 0x09, 0x00, 0x00, 0xde, 0xf0, 0x00, 0x00, 0x24, 0x00, + 0xfe, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xf1, 0x00, 0x00, 0x00, 0x00, 0xff, 0x03, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x07, 0x00, 0x00, 0x05, 0x00, 0xff, 0x03, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x07, 0x00, 0x00, 0x05, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xfa, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x02, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe0, 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf8, 0x00, 0x00, 0x00, 0x00, 0x04, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf5, 0x00, 0x00, 0x00, 0x00, + 0x05, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xfd, 0x00, 0x00, 0x00, 0x00, 0x07, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf4, 0x00, 0x00, 0x00, 0x00, 0x08, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe5, 0x00, 0x00, 0x00, 0x00, + 0x09, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdb, 0x05, 0x00, 0x00, 0x05, 0x00, 0x09, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd9, 0xc0, 0x00, 0x00, 0x04, 0x00, + 0x0a, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdb, 0x00, 0x00, 0x00, 0x04, 0x00, 0x0a, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x05, 0x00, 0x00, 0x05, 0x00, 0x0b, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x0c, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x02, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x02, 0x00, 0x00, 0x05, 0x00, 0x0c, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdd, 0xd0, 0x00, 0x00, 0x04, 0x00, 0x0d, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x03, 0x00, 0x00, 0x05, 0x00, + 0x0d, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x03, 0x00, 0x00, 0x05, 0x00, 0x0d, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdb, 0x07, 0x00, 0x00, 0x05, 0x00, 0x0d, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdd, 0xd8, 0x00, 0x00, 0x04, 0x00, 0x0e, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x02, 0x00, 0x00, 0x05, 0x00, + 0x0e, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdb, 0x02, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x03, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdb, 0x03, 0x00, 0x00, 0x05, 0x00, 0x0f, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x07, 0x00, 0x00, 0x05, 0x00, + 0x10, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x01, 0x00, 0x00, 0x05, 0x00, 0x10, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdb, 0x01, 0x00, 0x00, 0x05, 0x00, 0x10, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x01, 0x00, 0x00, 0x05, 0x00, 0x11, 0x04, 0x0e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdf, 0x06, 0x00, 0x00, 0x05, 0x00, + 0x12, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd9, 0xc8, 0x00, 0x00, 0x04, 0x00, 0x12, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x13, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xda, 0xc0, 0x00, 0x00, 0x24, 0x00, 0x14, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xda, 0xc8, 0x00, 0x00, 0x24, 0x00, + 0x15, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xda, 0xd0, 0x00, 0x00, 0x24, 0x00, 0x16, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xda, 0xd8, 0x00, 0x00, 0x24, 0x00, 0x17, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdb, 0xc0, 0x00, 0x00, 0x24, 0x00, 0x18, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdb, 0xc8, 0x00, 0x00, 0x24, 0x00, + 0x19, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdb, 0xd0, 0x00, 0x00, 0x24, 0x00, 0x1a, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdb, 0xd8, 0x00, 0x00, 0x24, 0x00, 0x1b, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x02, 0x00, 0x00, 0x05, 0x00, 0x1b, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x02, 0x00, 0x00, 0x05, 0x00, + 0x1b, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8, 0xd0, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd1, 0x00, 0x00, 0x00, 0x00, 0x1c, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd8, 0x03, 0x00, 0x00, 0x05, 0x00, 0x1c, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdc, 0x03, 0x00, 0x00, 0x05, 0x00, + 0x1c, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xd8, 0xd8, 0x00, 0x00, 0x04, 0x00, 0x1c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd8, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x1d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xde, 0xd9, 0x00, 0x00, 0x00, 0x00, 0x1e, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x02, 0x00, 0x00, 0x05, 0x00, + 0x1e, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x02, 0x00, 0x00, 0x05, 0x00, 0x1f, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xde, 0x03, 0x00, 0x00, 0x05, 0x00, 0x1f, 0x04, 0x0c, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xda, 0x03, 0x00, 0x00, 0x05, 0x00, 0x20, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdb, 0xf0, 0x00, 0x00, 0x24, 0x00, + 0x21, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdf, 0xf0, 0x00, 0x00, 0x24, 0x00, 0x22, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdb, 0xe8, 0x00, 0x00, 0x24, 0x00, 0x23, 0x04, 0x2d, 0x2e, 0x00, 0x00, 0x09, 0x04, 0x00, 0x00, 0xdf, 0xe8, 0x00, 0x00, 0x24, 0x00, 0x24, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdd, 0xe0, 0x00, 0x00, 0x04, 0x00, + 0x24, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xe1, 0x00, 0x00, 0x00, 0x00, 0x25, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdd, 0xe8, 0x00, 0x00, 0x04, 0x00, 0x25, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdd, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x26, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xda, 0xe9, 0x00, 0x00, 0x00, 0x00, + 0x27, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe4, 0x00, 0x00, 0x00, 0x00, 0x28, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xee, 0x00, 0x00, 0x00, 0x00, 0x29, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe8, 0x00, 0x00, 0x00, 0x00, 0x2a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xeb, 0x00, 0x00, 0x00, 0x00, + 0x2b, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xe9, 0x00, 0x00, 0x00, 0x00, 0x2c, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xea, 0x00, 0x00, 0x00, 0x00, 0x2d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xec, 0x00, 0x00, 0x00, 0x00, 0x2e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xed, 0x00, 0x00, 0x00, 0x00, + 0x2f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xfe, 0x00, 0x00, 0x00, 0x00, 0x30, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xff, 0x00, 0x00, 0x00, 0x00, 0x31, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xfb, 0x00, 0x00, 0x00, 0x00, 0x32, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf2, 0x00, 0x00, 0x00, 0x00, + 0x33, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf3, 0x00, 0x00, 0x00, 0x00, 0x34, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x35, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf1, 0x00, 0x00, 0x00, 0x00, 0x36, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf9, 0x00, 0x00, 0x00, 0x00, + 0x37, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x38, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xe3, 0x00, 0x00, 0x00, 0x00, 0x39, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf7, 0x00, 0x00, 0x00, 0x00, 0x3a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xf6, 0x00, 0x00, 0x00, 0x00, + 0x3b, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdd, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x3c, 0x04, 0x2e, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xdf, 0xc0, 0x00, 0x00, 0x04, 0x00, 0x3d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd9, 0xd0, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9b, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x3f, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x40, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xdb, 0xe2, 0x00, 0x00, 0x00, 0x00, 0x41, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x07, 0x00, 0x00, 0x05, 0x00, 0x42, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x07, 0x00, 0x00, 0x05, 0x00, + 0x43, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x05, 0x00, 0x00, 0x05, 0x00, 0x44, 0x04, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x06, 0x00, 0x00, 0x05, 0x00, 0x45, 0x04, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x06, 0x00, 0x00, 0x05, 0x00, 0x46, 0x04, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xd9, 0x04, 0x00, 0x00, 0x05, 0x00, + 0x47, 0x04, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x06, 0x00, 0x00, 0x05, 0x00, 0x48, 0x04, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x06, 0x00, 0x00, 0x05, 0x00, 0x49, 0x04, 0x09, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x04, 0x00, 0x00, 0x05, 0x00, 0x4a, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x07, 0x00, 0x00, 0x05, 0x00, + 0x4a, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xdf, 0xe0, 0x00, 0x00, 0x20, 0x00, 0x4b, 0x04, 0x0b, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xdd, 0x07, 0x00, 0x00, 0x05, 0x00, 0x4b, 0x04, 0x1a, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0xdf, 0xe0, 0x00, 0x00, 0x20, 0x00, 0x4c, 0x04, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x00, 0x01, 0x00, 0x05, 0x00, + 0x4d, 0x04, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x00, 0x01, 0x08, 0x05, 0x00, 0x4e, 0x04, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x01, 0x01, 0x00, 0x05, 0x00, 0x4f, 0x04, 0x11, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x01, 0x01, 0x08, 0x05, 0x00, 0x50, 0x04, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x05, 0x00, + 0x50, 0x04, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x05, 0x00, 0x51, 0x04, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x05, 0x00, 0x51, 0x04, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x05, 0x00, 0x52, 0x04, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x05, 0x00, + 0x52, 0x04, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x05, 0x00, 0x53, 0x04, 0x3d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x05, 0x00, 0x53, 0x04, 0x3e, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x01, 0x00, 0x05, 0x00, 0x54, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x05, 0x00, + 0x55, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x55, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x55, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x05, 0x00, 0x56, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x01, 0x00, 0x05, 0x00, + 0x57, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x05, 0x00, 0x57, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x05, 0x00, 0x57, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x08, 0x05, 0x00, 0x58, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x01, 0x00, 0x05, 0x00, + 0x59, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x05, 0x00, 0x59, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x00, 0x05, 0x00, 0x59, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x04, 0x01, 0x08, 0x05, 0x00, 0x5a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x06, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x5b, 0x04, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x63, 0x00, 0x00, 0x00, 0x08, 0x00, 0x5c, 0x04, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x08, 0x00, 0x5c, 0x04, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x08, 0x00, 0x5c, 0x04, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x02, 0x00, 0x01, 0x08, 0x08, 0x00, + 0x5d, 0x04, 0x02, 0x06, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x08, 0x00, 0x5d, 0x04, 0x03, 0x07, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x00, 0x08, 0x00, 0x5d, 0x04, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x03, 0x00, 0x01, 0x08, 0x08, 0x00, 0x5e, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0x00, 0x05, 0x00, + 0x5f, 0x04, 0x06, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x05, 0x01, 0x00, 0x05, 0x00, 0x60, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x61, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x62, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x07, 0x01, 0x00, 0x05, 0x00, + 0x63, 0x04, 0x03, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x82, 0x00, 0x06, 0x00, 0x08, 0x00, 0x63, 0x04, 0x04, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x82, 0x00, 0x06, 0x00, 0x08, 0x00, 0x64, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xaa, 0x00, 0x01, 0x00, 0x00, 0x00, 0x65, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x32, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x66, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x67, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc1, 0x01, 0x00, 0x00, 0x00, 0x68, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc2, 0x01, 0x00, 0x00, 0x00, 0x69, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc3, 0x01, 0x00, 0x00, 0x00, + 0x6a, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc4, 0x01, 0x00, 0x00, 0x00, 0x6b, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x06, 0x09, 0x00, 0x05, 0x00, 0x6c, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x06, 0x05, 0x00, 0x05, 0x00, 0x6d, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x06, 0x01, 0x00, 0x05, 0x00, + 0x6e, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x07, 0x01, 0x00, 0x05, 0x00, 0x6f, 0x04, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x78, 0x00, 0x01, 0x00, 0x08, 0x00, 0x70, 0x04, 0x04, 0x08, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x79, 0x00, 0x01, 0x00, 0x08, 0x00, 0x71, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd4, 0x01, 0x00, 0x00, 0x00, + 0x72, 0x04, 0x04, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x80, 0x00, 0x06, 0x00, 0x08, 0x00, 0x73, 0x04, 0x04, 0x0f, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x81, 0x00, 0x06, 0x00, 0x08, 0x00, 0x74, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcf, 0x01, 0x00, 0x00, 0x00, 0x75, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd7, 0x01, 0x00, 0x00, 0x00, + 0x76, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc0, 0x01, 0x00, 0x00, 0x00, 0x77, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xee, 0x01, 0x00, 0x00, 0x00, 0x78, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xef, 0x01, 0x00, 0x00, 0x00, 0x79, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x05, 0x09, 0x00, 0x05, 0x00, + 0x7a, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x05, 0x09, 0x08, 0x05, 0x00, 0x7b, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x09, 0x00, 0x05, 0x00, 0x7c, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1e, 0x01, 0x09, 0x08, 0x05, 0x00, 0x7d, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xea, 0x09, 0x00, 0x00, 0x00, + 0x7e, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x05, 0x09, 0x00, 0x05, 0x00, 0x7f, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf6, 0x00, 0x02, 0x00, 0x08, 0x00, 0x80, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf6, 0x00, 0x02, 0x08, 0x08, 0x00, 0x81, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x06, 0x00, 0x08, 0x00, + 0x82, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf5, 0x00, 0x06, 0x08, 0x08, 0x00, 0x83, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe8, 0x09, 0x00, 0x00, 0x00, 0x84, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x09, 0x00, 0x05, 0x00, 0x85, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xfa, 0x09, 0x00, 0x00, 0x00, + 0x86, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1e, 0xfb, 0x09, 0x00, 0x00, 0x00, 0x87, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x04, 0x01, 0x00, 0x05, 0x00, 0x88, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x04, 0x01, 0x08, 0x05, 0x00, 0x89, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x05, 0x01, 0x00, 0x05, 0x00, + 0x8a, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x05, 0x01, 0x08, 0x05, 0x00, 0x8b, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x01, 0x00, 0x05, 0x00, 0x8c, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x01, 0x08, 0x05, 0x00, 0x8d, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x04, 0x01, 0x00, 0x05, 0x00, + 0x8e, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x04, 0x01, 0x08, 0x05, 0x00, 0x8f, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x05, 0x01, 0x00, 0x05, 0x00, 0x90, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x05, 0x01, 0x08, 0x05, 0x00, 0x91, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x03, 0x01, 0x00, 0x05, 0x00, + 0x92, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x03, 0x01, 0x08, 0x05, 0x00, 0x93, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x01, 0x01, 0x00, 0x05, 0x00, 0x94, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x02, 0x01, 0x00, 0x05, 0x00, 0x95, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x03, 0x01, 0x00, 0x05, 0x00, + 0x96, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x18, 0x00, 0x01, 0x00, 0x05, 0x00, 0x97, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x01, 0x01, 0x00, 0x05, 0x00, 0x98, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x07, 0x05, 0x00, 0x05, 0x00, 0x99, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x05, 0x00, 0x05, 0x00, + 0x9a, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x1c, 0x00, 0x01, 0x00, 0x05, 0x00, 0x9b, 0x04, 0x03, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x01, 0x00, 0x04, 0x00, 0x9b, 0x04, 0x04, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0xc8, 0x00, 0x01, 0x08, 0x04, 0x00, 0x9c, 0x04, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb0, 0x00, 0x01, 0x40, 0x08, 0x00, + 0x9c, 0x04, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb1, 0x00, 0x01, 0x40, 0x08, 0x00, 0x9c, 0x04, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb1, 0x00, 0x01, 0x40, 0x08, 0x00, 0x9c, 0x04, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xb1, 0x00, 0x01, 0x48, 0x08, 0x00, 0x9d, 0x04, 0x0d, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x01, 0x40, 0x05, 0x00, + 0x9e, 0x04, 0x0f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x01, 0x01, 0x48, 0x05, 0x00, 0x9f, 0x04, 0x05, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xc0, 0x00, 0x01, 0x40, 0x08, 0x00, 0x9f, 0x04, 0x06, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xc1, 0x00, 0x01, 0x40, 0x08, 0x00, 0x9f, 0x04, 0x07, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xc1, 0x00, 0x01, 0x40, 0x08, 0x00, + 0x9f, 0x04, 0x08, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xc1, 0x00, 0x01, 0x48, 0x08, 0x00, 0xa0, 0x04, 0x02, 0x3c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xa0, 0x04, 0x03, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x62, 0x00, 0x00, 0x00, 0x0a, 0x00, 0xa1, 0x04, 0x13, 0x12, 0x00, 0x00, 0x06, 0x05, 0x00, 0x00, 0xc8, 0x00, 0x00, 0x00, 0x08, 0x00, + 0xa2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc9, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd7, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa5, 0x04, 0x02, 0x0b, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x08, 0x00, + 0xa5, 0x04, 0x03, 0x0c, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x02, 0x00, 0x08, 0x00, 0xa5, 0x04, 0x04, 0x0d, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf0, 0x00, 0x02, 0x08, 0x08, 0x00, 0xa5, 0x04, 0x0b, 0x02, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf1, 0x00, 0x02, 0x00, 0x08, 0x00, 0xa5, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf1, 0x00, 0x02, 0x00, 0x08, 0x00, + 0xa5, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf1, 0x00, 0x02, 0x08, 0x08, 0x00, 0xa6, 0x04, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x06, 0x01, 0x00, 0x05, 0x00, 0xa6, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x06, 0x01, 0x00, 0x05, 0x00, 0xa6, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x06, 0x01, 0x08, 0x05, 0x00, + 0xa7, 0x04, 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x07, 0x01, 0x00, 0x05, 0x00, 0xa7, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x07, 0x01, 0x00, 0x05, 0x00, 0xa7, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x07, 0x01, 0x08, 0x05, 0x00, 0xa8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xf8, 0x01, 0x00, 0x00, 0x00, + 0xa9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc8, 0x01, 0x00, 0x00, 0x00, 0xaa, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xc9, 0x01, 0x00, 0x00, 0x00, 0xab, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xca, 0x01, 0x00, 0x00, 0x00, 0xac, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xcb, 0x01, 0x00, 0x00, 0x00, + 0xad, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x00, 0x09, 0x00, 0x05, 0x00, 0xad, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x00, 0x09, 0x08, 0x05, 0x00, 0xae, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x01, 0x09, 0x00, 0x05, 0x00, 0xae, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x01, 0x09, 0x08, 0x05, 0x00, + 0xaf, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x02, 0x09, 0x00, 0x05, 0x00, 0xaf, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x02, 0x09, 0x08, 0x05, 0x00, 0xb0, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x03, 0x09, 0x00, 0x05, 0x00, 0xb0, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x03, 0x09, 0x08, 0x05, 0x00, + 0xb1, 0x04, 0x07, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x04, 0x09, 0x00, 0x05, 0x00, 0xb1, 0x04, 0x08, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x04, 0x09, 0x08, 0x05, 0x00, 0xb2, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xc7, 0x07, 0x09, 0x00, 0x05, 0x00, 0xb3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, + 0xb4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xe8, 0x01, 0x00, 0x00, 0x00, 0xb5, 0x04, 0x0a, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x01, 0x00, 0x05, 0x00, 0xb6, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x05, 0x00, 0x05, 0x00, 0xb7, 0x04, 0x04, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x09, 0x00, 0x05, 0x00, + 0xb8, 0x04, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0xae, 0x06, 0x0d, 0x00, 0x05, 0x00, 0xb9, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x00, 0x08, 0x00, 0xb9, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xf9, 0x00, 0x02, 0x08, 0x08, 0x00, 0xba, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x06, 0x00, 0x08, 0x00, + 0xbb, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xbc, 0x04, 0x04, 0x11, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0xf8, 0x00, 0x0a, 0x00, 0x08, 0x00, 0xbd, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x02, 0x00, 0x08, 0x00, 0xbd, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x02, 0x08, 0x08, 0x00, + 0xbe, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x06, 0x00, 0x08, 0x00, 0xbe, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x06, 0x08, 0x08, 0x00, 0xbf, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0e, 0x00, 0x08, 0x00, 0xbf, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0e, 0x08, 0x08, 0x00, + 0xc0, 0x04, 0x0c, 0x03, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0a, 0x00, 0x08, 0x00, 0xc0, 0x04, 0x0d, 0x04, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0xfc, 0x00, 0x0a, 0x08, 0x08, 0x00, 0xc1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd5, 0x01, 0x00, 0x00, 0x00, 0xc2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd6, 0x01, 0x00, 0x00, 0x00, + 0xc3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd8, 0x01, 0x00, 0x00, 0x00, 0xc4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xd9, 0x01, 0x00, 0x00, 0x00, 0xc5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xda, 0x01, 0x00, 0x00, 0x00, 0xc6, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdb, 0x01, 0x00, 0x00, 0x00, + 0xc7, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdc, 0x01, 0x00, 0x00, 0x00, 0xc8, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdd, 0x01, 0x00, 0x00, 0x00, 0xc9, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xde, 0x01, 0x00, 0x00, 0x00, 0xca, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xdf, 0x01, 0x00, 0x00, 0x00, + 0xcb, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x01, 0x00, 0x00, 0x00, 0xcc, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x01, 0x00, 0x00, 0x00, 0xcd, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x0d, 0x00, 0x00, 0x00, 0xce, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x09, 0x00, 0x00, 0x00, + 0xcf, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfe, 0x0d, 0x00, 0x00, 0x00, 0xd0, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xff, 0x09, 0x00, 0x00, 0x00, 0xd1, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfc, 0x01, 0x00, 0x00, 0x00, 0xd2, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x01, 0x00, 0x00, 0x00, + 0xd3, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfb, 0x01, 0x00, 0x00, 0x00, 0xd4, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfd, 0x01, 0x00, 0x00, 0x00, 0xd5, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0xfa, 0x09, 0x00, 0x00, 0x00, +}; +u8 const Asm_amd64::raw_clobber_forms[39216] = { + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x02, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x02, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x09, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x09, 0x00, 0x01, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x1e, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x09, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3b, 0x00, 0x04, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x01, 0x00, 0x00, 0x04, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x21, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x07, 0x00, 0x00, 0x00, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x04, 0x00, 0x1b, 0x00, 0x24, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x36, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x37, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, + 0x00, 0x00, 0x04, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, + 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x01, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, + 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x01, 0x00, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x20, 0x01, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x20, 0x01, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x20, 0x01, 0x00, 0x00, 0x04, 0x01, 0x00, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x01, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x01, + 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x01, 0x00, 0x00, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xa2, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x34, 0x00, 0x34, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x11, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x24, 0x00, 0x25, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x1f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x40, 0x00, 0x40, 0x00, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x00, 0x00, 0x0f, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, + 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x29, 0x00, 0x16, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x39, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x03, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x03, 0x04, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x09, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x08, 0x00, 0x00, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x09, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x09, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x36, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x05, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x0e, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, 0x0b, 0x00, 0x34, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x20, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x82, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x80, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x02, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x38, 0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x08, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x03, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x03, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x09, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x09, 0x00, 0x0f, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x10, 0x00, 0x00, 0x00, 0xc0, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, + 0x00, 0x00, 0xc0, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x01, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x82, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x09, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x04, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, + 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x0d, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x80, 0x00, + 0x00, 0x00, 0x01, 0x00, 0x05, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x80, 0x00, 0x00, 0x00, 0x01, 0x00, 0x01, 0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x09, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, +}; diff --git a/src/check_asm.cpp b/src/check_asm.cpp new file mode 100644 index 000000000..4443fc8a7 --- /dev/null +++ b/src/check_asm.cpp @@ -0,0 +1,1692 @@ +// Bit-width the operand's Odin type occupies in a register/immediate slot. +// Integers/floats/bools/pointers -> their size; #simd -> total vector width. 0 if unknown. +gb_internal i32 check_asm_operand_bit_width(Type *type) { + if (type == nullptr || type == t_invalid) { + return 0; + } + if (is_type_untyped(type)) { + return -1; + } + if (is_type_boolean(type)) { + return 1; + } + i64 sz = type_size_of(base_type(type)); + if (sz <= 0) { + return 0; + } + return cast(i32)(sz * 8); +} + +gb_internal bool is_valid_asm_parameter_type(Type *type) { + if (is_type_integer(type)) { + return true; + } + if (is_type_float(type)) { + return true; + } + if (is_type_boolean(type)) { + return true; + } + if (is_type_pointer(type) || is_type_multi_pointer(type)) { + return true; + } + if (is_type_simd_vector(type)) { + return true; + } + return false; +} + +gb_internal AsmRegClass check_asm_reg_class_from_type(Type *type) { + if (is_type_integer(type)) { + return AsmRegClass_Integer; + } + if (is_type_float(type)) { + return AsmRegClass_Float; + } + if (is_type_boolean(type)) { + return AsmRegClass_Integer; + } + if (is_type_pointer(type) || is_type_multi_pointer(type)) { + return AsmRegClass_Integer; + } + if (is_type_simd_vector(type)) { + return AsmRegClass_Vector; + } + return AsmRegClass_Unknown; +} + +gb_internal AsmOperandKind determine_asm_operand_kind(Operand const *operand) { + if (operand->mode == Addressing_Constant) { + return AsmOperand_Immediate; + } + Ast *expr = operand->expr; + switch (expr->kind) { + case_ast_node(label, AsmLabelDecl, expr); + return AsmOperand_Label; + case_end; + case_ast_node(reg, AsmRegister, expr); + return AsmOperand_Register; + case_end; + case_ast_node(reg, AsmMemoryOperand, expr); + return AsmOperand_Memory; + case_end; + case_ast_node(ident, Ident, expr); + // TODO(bill): Is this correct? + if (expr->tav.mode == Addressing_Constant) { + return AsmOperand_Immediate; + } + Entity *e = entity_of_node(expr); + if (e != nullptr && e->kind == Entity_Variable && (e->flags & EntityFlag_PolyConst) != 0) { + return AsmOperand_Immediate; + } + return AsmOperand_Register; + case_end; + } + return AsmOperand_Invalid; +} + +enum AsmMismatch : u8 { + AsmMismatch_None, + AsmMismatch_Size, // register / vector width mismatch + AsmMismatch_Class, // register class mismatch + AsmMismatch_ImmRange, // constant immediate does not fit the slot width + AsmMismatch_ImmType, // non-integer constant where an integer immediate is required +}; + +// Does a constant immediate value fit a slot of `bits` width (0 == unconstrained)? +// Accepts either a signed or an unsigned interpretation of the bit pattern, which +// matches how the assembler treats imm fields (e.g. both 200 and -56 fit imm8). +gb_internal bool check_asm_immediate_value_fits(ExactValue ev, i32 bits, i32 *needed_, AsmMismatch *mismatch_) { + if (ev.kind == ExactValue_Float) { + // Try to convert it if possible to an integer + ev = exact_value_to_integer(ev); + } + + switch (ev.kind) { + case ExactValue_Bool: + // Encodes as 0 or 1; fits any immediate slot with a non-zero width. + if (needed_) *needed_ = 1; + return true; + + case ExactValue_Integer: { + mp_int const *v = &ev.value_integer; + i32 mag_bits = cast(i32)mp_count_bits(v); + if (needed_) *needed_ = mag_bits; + + if (bits == 0) { + // TODO(bill): is this a decent width?! + bits = 64; // slot does not pin a width, just set a decent default + } + if (mp_iszero(v)) { + return true; + } + if (!mp_isneg(v)) { + // Non-negative: fits if the unsigned bit pattern is <= `bits` wide. + if (mag_bits <= bits) { + return true; + } + } else { + // Negative: fits signed in `bits` iff mp_count_bits(-v - 1) <= bits-1. + // (-v-1 ranges 0 .. 2^(bits-1)-1 for the representable negatives.) + mp_int tmp = {}; + mp_init(&tmp); + defer (mp_clear(&tmp)); + mp_neg(v, &tmp); // tmp = -v (positive magnitude) + mp_sub_d(&tmp, 1, &tmp); // tmp = -v - 1 + i32 nb = cast(i32)mp_count_bits(&tmp); + if (needed_) *needed_ = nb + 1; // signed bit-width, for the diagnostic + if (nb <= bits-1) { + return true; + } + } + if (mismatch_) *mismatch_ = AsmMismatch_ImmRange; + return false; + } + + case ExactValue_Float: + // TODO(bill): does any architecture support floating-point immediates? + // amd64 has no floating-point instruction immediates. + if (needed_) *needed_ = 0; + if (mismatch_) *mismatch_ = AsmMismatch_ImmType; + return false; + } + if (mismatch_) *mismatch_ = AsmMismatch_ImmType; + return false; +} + +// Returns true if the operand's Odin type is size/class-compatible with the form's slot. +// On mismatch, fills *mismatch_ for a precise diagnostic. `slot` here is the +// resolved OperandType at the correct (implicit-skipped) slot. +template +gb_internal bool check_asm_operand_size_class(AsmCtx *asm_ctx, typename AsmCtx::OperandType slot, Operand const *operand, + AsmMismatch *mismatch_, i32 *want_bits_, i32 *got_bits_) { + if (mismatch_) *mismatch_ = AsmMismatch_None; + + AsmOperandKind slot_kind = asm_ctx->kind_from_operand_type(slot); + if (slot_kind == AsmOperand_Immediate) { + i32 want_w = asm_ctx->operand_type_bit_width(slot); // 32 for OP_IMM32 + if (want_bits_) *want_bits_ = want_w; + if (operand->mode != Addressing_Constant) { + return true; // $-immediate, bound per instantiation; defer + } + i32 needed = 0; + ExactValue ev = operand->value; + bool ok = check_asm_immediate_value_fits(ev, want_w, &needed, mismatch_); + if (got_bits_) *got_bits_ = needed; + return ok; + } + + // Register / memory-sized slots + AsmRegClass want_class = asm_ctx->operand_type_reg_class(slot); + i32 want_w = asm_ctx->operand_type_bit_width(slot); + + // A pure-label / sizeless slot imposes no reg width/class. + if (want_class == AsmRegClass_Unknown && want_w == 0) { + return true; + } + + // Determine the type whose width/class we actually measure. + // + // Memory operands encode their *access* type as a pointer: `[p]:u8` -> `^u8`, + // with a bare `rawptr` meaning "unsized" (no explicit `:type` annotation). A + // register/immediate/parameter operand measures its own type directly. + Type *measured = operand->type; + bool is_memory = (determine_asm_operand_kind(operand) == AsmOperand_Memory); + if (is_memory) { + if (are_types_identical(measured, t_rawptr)) { + // Unsized memory operand: the width is inferred elsewhere (from the + // register operand or deferred), so nothing to check against here. + if (want_bits_) *want_bits_ = want_w; + return true; + } + measured = type_deref(measured); // ^u8 -> u8 + } + + AsmRegClass got_class = check_asm_reg_class_from_type(measured); + i32 got_w = check_asm_operand_bit_width(measured); + if (got_w < 0) { + // Untyped constant: width is a property of the value, not the type. + if (operand->mode == Addressing_Constant && operand->value.kind == ExactValue_Integer) { + got_w = cast(i32)mp_count_bits(&operand->value.value_integer); + if (got_w == 0) { + got_w = 1; // zero still occupies a slot + } + } else { + got_w = 0; // unknown; skip the width comparison rather than fake a pass + } + } + if (want_bits_) *want_bits_ = want_w; + if (got_bits_) *got_bits_ = got_w; + + // Class check (only when the slot constrains a class). + // + // A *memory* operand against a register-or-memory slot (e.g. OP_XMM_M64) has no + // lane semantics -- it is just N bytes of memory -- so its integer/vector class + // must not be held against the slot's register class. Only width matters for the + // memory interpretation. Register operands still get the full class check. + if (want_class != AsmRegClass_Unknown && !is_memory) { + bool class_ok; + switch (want_class) { + case AsmRegClass_Integer: + class_ok = (got_class == AsmRegClass_Integer); + break; + case AsmRegClass_Vector: + // A scalar float uses only the low lane, so it is valid in any vector + // register slot; a #simd vector matches the vector class exactly. + class_ok = (got_class == AsmRegClass_Vector || got_class == AsmRegClass_Float); + break; + case AsmRegClass_Mask: + class_ok = (got_class == AsmRegClass_Mask); + break; + default: + class_ok = true; + break; + } + if (!class_ok) { + if (mismatch_) *mismatch_ = AsmMismatch_Class; + return false; + } + } + + // Width check. + if (want_w != 0 && got_w != 0) { + if (want_class == AsmRegClass_Vector && !is_memory) { + // A scalar float uses only the low lane, so it is valid in any vector + // register slot as long as it fits; a #simd vector must match exactly. + bool width_ok = (got_class == AsmRegClass_Float) ? (got_w <= want_w) : (got_w == want_w); + if (!width_ok) { + if (mismatch_) *mismatch_ = AsmMismatch_Size; + return false; + } + } else { + // Integer/mask registers, and all memory operands: exact width. + if (want_w != got_w) { + if (mismatch_) *mismatch_ = AsmMismatch_Size; + return false; + } + } + } + return true; +} + + +enum AsmAddrRole { + AsmAddr_Base, + AsmAddr_Index, +}; + +// Validate that a resolved base/index operand is a 32- or 64-bit integer register. +// `reg_name` is the literal register string when the operand was an AstAsmRegister +// (so rsp/esp-as-index can be caught), else the empty string. +gb_internal bool check_asm_addr_register(Operand const *operand, AsmAddrRole role, String reg_name, i32 *width_) { + char const *role_name = (role == AsmAddr_Base) ? "base" : "index"; + + AsmRegClass cls = check_asm_reg_class_from_type(operand->type); + i32 w = check_asm_operand_bit_width(operand->type); + if (width_) *width_ = w; + + if (cls != AsmRegClass_Integer) { + char const *got = "non-integer"; + if (cls == AsmRegClass_Vector) { + got = "vector"; + } else if (cls == AsmRegClass_Mask) { + got = "mask"; + } + error(operand->expr, "A memory operand's %s must be an integer register, got a %s value", role_name, got); + return false; + } + if (w != 32 && w != 64) { + error(operand->expr, "A memory operand's %s must be a 32-bit or 64-bit register, got a %d-bit register", role_name, cast(int)w); + return false; + } + if (role == AsmAddr_Index && reg_name.len != 0) { + // rsp/esp cannot be encoded as an index register. + if (reg_name == "rsp" || reg_name == "esp") { + error(operand->expr, "%%%.*s cannot be used as an index register", LIT(reg_name)); + return false; + } + } + return true; +} + + +gb_internal Type *check_asm_template_signature_params(CheckerContext *ctx, Scope *scope, Ast *_params, bool input_parameters, Array *asm_template_entity_decls) { + Type *tuple = alloc_type_tuple(); + if (_params == nullptr) { + return tuple; + } + ast_node(field_list, FieldList, _params); + Slice params = field_list->list; + + Array variables = {}; + variables.allocator = heap_allocator(); + + i32 param_index = 0; + for (Ast *param : params) { + ast_node(field, Field, param); + + bool prev = ctx->allow_polymorphic_types; + ctx->allow_polymorphic_types = false; + Type *type = check_type(ctx, field->type); + ctx->allow_polymorphic_types = prev; + + if (!is_valid_asm_parameter_type(type)) { + gbString s = type_to_string(type); + error(field->type, "Invalid type for an asm template. It must be an integer, float, boolean, pointer, multi-pointer, or #simd vector, got '%s'", s); + gb_string_free(s); + continue; + } + + for_array(j, field->names) { + Ast *name = field->names[j]; + + bool is_poly_name = false; + + switch (name->kind) { + case Ast_Ident: + break; + case Ast_PolyType: + GB_ASSERT(name->PolyType.specialization == nullptr); + is_poly_name = true; + name = name->PolyType.type; + break; + } + + if (!ast_node_expect(name, Ast_Ident)) { + continue; + } + + if (is_blank_ident(name)) { + error(name, "All parameters must have a name in an asm template"); + continue; + } + Token name_token = name->Ident.token; + + Entity *entity = alloc_entity_param(scope, name_token, type, false, /*is_value*/true); + entity->flags |= EntityFlag_Used; + if (is_poly_name) { + entity->flags |= EntityFlag_PolyConst; + if (is_type_internally_pointer_like(type)) { + error(name, "Parameters with a pointer-like type cannot be used as $ immediates"); + } + } + + Entity *found = scope_insert(scope, entity); + if (found == nullptr) { + array_add(&variables, entity); + + AsmTemplateEntityDecl ed = asm_template_entity_decl_default(entity); + if (is_poly_name) { + ed.kind = AsmTemplateEntityDecl_Immediate; + } + if (input_parameters) { + ed.param_group = AsmTemplateEntityDeclParamGroup_Input; + ed.param_index = param_index++; + ed.result_index = -1; + } else { + ed.param_group = AsmTemplateEntityDeclParamGroup_Output; + ed.param_index = -1; + ed.result_index = param_index++; + } + + ed.total_index = cast(i32)asm_template_entity_decls->count; + array_add(asm_template_entity_decls, ed); + } else { + TokenPos pos = found->token.pos; + error(name_token, + "Redeclaration of '%.*s' in this scope\n" + "\tat %s", + LIT(name_token.string), token_pos_to_string(pos)); + entity = found; + } + } + } + + tuple->Tuple.variables = slice_from_array(variables); + + return tuple; +} + +gb_internal AsmTemplateEntityDeclParamGroup check_asm_find_group(Entity *entity, Array const &asm_template_entity_decls, i32 *index_) { + for_array(i, asm_template_entity_decls) { + auto const &ed = asm_template_entity_decls[i]; + if (ed.entity == entity) { + if (index_) *index_ = cast(i32)i; + return ed.param_group; + } + } + if (index_) *index_ = -1; + return AsmTemplateEntityDeclParamGroup_Unknown; +}; + +gb_internal AsmTemplateEntityDeclKind check_asm_find_kind(Entity *entity, Array const &asm_template_entity_decls) { + for (auto const &ed : asm_template_entity_decls) { + if (ed.entity == entity) { + return ed.kind; + } + } + return AsmTemplateEntityDecl_Invalid; +}; + + +template +gb_internal void check_asm_specs(AsmCtx *asm_ctx, CheckerContext *ctx, Scope *scope, Slice const &specs, Array *asm_template_entity_decls) { + StringSet pin_set = {}; + string_set_init(&pin_set, specs.count); + defer (string_set_destroy(&pin_set)); + + StringSet pin_flag_set = {}; + string_set_init(&pin_flag_set, specs.count); + defer (string_set_destroy(&pin_flag_set)); + + for (Ast *spec_ : specs) { + if (spec_->kind != Ast_AsmSpec) { + continue; + } + ast_node(spec, AsmSpec, spec_); + + GB_ASSERT(spec->name->kind == Ast_Ident); + + Entity *input = scope_lookup_current(scope, spec->name->Ident.interned, spec->name->Ident.hash); + Entity *other_scratch = nullptr; + + String pin = {}; + String pin_flag = {}; + if (spec->value != nullptr) { + if (spec->value->kind == Ast_Ident) { + other_scratch = scope_lookup_current(scope, spec->value->Ident.interned, spec->value->Ident.hash); + if (other_scratch) { + auto group = check_asm_find_group(other_scratch, *asm_template_entity_decls, nullptr); + if (!group) { + error(spec->value, "This must be another parameter, got %.*s", LIT(other_scratch->token.string)); + } + } else { + error(spec->value, "Undefined parameter declaration '%.*s'", LIT(spec->value->Ident.token.string)); + } + } else { + if (spec->value->kind != Ast_AsmRegister) { + gbString s = expr_to_string(spec->value); + error(spec->value, "Expected an asm register or scratch parameter, got %s", s); + gb_string_free(s); + continue; + } + + ast_node(reg, AsmRegister, spec->value); + pin = reg->name.string; + if (pin.len != 0) { + Operand op = {}; + if (check_register(asm_ctx, &op, reg)) { + if (reg->flag.string.len) { + GB_ASSERT(pin == "flags"); + pin_flag = reg->flag.string; + if (string_set_update(&pin_flag_set, pin_flag)) { + error(spec->value, "Pinned register flag %%%.*s.%.*s has already been assigned", LIT(pin), LIT(pin_flag)); + } + } + if (string_set_update(&pin_set, pin)) { + error(spec->value, "Pinned register %%%.*s has already been assigned", LIT(pin)); + } + } + } + } + } + + if (spec->tied_name == nullptr) { + if (spec->type != nullptr) { + Type *type = check_type(ctx, spec->type); + if (!is_valid_asm_parameter_type(type)) { + gbString s = type_to_string(type); + error(spec->type, "Invalid type for an asm template. It must be an integer, float, boolean, pointer, multi-pointer, or #simd vector, got '%s'", s); + gb_string_free(s); + continue; + } + + Token name_token = spec->name->Ident.token; + + Entity *entity = alloc_entity_param(scope, name_token, type, false, /*is_value*/true); + entity->flags |= EntityFlag_Used; + + Entity *found = scope_insert(scope, entity); + if (found == nullptr) { + AsmTemplateEntityDecl ed = asm_template_entity_decl_default(entity); + ed.param_group = AsmTemplateEntityDeclParamGroup_Scratch; + ed.total_index = cast(i32)asm_template_entity_decls->count; + ed.pin = pin; + ed.pin_flag = pin_flag; + + if (other_scratch != nullptr) { + // Width-view of another operand: `p0b: u8 = p0`. + // p0b shares p0's register, viewed at p0b's declared width. + GB_ASSERT(spec->value != nullptr); + + i32 src_index = -1; + auto src_group = check_asm_find_group(other_scratch, *asm_template_entity_decls, &src_index); + + // 1. The source must already exist and be a register-class operand + // (you cannot take a width-view of an immediate or memory operand). + if (src_index < 0) { + error(spec->value, "'%.*s' must refer to a previously declared parameter", LIT(other_scratch->token.string)); + } else { + auto &src = (*asm_template_entity_decls)[src_index]; + + bool src_is_reg = src_group == AsmTemplateEntityDeclParamGroup_Input || + src_group == AsmTemplateEntityDeclParamGroup_Output || + src_group == AsmTemplateEntityDeclParamGroup_Scratch; + if (src.kind == AsmTemplateEntityDecl_Immediate || src.kind == AsmTemplateEntityDecl_Memory) { + src_is_reg = false; + } + if (!src_is_reg) { + error(spec->value, "A width-view can only be taken of a register operand, not '%.*s'", LIT(other_scratch->token.string)); + } + + // 2. The view width must be a legal sub-register width and no wider + // than the source (only narrowing views exist). + i32 view_w = check_asm_operand_bit_width(type); // this decl's type (u8 -> 8) + i32 src_w = check_asm_operand_bit_width(src.entity->type); + AsmRegClass view_class = check_asm_reg_class_from_type(type); + AsmRegClass src_class = check_asm_reg_class_from_type(src.entity->type); + + if (view_class != AsmRegClass_Integer || src_class != AsmRegClass_Integer) { + error(spec->type, "Width-views are only supported for integer registers"); + } else { + switch (view_w) { + case 8: case 16: case 32: case 64: + if (view_w > src_w) { + error(spec->type, "A width-view (%d-bit) cannot be wider than its source '%.*s' (%d-bit)", + cast(int)view_w, LIT(other_scratch->token.string), cast(int)src_w); + } + break; + default: + error(spec->type, "A width-view must be an 8, 16, 32, or 64-bit integer type, got a %d-bit type", cast(int)view_w); + break; + } + } + + // 3. A view does not carry its own pin; it inherits the source's register. + if (pin.len != 0) { + error(spec->value, "A width-view cannot also be pinned to a register; it inherits the source operand's register"); + } + + ed.kind = AsmTemplateEntityDecl_Register; + ed.view_of = src_index; + ed.view_bits = view_w; + // A view is not itself an input/output/scratch slot for allocation: + // mark it so the lowering passes skip it. Reuse the Scratch group but + // with view_of >= 0 as the discriminator (see lowering note). + } + } + + array_add(asm_template_entity_decls, ed); + } else { + TokenPos pos = found->token.pos; + error(name_token, + "Redeclaration of '%.*s' in this scope\n" + "\tat %s", + LIT(name_token.string), token_pos_to_string(pos)); + entity = found; + continue; + } + } else if (input == nullptr) { + error(spec->name, "Undefined parameter declaration '%.*s'", LIT(spec->name->Ident.token.string)); + continue; + } else { + i32 index = -1; + auto group = check_asm_find_group(input, *asm_template_entity_decls, &index); + gb_unused(group); + GB_ASSERT(index >= 0); + auto *i = &(*asm_template_entity_decls)[index]; + if (i->pin.len == 0) { + i->pin = pin; + i->pin_flag = pin_flag; + if (pin_flag.len != 0 && group != AsmTemplateEntityDeclParamGroup_Output) { + error(spec->value, "Input parameters cannot be pinned to a flag style register"); + } + } else { + error(spec_, "Asm register has already been pinned"); + } + + if (other_scratch != nullptr) { + GB_ASSERT(spec->value != nullptr); + error(spec->value, "Another parameter must be assigned/paired with a scratch parameter declaration"); + } + } + } else { + GB_ASSERT(spec->tied_name->kind == Ast_Ident); + + if (spec->type != nullptr) { + error(spec->type, "Tied register definitions cannot have a defined type since the values are already defined"); + } + + if (input == nullptr) { + error(spec->name, "Undefined parameter declaration '%.*s'", LIT(spec->name->Ident.token.string)); + continue; + } + Entity *output = scope_lookup_current(scope, spec->tied_name->Ident.interned, spec->tied_name->Ident.hash); + if (output == nullptr) { + error(spec->name, "Undefined parameter declaration '%.*s'", LIT(spec->name->Ident.token.string)); + continue; + } + + i32 input_index = -1; + i32 output_index = -1; + + auto input_group = check_asm_find_group(input, *asm_template_entity_decls, &input_index); + auto output_group = check_asm_find_group(output, *asm_template_entity_decls, &output_index); + if (input_group != AsmTemplateEntityDeclParamGroup_Input) { + error(input->token, "Parameter tied with '%.*s' must be an input parameter", LIT(output->token.string)); + continue; + } + if (output_group != AsmTemplateEntityDeclParamGroup_Output) { + error(output->token, "Parameter tied with '%.*s' must be an output parameter", LIT(input->token.string)); + continue; + } + + GB_ASSERT(input_index >= 0); + GB_ASSERT(output_index >= 0); + + auto *i = &(*asm_template_entity_decls)[input_index]; + auto *o = &(*asm_template_entity_decls)[output_index]; + + i->tie = output_index; + o->tie = input_index; + + i->pin = pin; + o->pin = pin; + if (other_scratch != nullptr) { + GB_ASSERT(spec->value != nullptr); + error(spec->value, "Another parameter must be assigned/paired with a scratch parameter declaration, not a tie"); + } + + if (pin_flag.len != 0) { + error(spec->value, "Input parameters, and thus tied parameters, cannot be pinned to a flag style register"); + } + } + } +} + +template +gb_internal bool check_register(AsmCtx *asm_ctx, Operand *operand, AstAsmRegister *asm_reg) { + String name = asm_reg->name.string; + if (asm_reg->flag.kind == Token_Ident) { + bool ok = true; + i32 width = 0; + + String flag = asm_reg->flag.string; + if (name != "flags") { + error(asm_reg->name, "Register flags can only be called on %%flags"); + ok = false; + } else { + i32 bit = asm_ctx->flag_bit_from_name(flag, &width); + if (bit < 0) { + error(asm_reg->flag, "Unknown register %%flags name: %.*s", LIT(flag)); + ok = false; + } + } + + operand->type = t_bool; + if (width > 1) { + operand->type = t_u8; + } + return ok; + } + + auto r = asm_ctx->register_lookup(name); + if (r) { + operand->mode = Addressing_Value; + + u16 reg_class = asm_ctx->reg_class(r); + if (reg_class == asm_ctx->REG_CLASS_K) { + // Opmask register: classify as a mask, not a 64-bit integer. + // operand->type = t_asm_mask; // see note if this type does not yet exist + // return true; + } + + u16 width_in_bits = asm_ctx->reg_size(r); + switch (width_in_bits) { + case 8: + operand->type = t_u8; + break; + case 16: + operand->type = t_u16; + break; + case 32: + operand->type = t_u32; + break; + case 64: + operand->type = t_u64; + break; + case 80: + error(operand->expr, "80-bit width asm registers are not supported"); + return false; + case 128: + operand->type = alloc_type_simd_vector(4, t_f32); + break; + case 256: + operand->type = alloc_type_simd_vector(8, t_f32); + break; + case 512: + operand->type = alloc_type_simd_vector(16, t_f32); + break; + default: + GB_PANIC("Unhandled register width size: %d", width_in_bits); + break; + } + + return true; + } + + ERROR_BLOCK(); + error(asm_reg->name, "Unknown register for this target platform: %%%.*s", LIT(name)); + { + auto dym = did_you_mean_make(heap_allocator(), asm_ctx->register_map.count, name); + defer (did_you_mean_destroy(&dym)); + for (auto const &entry : asm_ctx->register_map) { + did_you_mean_append(&dym, entry.key); + } + check_did_you_mean_print(&dym); + } + return false; +} + +enum CheckMnemomicResult { + CheckMnemomic_Invalid, + CheckMnemomic_Mnemonic, + CheckMnemomic_Prefix, +}; + +template +gb_internal CheckMnemomicResult check_mnemonic_name(AsmCtx *asm_ctx, AstAsmInstruction *instr, u16 *mnemonic_) { + String name = instr->name->Ident.token.string; + auto m = asm_ctx->mnemonic_lookup(name); + if (m) { + if (mnemonic_) *mnemonic_ = cast(u16)m; + return CheckMnemomic_Mnemonic; + } + auto p = asm_ctx->prefix_lookup(name); + if (p) { + if (mnemonic_) *mnemonic_ = cast(u16)p; + return CheckMnemomic_Prefix; + } + + ERROR_BLOCK(); + if (instr->operands.count == 0) { + error(instr->name, "Unknown mnemonic/prefix for this target platform: %.*s", LIT(name)); + } else { + error(instr->name, "Unknown mnemonic for this target platform: %.*s", LIT(name)); + + } + auto dym = did_you_mean_make(heap_allocator(), asm_ctx->MNEMONIC_COUNT, name); + defer (did_you_mean_destroy(&dym)); + for (u16 i = asm_ctx->M_INVALID+1; i < asm_ctx->MNEMONIC_COUNT; i++) { + String str = asm_ctx->mnemonic_strings[i]; + did_you_mean_append(&dym, str); + } + if (instr->operands.count == 0) { + for (u16 i = asm_ctx->PREFIX_INVALID+1; i < asm_ctx->PREFIX_COUNT; i++) { + String str = asm_ctx->prefix_strings[i]; + did_you_mean_append(&dym, str); + } + } + check_did_you_mean_print(&dym); + return CheckMnemomic_Invalid; +} + + +template +gb_internal void check_mnemonic(AsmCtx *asm_ctx, CheckerContext *ctx, Entity *tmpl_entity, AstAsmInstruction *instr, + u16 mnemonic, Slice const &operands, + u8 previous_prefix, Ast *previous_prefix_instr) { + GB_ASSERT(mnemonic > 0); + auto forms = asm_ctx->encoding_forms(mnemonic); + String name = asm_ctx->mnemonic_strings[mnemonic]; + + int min_count = I32_MAX; + int max_count = -1; + + for (auto form : forms) { + int explicit_count = cast(int)form.explicit_count(); + min_count = gb_min(min_count, explicit_count); + max_count = gb_max(max_count, explicit_count); + } + min_count = gb_max(min_count, 0); + max_count = gb_max(max_count, 0); + + + auto valid_spots = slice_make(heap_allocator(), max_count); + defer (slice_free(&valid_spots, heap_allocator())); + + auto possible_kinds = slice_make(heap_allocator(), max_count); + defer (slice_free(&possible_kinds, heap_allocator())); + + auto possible_class_kinds = slice_make(heap_allocator(), max_count); + defer (slice_free(&possible_class_kinds, heap_allocator())); + + bool matched = false; + isize valid_form_index = -1; + + isize best_form = -1; + int best_score = -1; + int best_dist = I32_MAX; // secondary: prefer smaller width distance + int best_pref = -1; // tertiary: prefer wider slots (r64 over r32) + + for_array(form_index, forms) { + auto &form = forms[form_index]; + if (operands.count != cast(int)form.explicit_count()) { + continue; + } + + int score = 0; + int width_dist = 0; + int width_pref = 0; + + for_array(i, operands) { + int slot = asm_ctx->form_explicit_slot(form, cast(int)i); + auto type = (slot >= 0) ? form.ops[slot] : asm_ctx->OP_NONE; + Operand const *operand = &operands[i]; + AsmOperandKind dst = asm_ctx->kind_from_operand_type(type); + AsmOperandKind src = determine_asm_operand_kind(operand); + + bool kind_ok = (dst == src) || + (dst == AsmOperand_Register_Or_Memory && (src == AsmOperand_Register || src == AsmOperand_Memory)); + + // Tertiary key: bias toward wider register slots so an r64 form outranks + // an otherwise-equal r32 form. + width_pref += cast(int)asm_ctx->operand_type_bit_width(type); + + bool spot_ok = false; + if (kind_ok) { + bool mem_unsized = (src == AsmOperand_Memory) && are_types_identical(operand->type, t_rawptr); + + if (dst == AsmOperand_Register_Or_Memory && src == AsmOperand_Memory && mem_unsized) { + spot_ok = true; // memory form accepts memory; no size check + } else { + AsmMismatch m = AsmMismatch_None; + i32 wb_ = 0, gb_ = 0; + spot_ok = check_asm_operand_size_class(asm_ctx, type, operand, &m, &wb_, &gb_); + if (!spot_ok && (m == AsmMismatch_Size || m == AsmMismatch_ImmRange) && wb_ > 0 && gb_ > 0) { + int d = cast(int)wb_ - cast(int)gb_; + width_dist += (d < 0) ? -d : d; + } + } + } + + if (spot_ok) { + score += 2; + valid_spots[i] = true; + } else if (kind_ok) { + score += 1; // kind matched, only value/size/class failed + } + } + + if (score == operands.count * 2) { + matched = true; + valid_form_index = form_index; + break; + } + + // Lexicographic rank: score desc, then width_dist asc, then width_pref desc. + bool better; + if (score != best_score) { + better = score > best_score; + } else if (width_dist != best_dist) { + better = width_dist < best_dist; + } else { + better = width_pref > best_pref; + } + if (better) { + best_score = score; + best_dist = width_dist; + best_pref = width_pref; + best_form = form_index; + } + } + + if (operands.count < min_count || operands.count > max_count) { + if (min_count == max_count) { + error(instr->name, "The asm instruction '%.*s' expects %d operands, got %td", LIT(name), max_count, operands.count); + } else { + error(instr->name, "The asm instruction '%.*s' expects %d..=%d operands, got %td", LIT(name), min_count, max_count, operands.count); + } + return; + } + if (matched) { + if (valid_form_index >= 0 && previous_prefix > 0) { + auto &form = forms[valid_form_index]; + + bool requires_memory_dest = false; + bool ok = asm_ctx->prefix_kind_okay(previous_prefix, form, &requires_memory_dest); + if (ok) { + if (operands.count != 0 && determine_asm_operand_kind(&operands[0]) != AsmOperand_Memory) { + error(previous_prefix_instr ? previous_prefix_instr : instr->name, + "Asm prefix requires '%.*s' to have a memory destination operand", LIT(name)); + } + } else { + error(instr->name, "Asm prefix cannot be applied to '%.*s'", LIT(name)); + } + } + + GB_ASSERT(tmpl_entity->kind == Entity_AsmTemplate); + + GB_ASSERT(valid_form_index >= 0); + instr->mnemonic = mnemonic; + instr->valid_form_index = cast(i32)valid_form_index; + + // Handle clobbering from mnemonic + auto clobber_forms = asm_ctx->clobber_forms(mnemonic); + auto clobber = clobber_forms[valid_form_index]; + + tmpl_entity->AsmTemplate.clobber_flags |= clobber.implies_clobber_flags(); + tmpl_entity->AsmTemplate.clobber_memory |= clobber.implies_clobber_memory(); + tmpl_entity->AsmTemplate.is_volatile |= clobber.implies_side_effects(); + return; + } + + // failure path + enum { MAX_VARIANT_COUNT = 32 }; + AsmMismatch mismatch[MAX_VARIANT_COUNT] = {}; // parallels valid_spots for the best form + i32 want_bits[MAX_VARIANT_COUNT] = {}; + i32 got_bits[MAX_VARIANT_COUNT] = {}; + if (best_form >= 0) { + auto &form = forms[best_form]; + for_array(i, operands) { + int slot = asm_ctx->form_explicit_slot(form, cast(int)i); + auto type = (slot >= 0) ? form.ops[slot] : asm_ctx->OP_NONE; + AsmOperandKind dst = asm_ctx->kind_from_operand_type(type); + AsmOperandKind src = determine_asm_operand_kind(&operands[i]); + possible_kinds[i] = dst; + possible_class_kinds[i] = asm_ctx->reg_class_from_operand_type(type); + + bool kind_ok = (dst == src) || + (dst == AsmOperand_Register_Or_Memory && (src == AsmOperand_Register || src == AsmOperand_Memory)); + if (!kind_ok) { + valid_spots[i] = false; + } else { + AsmMismatch m = AsmMismatch_None; + i32 wb_ = 0; + i32 gb_ = 0; + bool ok = check_asm_operand_size_class(asm_ctx, type, &operands[i], &m, &wb_, &gb_); + valid_spots[i] = ok; + if (!ok && i < MAX_VARIANT_COUNT) { + mismatch[i] = m; + want_bits[i] = wb_; + got_bits[i] = gb_; + } + } + } + } + + { + if (best_score >= gb_max(operands.count*2 - 2, 0)) { + error(instr->name, "'%.*s' operands nearly matched the expected encoding forms", LIT(name)); + } else { + error(instr->name, "'%.*s' operands matched none of the expected encoding forms", LIT(name)); + } + for_array(i, valid_spots) { + if (valid_spots[i] || i >= operands.count) { + continue; + } + auto dst = possible_kinds[i]; + AsmOperandKind src = determine_asm_operand_kind(&operands[i]); + + AsmRegClass dst_reg_class = possible_class_kinds[i]; + AsmRegClass src_reg_class = check_asm_reg_class_from_type(operands[i].type); + + AsmMismatch m = (i < MAX_VARIANT_COUNT) ? mismatch[i] : AsmMismatch_None; + + if (m == AsmMismatch_ImmRange) { + ExactValue ev = operands[i].value; + gbString vs = exact_value_to_string(ev); + i32 bits_required = 0; + check_asm_immediate_value_fits(ev, want_bits[i], &bits_required, nullptr); + if (bits_required > 0) { + error(operands[i].expr, "'%.*s' operand-%td is a %d-bit immediate value, but the value %s does not fit in the %d-bit immediate this form encodes", + LIT(name), i, bits_required, vs, cast(int)want_bits[i]); + } else { + error(operands[i].expr, "'%.*s' operand-%td is an immediate value, but the value %s does not fit in the %d-bit immediate this form encodes", + LIT(name), i, vs, cast(int)want_bits[i]); + } + gb_string_free(vs); + } else if (m == AsmMismatch_ImmType) { + error(operands[i].expr, "'%.*s' operand-%td: a floating-point constant cannot be used as an immediate", + LIT(name), i); + } else if (m == AsmMismatch_Size && want_bits[i] && got_bits[i]) { + error(operands[i].expr, "'%.*s' operand-%td has the wrong size: expected a %u-bit operand, got %u-bit", + LIT(name), i, cast(unsigned)want_bits[i], cast(unsigned)got_bits[i]); + } else if (m == AsmMismatch_Class) { + error(operands[i].expr, "'%.*s' operand-%td is in the wrong register class, expected %d-bit %.*s %.*s, got %d-bit %.*s %.*s", + LIT(name), i, + want_bits[i], LIT(asm_reg_class_strings[dst_reg_class]), LIT(asm_operand_kind_strings[dst]), + got_bits[i], LIT(asm_reg_class_strings[src_reg_class]), LIT(asm_operand_kind_strings[src])); + } else if (dst) { + error(operands[i].expr, "'%.*s' operand-%td has an invalid kind, expected %.*s operand", + LIT(name), i, LIT(asm_operand_kind_expected_strings[dst])); + } else { + error(operands[i].expr, "'%.*s' operand-%td has an invalid kind", LIT(name), i); + } + } + } +} + + +template +gb_internal void check_asm_instruction_operand(AsmCtx *asm_ctx, CheckerContext *ctx, Entity *entity, Operand *operand, Ast *expr, bool allow_memory_operands) { + if (expr == nullptr) { + return; + } + + operand->expr = expr; + operand->mode = Addressing_Invalid; + operand->type = t_invalid; + + GB_ASSERT(entity->kind == Entity_AsmTemplate); + auto *ate = &entity->AsmTemplate; + + Scope *param_scope = ate->param_scope; + Scope *label_scope = ate->label_scope; + gb_unused(param_scope); + gb_unused(label_scope); + + switch (expr->kind) { + case_ast_node(pe, ParenExpr, expr); + check_expr(ctx, operand, expr); + if (operand->mode != Addressing_Constant) { + error(expr, "Asm operands within parentheses can only compile time constants, if they were supported"); + } else { + error(expr, "Asm operands with parentheses are not currently supported"); + } + return; + case_end; + + case_ast_node(i, Ident, expr); + Entity *found = scope_lookup_current(param_scope, i->interned, i->hash); + if (found != nullptr) { + i->entity = found; + operand->mode = Addressing_Value; + operand->type = found->type; + return; + } + found = scope_lookup(param_scope->parent, i->interned, i->hash); + if (found != nullptr) { + if (found->kind == Entity_Constant) { + i->entity = found; + operand->mode = Addressing_Constant; + operand->value = found->Constant.value; + operand->type = found->type; + + add_type_and_value(ctx, expr, operand->mode, operand->type, operand->value); + } else { + error(expr, "Only asm parameters or constants are allowed to be used within an 'asm' template"); + } + } else { + error(expr, "Undeclared asm parameter or constant '%.*s'", LIT(i->token.string)); + } + return; + case_end; + case_ast_node(bl, BasicLit, expr); + check_expr(ctx, operand, expr); + return; + case_end; + case_ast_node(asm_reg, AsmRegister, expr); + check_register(asm_ctx, operand, asm_reg); + return; + case_end; + case_ast_node(mem_op, AsmMemoryOperand, expr); + operand->type = t_rawptr; + operand->mode = Addressing_Value; + + if (!allow_memory_operands) { + break; + } + + Operand segment_override = {}; + check_asm_instruction_operand(asm_ctx, ctx, entity, &segment_override, mem_op->segment_override, false); + + if (segment_override.expr == nullptr) { + // okay + } else if (segment_override.expr->kind == Ast_AsmRegister) { + String reg_name = segment_override.expr->AsmRegister.name.string; + auto reg = asm_ctx->register_lookup(reg_name); + auto reg_class = asm_ctx->reg_class(asm_ctx->register_codes[reg]); + if (reg_class != asm_ctx->REG_CLASS_SEG) { + gbString s = expr_to_string(segment_override.expr); + error(segment_override.expr, "A segment override must be a selector register parameter, got %s", s); + gb_string_free(s); + } + } else { + gbString s = expr_to_string(segment_override.expr); + error(segment_override.expr, "A segment override must be a selector register parameter, got %s", s); + gb_string_free(s); + } + + Operand base = {}; + Operand index = {}; + Operand scale = {}; + Operand disp = {}; + check_asm_instruction_operand(asm_ctx, ctx, entity, &base, mem_op->base, false); + check_asm_instruction_operand(asm_ctx, ctx, entity, &index, mem_op->index, false); + check_asm_instruction_operand(asm_ctx, ctx, entity, &scale, mem_op->scale, false); + check_asm_instruction_operand(asm_ctx, ctx, entity, &disp, mem_op->disp, false); + + // NOTE(bill): if the base/index is actually an immediate and there is no scale nor disp, + // then treat it as a disp, and modify the AST too + if (index.expr != nullptr && scale.expr == nullptr && disp.expr == nullptr) { + bool do_swap = index.mode == Addressing_Constant; + if (!do_swap) { + Entity *param_entity = entity_of_node(index.expr); + if (param_entity != nullptr && param_entity->kind == Entity_Variable) { + auto kind = check_asm_find_kind(param_entity, ate->decls); + do_swap = kind == AsmTemplateEntityDecl_Immediate; + } + } + if (do_swap) { + disp = index; + index = {}; + + mem_op->disp = mem_op->index; + mem_op->index = nullptr; + + mem_op->disp_op = mem_op->index_op; + mem_op->index_op = {}; + } + } + if (base.expr != nullptr && index.expr == nullptr && scale.expr == nullptr && disp.expr == nullptr) { + bool do_swap = base.mode == Addressing_Constant; + if (!do_swap) { + Entity *param_entity = entity_of_node(base.expr); + if (param_entity != nullptr && param_entity->kind == Entity_Variable) { + auto kind = check_asm_find_kind(param_entity, ate->decls); + do_swap = kind == AsmTemplateEntityDecl_Immediate; + } + } + if (do_swap) { + disp = base; + base = {}; + + mem_op->disp = mem_op->base; + mem_op->base = nullptr; + } + } + + i32 base_w = 0; + i32 index_w = 0; + bool have_base = false; + bool have_index = false; + + // base: must resolve to a 32/64-bit integer register + if (base.expr) { + String reg_name = {}; + bool ok_kind = true; + if (base.expr->kind == Ast_AsmRegister) { + reg_name = base.expr->AsmRegister.name.string; + ok_kind = check_register(asm_ctx, &base, &base.expr->AsmRegister); + } else { + Entity *param_entity = entity_of_node(base.expr); + if (param_entity == nullptr || param_entity->kind != Entity_Variable) { + gbString s = expr_to_string(base.expr); + error(base.expr, "A base value must be a register parameter, got %s", s); + gb_string_free(s); + ok_kind = false; + } else { + auto kind = check_asm_find_kind(param_entity, ate->decls); + // A pointer/integer parameter used as an address base lowers to a + // register operand, so accept both Register and Memory kinds here. + if (kind != AsmTemplateEntityDecl_Register && kind != AsmTemplateEntityDecl_Memory) { + gbString s = expr_to_string(base.expr); + error(base.expr, "A base value must be a register parameter, got %s", s); + gb_string_free(s); + ok_kind = false; + } + } + } + if (ok_kind) { + have_base = check_asm_addr_register(&base, AsmAddr_Base, reg_name, &base_w); + } + } + + // index: must resolve to a 32/64-bit integer register, and not rsp/esp + if (index.expr) { + String reg_name = {}; + bool ok_kind = true; + if (index.expr->kind == Ast_AsmRegister) { + reg_name = index.expr->AsmRegister.name.string; + ok_kind = check_register(asm_ctx, &index, &index.expr->AsmRegister); + } else { + Entity *param_entity = entity_of_node(index.expr); + if (param_entity == nullptr || param_entity->kind != Entity_Variable) { + gbString s = expr_to_string(index.expr); + error(index.expr, "An index value must be an integer register, got %s", s); + gb_string_free(s); + ok_kind = false; + } else { + auto kind = check_asm_find_kind(param_entity, ate->decls); + switch (kind) { + case AsmTemplateEntityDecl_Register: + case AsmTemplateEntityDecl_Immediate: + // okay + break; + default: + { + gbString s = expr_to_string(index.expr); + gbString t = type_to_string(index.type); + error(index.expr, "An index must be an integer register, got %s of type %s", s, t); + gb_string_free(t); + gb_string_free(s); + ok_kind = false; + } + break; + } + } + } + if (ok_kind) { + have_index = check_asm_addr_register(&index, AsmAddr_Index, reg_name, &index_w); + } + } + + // base and index must be the same width + if (have_base && have_index && base_w != index_w) { + Ast *at = mem_op->base ? mem_op->base : expr; + error(at, "A memory operand's base and index registers must be the same width, got a %d-bit base and a %d-bit index", + cast(int)base_w, cast(int)index_w); + } + + // a scale factor is meaningless without an index + if (scale.expr && !index.expr) { + error(scale.expr, "A scale factor requires an index register"); + } + + // scale: constant 1/2/4/8, or an immediate parameter + for (int i = 0; scale.expr && i == 0; i++) { + if (!is_type_integer(scale.type)) { + gbString s = expr_to_string(scale.expr); + error(scale.expr, "A scale must be a constant integer or an immediate, got %s", s); + gb_string_free(s); + break; + } + if (scale.mode == Addressing_Constant) { + gbString s = exact_value_to_string(scale.value); + defer (gb_string_free(s)); + if (scale.value.kind != ExactValue_Integer) { + error(scale.expr, "A scale must be a constant integer or an immediate, got %s", s); + break; + } else { + i64 v = exact_value_to_i64(scale.value); + + Token op = mem_op->scale_op; + switch (op.kind) { + case Token_Mul: + switch (v) { + case 1: case 2: case 4: case 8: + // okay + break; + default: + error(scale.expr, "A scale using '*' must be a constant integer or an immediate with the value 1, 2, 4, or 8, got %s", s); + break; + } + break; + case Token_Shl: + case Token_Shr: + switch (v) { + case 0: case 1: case 2: case 3: + // okay + break; + default: + error(scale.expr, "A shifting scale using '%.*s' must be a constant integer or an immediate with the value 0, 1, 2, or 3, got %s", LIT(op.string), s); + break; + } + break; + default: + error(op, "Unknown/unhandled scaling operator '%.*s'", LIT(op.string)); + break; + } + + if (op.kind == Token_Shr) { + if (build_context.metrics.arch != TargetArch_arm64) { + error(op, "The target platform does not support '%.*s' for shifting scale parameters in memory operands", LIT(op.string)); + } + } + } + } else { + Entity *param_entity = entity_of_node(scale.expr); + if (param_entity == nullptr || param_entity->kind != Entity_Variable) { + gbString s = expr_to_string(scale.expr); + error(scale.expr, "A scale must be a constant integer or an immediate, got %s", s); + gb_string_free(s); + break; + } + auto kind = check_asm_find_kind(param_entity, ate->decls); + if (kind != AsmTemplateEntityDecl_Immediate) { + gbString s = expr_to_string(scale.expr); + error(scale.expr, "A scale must be a constant integer or an immediate, got %s", s); + gb_string_free(s); + break; + } + } + } + + // displacement: an integer that fits a signed 32-bit value + for (int i = 0; disp.expr && i == 0; i++) { + if (disp.expr->kind == Ast_AsmRegister) { + error(disp.expr, "A displacement must be a constant integer value, got a register"); + break; + } + + // A displacement must be assemble-time constant. A register-valued + // parameter belongs in the index slot, not the displacement. + if (disp.mode == Addressing_Constant && disp.value.kind == ExactValue_Integer) { + AsmMismatch m = AsmMismatch_None; + i32 needed = 0; + if (!check_asm_immediate_value_fits(disp.value, 32, &needed, &m)) { + gbString vs = exact_value_to_string(disp.value); + error(disp.expr, "A memory displacement must fit in a signed 32-bit value, got %s (needs %d bits)", vs, cast(int)needed); + gb_string_free(vs); + } + break; + } + + Entity *param_entity = entity_of_node(disp.expr); + if (param_entity != nullptr && param_entity->kind == Entity_Variable) { + auto kind = check_asm_find_kind(param_entity, ate->decls); + if (kind == AsmTemplateEntityDecl_Immediate) { + // A $-immediate parameter is a legal (assemble-time) displacement. + break; + } + if (kind == AsmTemplateEntityDecl_Register) { + error(disp.expr, "A register parameter cannot be a displacement; use it as an index, e.g. [base + %.*s]", LIT(disp.expr->Ident.token.string)); + break; + } + } + + gbString s = expr_to_string(disp.expr); + error(disp.expr, "A displacement must be a constant integer or immediate, got %s", s); + gb_string_free(s); + } + + if (mem_op->type) { + Type *t = check_type(ctx, mem_op->type); + if (t != nullptr && t != t_invalid) { + if (is_valid_asm_parameter_type(t) && !is_type_pointer(t)) { + operand->type = alloc_type_pointer(t); + } else { + gbString s = type_to_string(t); + error(mem_op->type, "Asm memory operands type interpretation must be either an integer, boolean, float, or #simd vector, got %s", s); + gb_string_free(s); + // leave operand->type == t_rawptr ("unsized") + } + + } + } + + return; + case_end; + case_ast_node(label, AsmLabelDecl, expr); + ast_node(name, Ident, label->name); + Entity *found = scope_lookup_current(label_scope, name->interned, name->hash); + if (found == nullptr) { + error(expr, "Undeclared asm label '.%.*s'", LIT(name->token.string)); + } + name->entity = found; + + add_type_and_value(ctx, expr, Addressing_Value, found->type, {}); + return; + case_end; + } + + { + gbString s = expr_to_string(expr); + error(expr, "Invalid asm operand, got %s", s); + gb_string_free(s); + } + return; +} + + +template +gb_internal void check_asm_template(AsmCtx *asm_ctx, CheckerContext *ctx, Entity *entity, DeclInfo *d) { + GB_ASSERT(entity->kind == Entity_AsmTemplate); + auto *ate = &entity->AsmTemplate; + + String asm_template_name = entity->token.string; + gb_unused(asm_template_name); + + ast_node(at, AsmTemplate, d->init_expr); + + GB_ASSERT(at->signature != nullptr); + if (at->signature->kind != Ast_ProcType) { + error(at->signature, "Expected a valid signature, got %.*s", LIT(ast_strings[at->signature->kind])); + return; + } + AstProcType *pt = &at->signature->ProcType; + + ate->param_scope = create_scope(ctx->info, ctx->scope); + ate->label_scope = create_scope(ctx->info, ctx->scope); + + ate->decls.allocator = heap_allocator(); + + Type *params = check_asm_template_signature_params(ctx, ate->param_scope, pt->params, true, &ate->decls); + Type *results = check_asm_template_signature_params(ctx, ate->param_scope, pt->results, false, &ate->decls); + + Type *type = alloc_type_proc(ate->param_scope, params, params->Tuple.variables.count, results, results->Tuple.variables.count, false, pt->calling_convention); + type->Proc.diverging = pt->diverging; + if (!type->Proc.diverging && results->Tuple.variables.count != 0) { + // always require the results of `asm` templates + type->Proc.require_results = true; + } + + entity->type = type; + + + bool is_volatile = false; + bool is_align_stack = false; + auto *clobber_registers_set = &entity->AsmTemplate.clobber_registers_set; + + check_asm_specs(asm_ctx, ctx, ate->param_scope, at->specs, &ate->decls); + { // check clobbers + bool clobber_flags = false; + bool clobber_memory = false; + + for (Ast *clobber_ : at->clobbers) { + ast_node(clobber, AsmClobber, clobber_); + + if (clobber->value == nullptr) { + if (clobber->name.string == "volatile") { + if (is_volatile) { + error(clobber->name, "#volatile has already been defined as an asm specification"); + } + is_volatile = true; + } else if (clobber->name.string == "align_stack") { + if (is_align_stack) { + error(clobber->name, "#align_stack has already been defined as an asm specification"); + } + is_align_stack = true; + } else { + error(clobber->name, "Unknown clobber directive '#%.*s'", LIT(clobber->name.string)); + } + continue; + } + + switch (clobber->value->kind) { + case_ast_node(asm_reg, AsmRegister, clobber->value) + String reg = asm_reg->name.string; + if (asm_reg->flag.string != "") { + error(asm_reg->flag, "#clobber on specific flags is not allowed"); + } + Operand operand = {}; + if (check_register(asm_ctx, &operand, asm_reg)) { + if (string_set_update(clobber_registers_set, reg)) { + error(clobber->value, "#clobber %%%.*s has already been defined", LIT(reg)); + } + } + case_end; + case_ast_node(ident, Ident, clobber->value); + String str = ident->token.string; + if (str == "flags") { + if (clobber_flags) { + error(clobber->value, "#clobber flags has already been defined"); + } + clobber_flags = true; + } else if (str == "memory") { + if (clobber_memory) { + error(clobber->value, "#clobber memory has already been defined"); + } + clobber_memory = true; + } else { + error(clobber->value, "Expected either a register, 'flags', or 'memory' for a '#clobber' specification, got '%.*s'", LIT(str)); + } + case_end; + default: + error(clobber->value, "Expected either a register, 'flags', or 'memory' for a '#clobber' specification"); + break; + } + } + + entity->AsmTemplate.clobber_flags = clobber_flags; + entity->AsmTemplate.clobber_memory = clobber_memory; + entity->AsmTemplate.is_volatile = is_volatile; + entity->AsmTemplate.is_align_stack = is_align_stack; + } + + // collect label decls + for (Ast *instruction_ : at->instructions) { + switch (instruction_->kind) { + case_ast_node(label, AsmLabelDecl, instruction_); + GB_ASSERT(label->name->kind == Ast_Ident); + Ast *name = label->name; + if (is_blank_ident(name)) { + error(name, "Asm label definition cannot be '_'"); + continue; + } + Entity *label_entity = alloc_entity_label(ate->label_scope, name->Ident.token, nullptr, instruction_, nullptr); + Entity *found = scope_insert(ate->label_scope, label_entity); + if (found != nullptr) { + TokenPos pos = found->token.pos; + error(name, + "Redeclaration of the label '%.*s' in this scope\n" + "\tat %s", + LIT(name->Ident.token.string), token_pos_to_string(pos)); + continue; + } + name->Ident.entity = label_entity; + case_end; + } + } + + + Array operands = {}; + operands.allocator = heap_allocator(); + array_reserve(&operands, 16); + defer (array_free(&operands)); + + u8 previous_prefix = 0; + Ast *previous_prefix_instr = nullptr; // for a good error location + + for (Ast *instruction_ : at->instructions) { + switch (instruction_->kind) { + case_ast_node(instr, AsmInstruction, instruction_); + GB_ASSERT(instr->name->kind == Ast_Ident); + + u16 mnemonic = 0; + CheckMnemomicResult res = check_mnemonic_name(asm_ctx, instr, &mnemonic); + + array_clear(&operands); + for (Ast *expr : instr->operands) { + Operand operand = {}; + check_asm_instruction_operand(asm_ctx, ctx, entity, &operand, expr, /*allow_memory_operands*/true); + array_add(&operands, operand); + } + + if (res == CheckMnemomic_Prefix) { + if (instr->operands.count != 0) { + error(instr->name, "A prefix must not have any operands, and be separate from the instruction it is prefixing"); + } + if (previous_prefix != 0) { + error(instr->name, "A prefix cannot immediately follow another prefix"); + } + previous_prefix = cast(u8)mnemonic; + previous_prefix_instr = instruction_; + } else if (res == CheckMnemomic_Mnemonic) { + check_mnemonic(asm_ctx, ctx, entity, instr, mnemonic, slice_from_array(operands), previous_prefix, previous_prefix_instr); + previous_prefix = 0; + previous_prefix_instr = nullptr; + } else { + // invalid mnemonic already reported; a pending prefix now has no target + previous_prefix = 0; + previous_prefix_instr = nullptr; + } + case_end; + + case_ast_node(label, AsmLabelDecl, instruction_); + if (previous_prefix != 0) { + error(previous_prefix_instr, "A prefix must be immediately followed by an instruction, but a label declaration was found"); + previous_prefix = 0; + previous_prefix_instr = nullptr; + } + case_end; + + case_ast_node(dir, AsmDirective, instruction_); + String name = dir->name.string; + if (name == "byte") { + if (dir->operands.count == 0) { + error(dir->name, "Expected 1 or more integers for the asm directive #%.*s", LIT(name)); + break; + } + array_clear(&operands); + for (Ast *expr : dir->operands) { + Operand operand = {}; + check_asm_instruction_operand(asm_ctx, ctx, entity, &operand, expr, /*allow_memory_operands*/true); + array_add(&operands, operand); + } + for (auto const &op : operands) { + if (op.mode != Addressing_Constant) { + error(op.expr, "Expected an integer for the asm directive #%.*s", LIT(name)); + continue; + } + ExactValue ev = exact_value_to_integer(op.value); + if (ev.kind != ExactValue_Integer) { + error(op.expr, "Expected an integer for the asm directive #%.*s", LIT(name)); + continue; + } + i64 i = exact_value_to_i64(ev); + if (i < 0 || i > 255) { + error(op.expr, "Expected an integer within 0..<256 for the asm directive #%.*s, got %lld", LIT(name), cast(long long)i); + continue; + } + } + } else if (name == "align") { + if (dir->operands.count != 1) { + error(dir->name, "Expected 1 integer for the asm directive #%.*s", LIT(name)); + break; + } + array_clear(&operands); + for (Ast *expr : dir->operands) { + Operand operand = {}; + check_asm_instruction_operand(asm_ctx, ctx, entity, &operand, expr, /*allow_memory_operands*/true); + array_add(&operands, operand); + } + for (auto const &op : operands) { + if (op.mode != Addressing_Constant) { + error(op.expr, "Expected a power-of-two integer for the asm directive #%.*s", LIT(name)); + continue; + } + ExactValue ev = exact_value_to_integer(op.value); + if (ev.kind != ExactValue_Integer) { + error(op.expr, "Expected a power-of-two integer for the asm directive #%.*s", LIT(name)); + continue; + } + i64 i = exact_value_to_i64(ev); + if (i < 0 || !is_power_of_two(i)) { + error(op.expr, "Expected a power-of-two integer for the asm directive #%.*s, got %lld", LIT(name), cast(long long)i); + continue; + } + } + + } else if (name == "skip" || + name == "nop") { + if (dir->operands.count != 1) { + error(dir->name, "Expected 1 integer for the asm directive #%.*s", LIT(name)); + break; + } + array_clear(&operands); + for (Ast *expr : dir->operands) { + Operand operand = {}; + check_asm_instruction_operand(asm_ctx, ctx, entity, &operand, expr, /*allow_memory_operands*/true); + array_add(&operands, operand); + } + for (auto const &op : operands) { + if (op.mode != Addressing_Constant) { + error(op.expr, "Expected an integer >0 for the asm directive #%.*s", LIT(name)); + continue; + } + ExactValue ev = exact_value_to_integer(op.value); + if (ev.kind != ExactValue_Integer) { + error(op.expr, "Expected an integer >0 for the asm directive #%.*s", LIT(name)); + continue; + } + i64 i = exact_value_to_i64(ev); + if (i < 0) { + error(op.expr, "Expected an integer >0 for the asm directive #%.*s, got %lld", LIT(name), cast(long long)i); + continue; + } + } + } else { + error(dir->name, "Unknown asm directive: #%.*s", LIT(name)); + } + + case_end; + + default: + error(instruction_, "Unexpected instruction in asm template"); + break; + } + } + if (previous_prefix != 0) { + error(previous_prefix_instr, "A prefix must be immediately followed by an instruction, but the template ended"); + } +} + +gb_internal void check_asm_template_from_entity(CheckerContext *c, Entity *e, DeclInfo *d) { + if (build_context.metrics.arch == TargetArch_amd64) { + check_asm_template(&g_asm_amd64, c, e, d); + } else { + error(e->token, "asm templates are not currently supported for this target"); + } +} \ No newline at end of file diff --git a/src/check_decl.cpp b/src/check_decl.cpp index edb9f4883..68553c25f 100644 --- a/src/check_decl.cpp +++ b/src/check_decl.cpp @@ -1983,10 +1983,144 @@ gb_internal void check_proc_group_decl(CheckerContext *ctx, Entity *pg_entity, D AttributeContext ac = {}; check_decl_attributes(ctx, d->attributes, proc_group_attribute, &ac); check_objc_methods(ctx, pg_entity, ac); - - } +gb_internal void check_asm_group_decl(CheckerContext *ctx, Entity *asm_entity, DeclInfo *d) { + GB_ASSERT(asm_entity->kind == Entity_ProcGroup); + auto *pge = &asm_entity->ProcGroup; + String proc_group_name = asm_entity->token.string; + + ast_node(pg, AsmGroup, d->init_expr); + + pge->entities = array_make(permanent_allocator(), 0, pg->args.count); + + // NOTE(bill): This must be set here to prevent cycles in checking if someone + // places the entity within itself + asm_entity->type = t_invalid; + + PtrSet entity_set = {}; + ptr_set_init(&entity_set, 2*pg->args.count); + + for (Ast *arg_ : pg->args) { + Ast *arg = arg_; + Entity *e = nullptr; + Operand o = {}; + if (arg->kind == Ast_BinaryExpr && arg->BinaryExpr.op.kind == Token_where) { + Ast *cond_expr = arg->BinaryExpr.right; + Operand cond = {}; + check_expr(ctx, &cond, cond_expr); + if (cond.mode != Addressing_Invalid) { + if (cond.mode != Addressing_Constant || !is_type_boolean(cond.type) || cond.value.kind != ExactValue_Bool) { + error(arg, "Expected a constant binary expression for the 'where' clause"); + } else if (!cond.value.value_bool) { + continue; + } + } + + arg = arg->BinaryExpr.left; + } + + if (arg->kind == Ast_Ident) { + e = check_ident(ctx, &o, arg, nullptr, nullptr, true); + } else if (arg->kind == Ast_SelectorExpr) { + e = check_selector(ctx, &o, arg, nullptr); + } + if (e == nullptr) { + error(arg, "Expected a valid entity name in asm template group, got %.*s", LIT(ast_strings[arg->kind])); + continue; + } + if (e->kind != Entity_AsmTemplate) { + error(arg, "Expected an asm template"); + continue; + } + + if (ptr_set_update(&entity_set, e)) { + error(arg, "Previous use of `%.*s` in asm template group", LIT(e->token.string)); + continue; + } + array_add(&pge->entities, e); + } + + ptr_set_destroy(&entity_set); + + for (isize j = 0; j < pge->entities.count; j++) { + Entity *p = pge->entities[j]; + if (p->type == t_invalid) { + // NOTE(bill): This invalid overload has already been handled + continue; + } + + if (p->flags & EntityFlag_Disabled) { + continue; + } + + String name = p->token.string; + + for (isize k = j+1; k < pge->entities.count; k++) { + Entity *q = pge->entities[k]; + GB_ASSERT(p != q); + + bool is_invalid = false; + + TokenPos pos = q->token.pos; + + if (q->type == nullptr || q->type == t_invalid) { + continue; + } + + ERROR_BLOCK(); + + if (q->flags & EntityFlag_Disabled) { + continue; + } + + ProcTypeOverloadKind kind = are_proc_types_overload_safe(p->type, q->type); + bool both_have_where_clauses = false; + // NOTE(bill): asm template do not have `where` clauses + + if (!both_have_where_clauses) switch (kind) { + case ProcOverload_Identical: + error(p->token, "Overloaded asm template '%.*s' has the same type as another asm template in the asm template group '%.*s'", LIT(name), LIT(proc_group_name)); + is_invalid = true; + break; + // case ProcOverload_CallingConvention: + // error(p->token, "Overloaded asm template '%.*s' has the same type as another asm template in the asm template group '%.*s'", LIT(name), LIT(proc_group_name)); + // is_invalid = true; + // break; + case ProcOverload_ParamVariadic: + error(p->token, "Overloaded asm template '%.*s' has the same type as another asm template in the asm template group '%.*s'", LIT(name), LIT(proc_group_name)); + is_invalid = true; + break; + case ProcOverload_ResultCount: + case ProcOverload_ResultTypes: + error(p->token, "Overloaded asm template '%.*s' has the same parameters but different results in the asm template group '%.*s'", LIT(name), LIT(proc_group_name)); + is_invalid = true; + break; + case ProcOverload_Polymorphic: + break; + case ProcOverload_ParamCount: + case ProcOverload_ParamTypes: + case ProcOverload_TargetFeatures: + // This is okay :) + break; + + } + + if (is_invalid) { + error_line("\tprevious asm template at %s\n", token_pos_to_string(pos)); + q->type = t_invalid; + } + } + } + + AttributeContext ac = {}; + check_decl_attributes(ctx, d->attributes, proc_group_attribute, &ac); + check_objc_methods(ctx, asm_entity, ac); +} + +#include "check_asm.cpp" + + gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, Type *named_type) { if (e->state == EntityState_Resolved) { return; @@ -2060,7 +2194,15 @@ gb_internal void check_entity_decl(CheckerContext *ctx, Entity *e, DeclInfo *d, check_proc_decl(&c, e, d); break; case Entity_ProcGroup: - check_proc_group_decl(&c, e, d); + if (e->ProcGroup.is_asm_group) { + check_asm_group_decl(&c, e, d); + } else { + check_proc_group_decl(&c, e, d); + } + break; + + case Entity_AsmTemplate: + check_asm_template_from_entity(&c, e, d); break; } diff --git a/src/check_expr.cpp b/src/check_expr.cpp index c8932ddc8..c37c72a23 100644 --- a/src/check_expr.cpp +++ b/src/check_expr.cpp @@ -370,6 +370,7 @@ gb_internal void check_scope_decls(CheckerContext *c, Slice const &nodes, case Entity_Constant: case Entity_TypeName: case Entity_Procedure: + case Entity_AsmTemplate: break; default: continue; @@ -2076,6 +2077,10 @@ gb_internal Entity *check_ident(CheckerContext *c, Operand *o, Ast *n, Type *nam o->mode = Addressing_Value; break; + case Entity_AsmTemplate: + o->mode = Addressing_Value; + break; + default: compiler_error("Unknown EntityKind %.*s", LIT(entity_strings[e->kind])); break; @@ -5968,7 +5973,8 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod add_entity_use(c, op_expr, e); expr_entity = e; - if (e != nullptr && (e->kind == Entity_Procedure || e->kind == Entity_ProcGroup) && selector->kind == Ast_Ident) { + if (e != nullptr && (e->kind == Entity_Procedure || e->kind == Entity_ProcGroup || e->kind == Entity_AsmTemplate) && + selector->kind == Ast_Ident) { gbString sel_str = expr_to_string(selector); error(node, "'%s' is not declared by '%.*s'", sel_str, LIT(e->token.string)); gb_string_free(sel_str); @@ -6339,6 +6345,10 @@ gb_internal Entity *check_selector(CheckerContext *c, Operand *operand, Ast *nod case Entity_Nil: operand->mode = Addressing_Value; break; + + case Entity_AsmTemplate: + operand->mode = Addressing_Value; + break; } add_type_and_value(c, operand->expr, operand->mode, operand->type, operand->value); @@ -8878,7 +8888,26 @@ gb_internal ExprKind check_call_expr(CheckerContext *c, Operand *operand, Ast *c } } else { if (proc != nullptr) { - check_expr_or_type(c, operand, proc); + Ast *unnested_proc = unparen_expr(proc); + if (unnested_proc->kind == Ast_AsmTemplate) { + // NOTE(bill): asm templates can only be used within as a declaration OR within a procedure call directly + ast_node(at, AsmTemplate, unnested_proc); + Token token = at->token; + DeclInfo *d = make_decl_info(c->scope, c->decl); + Entity *e = alloc_entity_asm_template(d->scope, token, nullptr, unnested_proc); + d->init_expr = unnested_proc; + at->anonymous_entity = e; + + check_asm_template_from_entity(c, e, d); + + operand->mode = Addressing_Value; + operand->type = e->type; + operand->value = {}; + operand->expr = proc; + add_type_and_value(c, proc, operand->mode, operand->type, operand->value); + } else { + check_expr_or_type(c, operand, proc); + } } else { GB_ASSERT(operand->expr != nullptr); } @@ -12431,6 +12460,14 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast return kind; case_end; + case_ast_node(at, AsmTemplate, node); + error(node, "'asm' templates must either be defined as a declaration or within a procedure call directly"); + o->mode = Addressing_NoValue; + o->type = nullptr; + o->expr = node; + return kind; + case_end; + case_ast_node(i, Implicit, node); switch (i->kind) { case Token_context: @@ -12512,6 +12549,12 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast o->mode = Addressing_Invalid; case_end; + case_ast_node(ag, AsmGroup, node); + error(node, "Illegal use of a asm group"); + o->mode = Addressing_Invalid; + case_end; + + case_ast_node(pl, ProcLit, node); CheckerContext ctx = *c; @@ -12759,53 +12802,6 @@ gb_internal ExprKind check_expr_base_internal(CheckerContext *c, Operand *o, Ast } case_end; - case_ast_node(ia, InlineAsmExpr, node); - if (c->curr_proc_decl == nullptr) { - error(node, "Inline asm expressions are only allowed within a procedure body"); - } - - auto param_types = array_make(heap_allocator(), ia->param_types.count); - Type *return_type = nullptr; - for_array(i, ia->param_types) { - param_types[i] = check_type(c, ia->param_types[i]); - } - if (ia->return_type != nullptr) { - return_type = check_type(c, ia->return_type); - } - Operand x = {}; - check_expr(c, &x, ia->asm_string); - if (x.mode != Addressing_Constant || !is_type_string(x.type)) { - error(x.expr, "Expected a constant string for the inline asm main parameter"); - } - check_expr(c, &x, ia->constraints_string); - if (x.mode != Addressing_Constant || !is_type_string(x.type)) { - error(x.expr, "Expected a constant string for the inline asm constraints parameter"); - } - - Scope *scope = create_scope(c->info, c->scope); - scope->flags |= ScopeFlag_Proc; - - Type *params = alloc_type_tuple(); - Type *results = alloc_type_tuple(); - if (param_types.count != 0) { - slice_init(¶ms->Tuple.variables, heap_allocator(), param_types.count); - for_array(i, param_types) { - params->Tuple.variables[i] = alloc_entity_param(scope, blank_token, param_types[i], false, true); - } - } - if (return_type != nullptr) { - slice_init(&results->Tuple.variables, heap_allocator(), 1); - results->Tuple.variables[0] = alloc_entity_param(scope, blank_token, return_type, false, true); - } - - - Type *pt = alloc_type_proc(scope, params, param_types.count, results, return_type != nullptr ? 1 : 0, false, ProcCC_InlineAsm); - o->type = pt; - o->mode = Addressing_Value; - o->expr = node; - return Expr_Expr; - case_end; - case Ast_DistinctType: case Ast_TypeidType: case Ast_PolyType: @@ -13080,6 +13076,16 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan str = gb_string_append_rune(str, '}'); case_end; + case_ast_node(pg, AsmGroup, node); + str = gb_string_appendc(str, "asm{"); + for_array(i, pg->args) { + if (i > 0) str = gb_string_appendc(str, ", "); + str = write_expr_to_string(str, pg->args[i], shorthand); + } + str = gb_string_append_rune(str, '}'); + case_end; + + case_ast_node(pl, ProcLit, node); str = write_expr_to_string(str, pl->type, shorthand); if (pl->body) { @@ -13643,38 +13649,129 @@ gb_internal gbString write_expr_to_string(gbString str, Ast *node, bool shorthan str = gb_string_appendc(str, "}"); case_end; - case_ast_node(ia, InlineAsmExpr, node); - str = gb_string_appendc(str, "asm("); - for_array(i, ia->param_types) { - if (i > 0) { + case_ast_node(at, AsmTemplate, node); + str = gb_string_appendc(str, "asm"); + { + ast_node(pt, ProcType, at->signature); + + str = gb_string_appendc(str, "("); + str = write_expr_to_string(str, pt->params, shorthand); + str = gb_string_appendc(str, ")"); + if (pt->results != nullptr) { + str = gb_string_appendc(str, " -> "); + + bool parens_needed = false; + if (pt->results && pt->results->kind == Ast_FieldList) { + for (Ast *field : pt->results->FieldList.list) { + ast_node(f, Field, field); + if (f->names.count != 0) { + parens_needed = true; + break; + } + } + } + + if (parens_needed) { + str = gb_string_append_rune(str, '('); + } + str = write_expr_to_string(str, pt->results, shorthand); + if (parens_needed) { + str = gb_string_append_rune(str, ')'); + } + } + } + + if (at->specs.count) { + str = gb_string_append_rune(str, '['); + for_array(j, at->specs) { + if (j > 0) { + str = gb_string_appendc(str, ", "); + } + Ast *spec = at->specs[j]; + str = write_expr_to_string(str, spec, shorthand); + } + str = gb_string_append_rune(str, ']'); + } + str = gb_string_append_rune(str, '{'); + for_array(j, at->instructions) { + if (j > 0) { + str = gb_string_appendc(str, "; "); + } + Ast *instr = at->instructions[j]; + str = write_expr_to_string(str, instr, shorthand); + if (instr->kind == Ast_AsmLabelDecl) { + str = gb_string_appendc(str, ":"); + } + } + str = gb_string_append_rune(str, '}'); + case_end; + + case_ast_node(ar, AsmRegister, node); + str = gb_string_appendc(str, "%"); + str = gb_string_append_length(str, ar->name.string.text, ar->name.string.len); + case_end; + + case_ast_node(spec, AsmSpec, node); + if (spec->name) { + str = write_expr_to_string(str, spec->name, shorthand); + if (spec->tied_name) { + str = gb_string_appendc(str, " -> "); + str = write_expr_to_string(str, spec->tied_name, shorthand); + } + } + if (spec->type) { + str = gb_string_appendc(str, ": "); + str = write_expr_to_string(str, spec->type, shorthand); + } + if (spec->value) { + str = gb_string_appendc(str, " = "); + str = write_expr_to_string(str, spec->value, shorthand); + } + case_end; + + case_ast_node(clobber, AsmClobber, node); + str = gb_string_appendc(str, "#"); + str = gb_string_append_length(str, clobber->name.string.text, clobber->name.string.len); + if (clobber->value) { + str = gb_string_appendc(str, " "); + str = write_expr_to_string(str, clobber->value, shorthand); + } + case_end; + + case_ast_node(label, AsmLabelDecl, node); + str = gb_string_appendc(str, "."); + str = write_expr_to_string(str, label->name, shorthand); + case_end; + + case_ast_node(instr, AsmInstruction, node); + str = write_expr_to_string(str, instr->name, shorthand); + for_array(j, instr->operands) { + if (j == 0) { + str = gb_string_appendc(str, " "); + } else { str = gb_string_appendc(str, ", "); } - str = write_expr_to_string(str, ia->param_types[i], shorthand); + Ast *operand = instr->operands[j]; + str = write_expr_to_string(str, operand, shorthand); } - str = gb_string_appendc(str, ")"); - if (ia->return_type != nullptr) { - str = gb_string_appendc(str, " -> "); - str = write_expr_to_string(str, ia->return_type, shorthand); + case_end; + + case_ast_node(op, AsmMemoryOperand, node); + str = gb_string_appendc(str, "["); + str = write_expr_to_string(str, op->base, shorthand); + if (op->index) { + str = gb_string_appendc(str, " + "); + str = write_expr_to_string(str, op->index, shorthand); + if (op->scale) { + str = gb_string_appendc(str, "*"); + str = write_expr_to_string(str, op->scale, shorthand); + } } - if (ia->has_side_effects) { - str = gb_string_appendc(str, " #side_effects"); + if (op->disp) { + str = gb_string_appendc(str, " + "); + str = write_expr_to_string(str, op->disp, shorthand); } - if (ia->is_align_stack) { - str = gb_string_appendc(str, " #stack_align"); - } - if (ia->dialect) { - str = gb_string_appendc(str, " #"); - str = gb_string_appendc(str, inline_asm_dialect_strings[ia->dialect]); - } - str = gb_string_appendc(str, " {"); - if (shorthand) { - str = gb_string_appendc(str, "..."); - } else { - str = write_expr_to_string(str, ia->asm_string, shorthand); - str = gb_string_appendc(str, ", "); - str = write_expr_to_string(str, ia->constraints_string, shorthand); - } - str = gb_string_appendc(str, "}"); + str = gb_string_appendc(str, "]"); case_end; } diff --git a/src/checker.cpp b/src/checker.cpp index a9f22e99a..25bbc0f56 100644 --- a/src/checker.cpp +++ b/src/checker.cpp @@ -1834,6 +1834,12 @@ retry:; expr = we->cond->tav.value.value_bool ? we->x : we->y; goto retry; case_end; + case_ast_node(label, AsmLabelDecl, expr); + return entity_of_node(label->name); + case_end; + case_ast_node(at, AsmTemplate, expr); + return at->anonymous_entity; + case_end; } return nullptr; } @@ -5061,6 +5067,24 @@ gb_internal void check_collect_value_decl(CheckerContext *c, Ast *decl) { if (fl != nullptr) { error(name, "Procedure groups are not allowed within a foreign block"); } + } else if (init->kind == Ast_AsmGroup) { + ast_node(ag, AsmGroup, init); + e = alloc_entity_proc_group(d->scope, token, nullptr); + e->ProcGroup.is_asm_group = true; + if (fl != nullptr) { + error(name, "Asm template groups are not allowed within a foreign block"); + } + }else if (init->kind == Ast_AsmTemplate) { + if (c->scope->flags&ScopeFlag_Type) { + error(name, "Asm templates are not allowed within a struct"); + continue; + } + ast_node(at, AsmTemplate, init); + e = alloc_entity_asm_template(d->scope, token, nullptr, init); + if (fl != nullptr) { + error(name, "Asm templates are not allowed within a foreign block"); + } + d->init_expr = init; } else { e = alloc_entity_constant(d->scope, token, nullptr, empty_exact_value); } diff --git a/src/checker.hpp b/src/checker.hpp index 1a53018e3..bdfd2c9c3 100644 --- a/src/checker.hpp +++ b/src/checker.hpp @@ -928,3 +928,5 @@ gb_internal GenTypesData *ensure_polymorphic_record_entity_has_gen_types(Checker gb_internal void init_map_internal_types(Type *type); + +gb_internal void check_asm_template_from_entity(CheckerContext *c, Entity *e, DeclInfo *d); diff --git a/src/entity.cpp b/src/entity.cpp index 196380831..8248515f4 100644 --- a/src/entity.cpp +++ b/src/entity.cpp @@ -15,7 +15,8 @@ struct DeclInfo; ENTITY_KIND(ImportName) \ ENTITY_KIND(LibraryName) \ ENTITY_KIND(Nil) \ - ENTITY_KIND(Label) + ENTITY_KIND(Label) \ + ENTITY_KIND(AsmTemplate) enum EntityKind { #define ENTITY_KIND(k) GB_JOIN2(Entity_, k), @@ -159,6 +160,44 @@ gb_internal TypeNameObjCMetadata *create_type_name_obj_c_metadata() { return md; } +enum AsmTemplateEntityDeclKind : u8 { + AsmTemplateEntityDecl_Invalid, + AsmTemplateEntityDecl_Register, + AsmTemplateEntityDecl_Memory, + AsmTemplateEntityDecl_Immediate, + + AsmTemplateEntityDecl_COUNT +}; + +enum AsmTemplateEntityDeclParamGroup : u8 { + AsmTemplateEntityDeclParamGroup_Unknown, + AsmTemplateEntityDeclParamGroup_Input, + AsmTemplateEntityDeclParamGroup_Output, + AsmTemplateEntityDeclParamGroup_Scratch, + + AsmTemplateEntityDeclParamGroup_COUNT +}; + +struct AsmTemplateEntityDecl { + Entity * entity; + Entity * tied_entity; + AsmTemplateEntityDeclKind kind; + AsmTemplateEntityDeclParamGroup param_group; + AsmRegClass reg_class; + + String pin; + String pin_flag; // e.g. %flags.zf + + i32 total_index; + + i32 param_index; // index into the Proc signature's params (inputs), else -1 + i32 result_index; // index into results (outputs), else -1 + i32 tie; // InOut: index into operands[] of the tied output; else -1 + + i32 view_of; // total_index of the source operand this is a width-view of, else -1 + i32 view_bits; // the view width in bits, otherwise 0 +}; + // An Entity is a named "thing" in the language struct Entity { EntityKind kind; @@ -277,6 +316,7 @@ struct Entity { bool is_objc_class_method : 1; } Procedure; struct { + bool is_asm_group; Array entities; } ProcGroup; struct { @@ -301,9 +341,26 @@ struct Entity { Ast *node; Ast *parent; } Label; + struct { + Ast *node; + bool is_volatile; + bool is_align_stack; + + bool clobber_flags; + bool clobber_memory; + StringSet clobber_registers_set; + + Scope *param_scope; + Scope *label_scope; + Array decls; + } AsmTemplate; }; }; + +gb_internal AsmRegClass check_asm_reg_class_from_type(Type *type); +gb_internal bool is_type_internally_pointer_like(Type *t); + gb_internal InternedString entity_interned_name(Entity *entity) { auto name = entity->interned_name.load(); if (name.value == 0) { @@ -314,6 +371,26 @@ gb_internal InternedString entity_interned_name(Entity *entity) { return name; } + +gb_internal AsmTemplateEntityDecl asm_template_entity_decl_default(Entity *entity) { + AsmTemplateEntityDecl ed = {}; + ed.kind = AsmTemplateEntityDecl_Register; + if (is_type_internally_pointer_like(entity->type)) { + ed.kind = AsmTemplateEntityDecl_Memory; + } + ed.reg_class = check_asm_reg_class_from_type(entity->type); + ed.entity = entity; + ed.total_index = -1; + ed.param_index = -1; + ed.result_index = -1; + ed.tie = -1; + ed.view_of = -1; + ed.view_bits = 0; + + return ed; +} + + gb_internal bool is_entity_kind_exported(EntityKind kind, bool allow_builtin = false) { switch (kind) { case Entity_Builtin: @@ -478,8 +555,12 @@ gb_internal Entity *alloc_entity_library_name(Scope *scope, Token token, Type *t } - - +gb_internal Entity *alloc_entity_asm_template(Scope *scope, Token token, Type *type, Ast *node) { + GB_ASSERT(node->kind == Ast_AsmTemplate); + Entity *entity = alloc_entity(Entity_AsmTemplate, scope, token, type); + entity->AsmTemplate.node = node; + return entity; +} gb_internal Entity *alloc_entity_nil(String name, Type *type) { Entity *entity = alloc_entity(Entity_Nil, nullptr, make_token_ident(name), type); diff --git a/src/exact_value.cpp b/src/exact_value.cpp index 5c436fee6..cb4c5a578 100644 --- a/src/exact_value.cpp +++ b/src/exact_value.cpp @@ -15,19 +15,20 @@ struct Quaternion256 { }; enum ExactValueKind { - ExactValue_Invalid = 0, + ExactValue_Invalid = 0, - ExactValue_Bool = 1, - ExactValue_String = 2, - ExactValue_Integer = 3, - ExactValue_Float = 4, - ExactValue_Complex = 5, - ExactValue_Quaternion = 6, - ExactValue_Pointer = 7, - ExactValue_Compound = 8, - ExactValue_Procedure = 9, - ExactValue_Typeid = 10, - ExactValue_String16 = 11, + ExactValue_Bool = 1, + ExactValue_String = 2, + ExactValue_Integer = 3, + ExactValue_Float = 4, + ExactValue_Complex = 5, + ExactValue_Quaternion = 6, + ExactValue_Pointer = 7, + ExactValue_Compound = 8, + ExactValue_Procedure = 9, + ExactValue_Typeid = 10, + ExactValue_String16 = 11, + ExactValue_AsmTemplate = 12, ExactValue_Count, }; @@ -62,6 +63,7 @@ struct ExactValue { Ast * value_procedure; Type * value_typeid; String16 value_string16; + Ast * value_asm_template; }; }; @@ -107,6 +109,9 @@ gb_internal uintptr hash_exact_value(ExactValue v) { case ExactValue_Procedure: res = ptr_map_hash_key(v.value_procedure); break; + case ExactValue_AsmTemplate: + res = ptr_map_hash_key(v.value_asm_template); + break; case ExactValue_Typeid: res = ptr_map_hash_key(v.value_typeid); break; diff --git a/src/llvm_backend.cpp b/src/llvm_backend.cpp index 3aa78731f..51a040a72 100644 --- a/src/llvm_backend.cpp +++ b/src/llvm_backend.cpp @@ -29,6 +29,7 @@ #include "llvm_backend_expr.cpp" #include "llvm_backend_stmt.cpp" #include "llvm_backend_proc.cpp" +#include "llvm_backend_asm.cpp" gb_internal String get_default_microarchitecture() { String default_march = str_lit("generic"); diff --git a/src/llvm_backend.hpp b/src/llvm_backend.hpp index a38f67d86..563f854d7 100644 --- a/src/llvm_backend.hpp +++ b/src/llvm_backend.hpp @@ -467,6 +467,8 @@ gb_internal lbValue lb_emit_call(lbProcedure *p, lbValue value, Array c gb_internal lbValue lb_emit_conv(lbProcedure *p, lbValue value, Type *t); gb_internal lbValue lb_emit_comp_against_nil(lbProcedure *p, TokenKind op_kind, lbValue x); +gb_internal lbValue lb_emit_asm_template_call(lbProcedure *p, Entity *entity, Array const &args); + gb_internal void lb_emit_jump(lbProcedure *p, lbBlock *target_block); gb_internal void lb_emit_if(lbProcedure *p, lbValue cond, lbBlock *true_block, lbBlock *false_block); gb_internal void lb_start_block(lbProcedure *p, lbBlock *b); diff --git a/src/llvm_backend_asm.cpp b/src/llvm_backend_asm.cpp new file mode 100644 index 000000000..972d763ea --- /dev/null +++ b/src/llvm_backend_asm.cpp @@ -0,0 +1,778 @@ +#define LLVM_ASM_DEBUG_PRINT false + +struct lbAsmGenerate { + Entity * tmpl_entity; + AstAsmTemplate * tmpl_node; + Array *ops; + + enum WriteOperandFlags : u32 { + WriteOperandFlag_PrintPrefixes = 1<<0, + WriteOperandFlag_IsScale = 1<<1, + WriteOperandFlag_IsScaleLog2 = 1<<2, + + WriteOperandFlag_Negate = 1<<3, + + + WriteOperandFlag_NONE = 0, + WriteOperandFlag_DEFAULT = WriteOperandFlag_PrintPrefixes, + }; + + void init(Entity *entity) { + this->tmpl_entity = entity; + GB_ASSERT(this->tmpl_entity != nullptr); + GB_ASSERT(this->tmpl_entity->kind == Entity_AsmTemplate); + this->ops = &this->tmpl_entity->AsmTemplate.decls; + GB_ASSERT(this->tmpl_entity->AsmTemplate.node->kind == Ast_AsmTemplate); + this->tmpl_node = &this->tmpl_entity->AsmTemplate.node->AsmTemplate; + } + + gbString write_label(gbString asm_string, AstIdent *label_ident) { + String name = label_ident->token.string; + asm_string = gb_string_appendc(asm_string, ".L_"); + asm_string = gb_string_append_length(asm_string, tmpl_entity->token.string.text, tmpl_entity->token.string.len); + asm_string = gb_string_appendc(asm_string, "_"); + asm_string = gb_string_append_length(asm_string, name.text, name.len); + // ${:uid} expands to a per-instantiation unique integer, so repeated + // inlining of the same template can't collide on the label symbol. + asm_string = gb_string_appendc(asm_string, "${:uid}"); + return asm_string; + } + + AsmTemplateEntityDecl *entity_op(Entity *parameter) { + for (AsmTemplateEntityDecl &op : *ops) { + if (op.entity == parameter) { + return &op; + } + } + GB_PANIC("Could not find asm entity %.*s", LIT(parameter->token.string)); + return nullptr; + } + + gbString write_constant_operand(gbString asm_string, Ast *op, u32 flags) { + GB_ASSERT(op->tav.mode == Addressing_Constant); + + op->tav.value = exact_value_to_integer(op->tav.value); + ExactValue ev = op->tav.value; + GB_ASSERT(ev.kind != ExactValue_Invalid); + switch (ev.kind) { + case ExactValue_Integer: { + i64 val = exact_value_to_i64(ev); + if (flags & WriteOperandFlag_IsScale) { + switch (val) { + case 1: case 2: case 4: case 8: + // okay + break; + default: + error(op, "A scale must be a constant integer or an immediate with the value 1, 2, 4, or 8, got %lld", cast(long long)val); + break; + } + } else if (flags & WriteOperandFlag_IsScaleLog2) { + switch (val) { + case 0: case 1: case 2: case 3: + // NOTE(bill): AMD64 only supports full scales + val = (cast(i64)1)< const &op_number, Ast *op, u32 flags) { + if (op->tav.mode == Addressing_Constant) { + return write_constant_operand(asm_string, op, flags); + } + + if (flags & WriteOperandFlag_Negate) { + flags &= ~WriteOperandFlag_Negate; + asm_string = gb_string_appendc(asm_string, "-"); + } + + switch (op->kind) { + case_ast_node(i, Ident, op); + Entity *e = entity_of_node(op); + auto *ed = entity_op(e); + + if (ed->view_of >= 0) { + // Width-view of another operand (e.g. `p0b: u8 = p0`): emit the SOURCE + // operand's number with an LLVM width modifier, so both names share the + // one register the allocator chose, viewed at the requested width. + i32 idx = op_number[ed->view_of]; + GB_ASSERT(idx >= 0); + char mod = 0; + switch (ed->view_bits) { + case 8: mod = 'b'; break; // low 8-bit (al/r11b/...) + case 16: mod = 'w'; break; // 16-bit (ax/r11w/...) + case 32: mod = 'k'; break; // 32-bit (eax/r11d/...) + case 64: mod = 'q'; break; // 64-bit (rax/r11/...) + default: GB_PANIC("asm: invalid width-view size %d", ed->view_bits); break; + } + asm_string = gb_string_append_fmt(asm_string, "${%d:%c}", idx, mod); + } else { + i32 idx = op_number[ed->total_index]; + GB_ASSERT(idx >= 0); + asm_string = gb_string_append_fmt(asm_string, "$%d", idx); + } + case_end; + case_ast_node(mem_op, AsmMemoryOperand, op); + asm_string = this->write_memory_operand(asm_string, op_number, mem_op, flags&~WriteOperandFlag_PrintPrefixes); + case_end; + + case_ast_node(bl, BasicLit, op); + GB_PANIC("NOTE(bill): this should have been handled above"); + case_end; + + case_ast_node(label, AsmLabelDecl, op); + asm_string = write_label(asm_string, &label->name->Ident); + case_end; + + case_ast_node(reg, AsmRegister, op); + asm_string = gb_string_appendc(asm_string, "%"); + asm_string = gb_string_append_length(asm_string, reg->name.string.text, reg->name.string.len); + case_end; + default: + GB_PANIC("TODO(bill): write_operand for '%s'", expr_to_string(op)); + break; + } + return asm_string; + } + + char const *class_letter(AsmRegClass rc) { + switch (rc) { + case AsmRegClass_Integer: return "r"; + case AsmRegClass_Float: return "x"; // TODO(bill): target-dependent + case AsmRegClass_Vector: return "x"; // TODO(bill): target-dependent + case AsmRegClass_Mask: return "^Yk"; // AVX-512 k-regs + default: GB_PANIC("asm: unknown reg class"); return "r"; + } + }; + + + // LLVM type of a returned register output, taken from the proc signature's results. + LLVMTypeRef output_llvm_type(lbModule *m, AsmTemplateEntityDecl const &e) { + Type *pt = base_type(tmpl_entity->type); + Type *rt = pt->Proc.results->Tuple.variables[e.result_index]->type; + return lb_type(m, rt); + }; + + // The declared Odin result type for an output entity. + Type *result_type_of(AsmTemplateEntityDecl const &e) { + Type *pt = base_type(tmpl_entity->type); + return pt->Proc.results->Tuple.variables[e.result_index]->type; + } + + virtual char instruction_size_suffix(AstAsmInstruction *instr) = 0; + virtual char size_suffix_for_operand(Ast *op) = 0; + virtual gbString write_memory_operand(gbString asm_string, Slice const &op_number, AstAsmMemoryOperand *mem_op, u32 flags) = 0; + virtual lbValue emit_call(lbProcedure *p, Array const &args) = 0; + virtual String flag_output_cc_suffix(String const &pin_flag) = 0; + +}; + +struct lbAsmGenerate_amd64 : lbAsmGenerate { + // AT&T operand-size suffix ('b','w','l','q') for an annotated memory operand, + // or 0 if there is no size annotation to apply. Vector/other widths return 0, + // since those forms take no b/w/l/q suffix (the register operand fixes the size). + char size_suffix_for_operand(Ast *op) override { + if (op->kind != Ast_AsmMemoryOperand) { + return 0; + } + AstAsmMemoryOperand *mem_op = &op->AsmMemoryOperand; + if (mem_op->type == nullptr) { + return 0; // unsized: rely on a register operand to fix the width + } + // The frontend stored the access type as a pointer on the node's tav: [p]:u8 -> ^u8. + Type *ptr = mem_op->type->tav.type; + if (ptr == nullptr) { + return 0; + } + Type *access = type_deref(ptr); // ^u8 -> u8 + i64 sz = type_size_of(base_type(access)); + switch (sz) { + case 1: return 'b'; + case 2: return 'w'; + case 4: return 'l'; + case 8: return 'q'; + } + return 0; + } + + + // Scan an instruction's operands for an annotated memory operand and return its + // size suffix, or 0 if none. The checker has already verified the annotation + // agrees with the matched encoding form, so a suffix here can never conflict. + char instruction_size_suffix(AstAsmInstruction *instr) override { + for (Ast *operand : instr->operands) { + char s = this->size_suffix_for_operand(operand); + if (s != 0) { + return s; + } + } + GB_ASSERT(instr->mnemonic != 0); + GB_ASSERT(instr->valid_form_index >= 0); + + auto forms = g_asm_amd64.encoding_forms(instr->mnemonic); + if (forms.count <= 1) { + return 0; + } + auto const &form = forms[instr->valid_form_index]; + + i32 width = 0; + for (auto ot : form.ops) { + if (ot == g_asm_amd64.OP_NONE) { + break; + } + if (g_asm_amd64.operand_type_is_implicit(ot)) { + continue; + } + AsmRegClass cls = g_asm_amd64.operand_type_reg_class(ot); + if (cls == AsmRegClass_Vector || cls == AsmRegClass_Mask) { + // xmm/ymm/zmm/k forms take no b/w/l/q suffix + return 0; + } + + // Only register and memory operands contribute an operand-size suffix. + // Relative branch targets (OP_REL8/REL32), immediates (OP_IMM*), and + // labels are NOT operand sizes -- jl/jmp/call/setcc must never get a + // b/w/l/q suffix from their displacement/immediate. + AsmOperandKind kind = g_asm_amd64.kind_from_operand_type(ot); + if (kind != AsmOperand_Register && + kind != AsmOperand_Memory && + kind != AsmOperand_Register_Or_Memory) { + continue; + } + + i32 w = g_asm_amd64.operand_type_bit_width(ot); + if (w == 8 || w == 16 || w == 32 || w == 64) { + width = gb_max(width, w); // GP/memory width + } + } + + switch (width) { + case 8: return 'b'; + case 16: return 'w'; + case 32: return 'l'; + case 64: return 'q'; + } + // vector op, or nothing that needs a GP-width suffix + return 0; + } + + // Map an EFLAGS flag name to its LLVM `=@cc` setcc condition, or {} if + // the flag has no single-flag setcc form (af/df/if/... can't be a flag output). + String flag_output_cc_suffix(String const &pin_flag) override { + if (pin_flag == "c") return str_lit("c"); // carry + if (pin_flag == "p") return str_lit("p"); // parity (even) + if (pin_flag == "z") return str_lit("z"); // zero + if (pin_flag == "s") return str_lit("s"); // sign + if (pin_flag == "o") return str_lit("o"); // overflow + return {}; + } + + + gbString write_memory_operand(gbString asm_string, Slice const &op_number, AstAsmMemoryOperand *mem_op, u32 flags) override { + if (mem_op->segment_override != nullptr) { + asm_string = this->write_operand(asm_string, op_number, mem_op->segment_override, flags); + asm_string = gb_string_appendc(asm_string, ":"); + } + + if (mem_op->disp) { + u32 disp_flags = flags; + disp_flags &= ~WriteOperandFlag_PrintPrefixes; + if (mem_op->disp_op.kind == Token_Sub) { + disp_flags |= WriteOperandFlag_Negate; + } + + asm_string = this->write_operand(asm_string, op_number, mem_op->disp, disp_flags); + } + if (mem_op->base == nullptr && mem_op->index == nullptr) { + GB_ASSERT(mem_op->scale == nullptr); + return asm_string; + } + asm_string = gb_string_appendc(asm_string, "("); + if (mem_op->base != nullptr) { + asm_string = this->write_operand(asm_string, op_number, mem_op->base, flags); + } + if (mem_op->index) { + u32 index_flags = flags; + if (mem_op->index_op.kind == Token_Sub) { + index_flags |= WriteOperandFlag_Negate; + } + asm_string = gb_string_appendc(asm_string, ","); + asm_string = this->write_operand(asm_string, op_number, mem_op->index, index_flags); + + if (mem_op->scale) { + asm_string = gb_string_appendc(asm_string, ","); + switch (mem_op->scale_op.kind) { + case Token_Mul: + asm_string = this->write_operand(asm_string, op_number, mem_op->scale, (flags|WriteOperandFlag_IsScale)&~WriteOperandFlag_PrintPrefixes); + break; + case Token_Shl: + case Token_Shr: + asm_string = this->write_operand(asm_string, op_number, mem_op->scale, (flags|WriteOperandFlag_IsScaleLog2)&~WriteOperandFlag_PrintPrefixes); + break; + } + } + } + asm_string = gb_string_appendc(asm_string, ")"); + return asm_string; + } + + lbValue emit_call(lbProcedure *p, Array const &args) override { + lbModule *m = p->module; + LLVMContextRef ctx = m->ctx; + + gbString asm_string = gb_string_make_reserve(heap_allocator(), 256); + gbString constraints = gb_string_make_reserve(heap_allocator(), 64); + defer ({ + gb_string_free(constraints); + gb_string_free(asm_string); + }); + + TEMPORARY_ALLOCATOR_GUARD(); + + auto param_types = array_make (temporary_allocator(), 0, ops->count); + auto call_args = array_make(temporary_allocator(), 0, ops->count); + auto ret_types = array_make (temporary_allocator(), 0, ops->count); + + // Per-operand bookkeeping, indexed the same as `ops` (via total_index). + auto op_number = slice_make(temporary_allocator(), ops->count); // $N, or -1 for clobbers/views + auto ret_slot = slice_make(temporary_allocator(), ops->count); // return-struct index, or -1 + for_array(i, *ops) { + op_number[i] = -1; + ret_slot [i] = -1; + } + + // elementtype() attrs to attach after the call is built (indirect/memory operands). + struct ElemAttr { + unsigned arg_pos; + LLVMTypeRef elem; + }; + auto elem_attrs = array_make(temporary_allocator(), 0, ops->count); + + + auto sep = [&]() { + if (gb_string_length(constraints) != 0) { + constraints = gb_string_appendc(constraints, ","); + } + }; + auto raw = [&](char const *s) { + constraints = gb_string_appendc(constraints, s); + }; + auto clobber = [&](char const *start, String mid, char const *end) { + constraints = gb_string_appendc(constraints, start); + constraints = gb_string_append_length(constraints, mid.text, mid.len); + constraints = gb_string_appendc(constraints, end); + }; + + auto add_input_value = [](Array *param_types, Array *call_args, LLVMValueRef v) { + array_add(param_types, LLVMTypeOf(v)); + array_add(call_args, v); + }; + + + i32 next_op = 0; // running $N counter (outputs first, then inputs) + + // Pass 1: outputs + // Real outputs plus *unpinned* register scratch (modeled as discarded + // early-clobber outputs, since a clobber can only name a fixed register). + for_array(i, *ops) { + AsmTemplateEntityDecl const &e = (*ops)[i]; + + if (e.view_of >= 0) { + continue; // width-view: resolved to its source's operand, owns no slot + } + + // Flag output: an output pinned to a condition flag (e.g. `= %flags.zf`). + // Lowers to LLVM's `=@cc`, which yields an i1 (0/1). It takes a + // return-struct slot but is NEVER referenced in the body (the instruction + // sets the flag as a side effect), so it gets no $N operand number. + if (e.param_group == AsmTemplateEntityDeclParamGroup_Output && e.pin_flag.len != 0) { + GB_ASSERT(e.pin == "flags"); + String suffix = this->flag_output_cc_suffix(e.pin_flag); + GB_ASSERT_MSG(suffix.len != 0, "asm: flag '%.*s' has no setcc condition form", LIT(e.pin_flag)); + + sep(); + clobber("={@cc", suffix, "}"); + + ret_slot[i] = cast(i32)ret_types.count; + array_add(&ret_types, LLVMInt8TypeInContext(ctx)); + + // Counted in $N even though never referenced in the body. + op_number[i] = next_op++; + continue; + } + + bool is_output = e.param_group == AsmTemplateEntityDeclParamGroup_Output; + bool is_alloc_scratch = e.param_group == AsmTemplateEntityDeclParamGroup_Scratch + && e.kind == AsmTemplateEntityDecl_Register; + if (!is_output && !is_alloc_scratch) { + continue; + } + + sep(); + + // Register output: '=' ['&'] ( '{pin}' | class-letter ) + raw("="); + if (is_alloc_scratch) { // early-clobber: keep scratch off any input reg + raw("&"); + } + if (e.pin.len != 0) { + clobber("{", e.pin, "}"); + } else { + raw(this->class_letter(e.reg_class)); + } + + // Use the entity's real declared type so the return-struct slot matches + // the constraint's width/class (e.g. <4 x float> for a #simd[4]f32 scratch). + LLVMTypeRef ty = is_alloc_scratch ? lb_type(m, e.entity->type) : this->output_llvm_type(m, e); + + ret_slot[i] = cast(i32)ret_types.count; + array_add(&ret_types, ty); + op_number[i] = next_op++; + } + + // Pass 2: inputs + for_array(i, *ops) { + AsmTemplateEntityDecl const &e = (*ops)[i]; + + if (e.view_of >= 0) { + continue; // width-view: not its own input + } + if (e.param_group != AsmTemplateEntityDeclParamGroup_Input) { + continue; + } + + sep(); + lbValue v = args[e.param_index]; + + if (e.tie >= 0) { + // Tied read-write input: a matching constraint referencing the tied + // output's operand number (e.g. "0"). + i32 n = op_number[e.tie]; + GB_ASSERT(n >= 0); + constraints = gb_string_append_fmt(constraints, "%d", n); + add_input_value(¶m_types, &call_args, v.value); + } else { + switch (e.kind) { + case AsmTemplateEntityDecl_Register: + case AsmTemplateEntityDecl_Memory: + if (e.pin.len != 0) { + clobber("{", e.pin, "}"); + } else { + raw(this->class_letter(e.reg_class)); + } + add_input_value(¶m_types, &call_args, v.value); + break; + case AsmTemplateEntityDecl_Immediate: + raw("i"); // TODO: "n" if a known-constant integer is required + add_input_value(¶m_types, &call_args, v.value); + break; + default: + GB_PANIC("asm: invalid input operand kind"); + } + } + op_number[i] = next_op++; + } + + // Build the template text + for_array(i, tmpl_node->instructions) { + if (i > 0) { + asm_string = gb_string_appendc(asm_string, "\n"); + } + Ast *instr_ = tmpl_node->instructions[i]; + switch (instr_->kind) { + case_ast_node(instr, AsmInstruction, instr_); + asm_string = gb_string_appendc(asm_string, "\t"); + String name = instr->name->Ident.token.string; + asm_string = gb_string_append_length(asm_string, name.text, name.len); + + // If a memory operand carries an explicit size annotation ([p]:u8) and + // no register operand pins the width, the AT&T assembler needs the size + // encoded as a mnemonic suffix (crc32 -> crc32b). The checker has already + // verified the annotation agrees with the matched form, so an emitted + // suffix can never conflict with a register operand's implied width. + if (char suffix = this->instruction_size_suffix(instr)) { + asm_string = gb_string_append_length(asm_string, &suffix, 1); + } + + asm_string = gb_string_appendc(asm_string, " "); + // Intel-source operand order reversed to AT&T (src, ..., dst). + for (isize j = instr->operands.count-1; j >= 0; j -= 1) { + Ast *op = instr->operands[j]; + if (j < instr->operands.count-1) { + asm_string = gb_string_appendc(asm_string, ", "); + } + asm_string = this->write_operand(asm_string, op_number, op, WriteOperandFlag_DEFAULT); + } + case_end; + case_ast_node(label, AsmLabelDecl, instr_); + asm_string = this->write_label(asm_string, &label->name->Ident); + asm_string = gb_string_appendc(asm_string, ":"); + case_end; + case_ast_node(dir, AsmDirective, instr_); + String name = dir->name.string; + if (name == "byte") { + asm_string = gb_string_appendc(asm_string, ".byte "); + isize op_index = 0; + for (auto const &op : dir->operands) { + if (op_index > 0) { + asm_string = gb_string_appendc(asm_string, ", "); + } + ExactValue ev = exact_value_to_integer(op->tav.value); + GB_ASSERT(ev.kind == ExactValue_Integer); + i64 i = exact_value_to_i64(ev); + asm_string = gb_string_append_fmt(asm_string, "%d", cast(int)i); + op_index += 1; + } + } else if (name == "align") { + GB_ASSERT(dir->operands.count == 1); + auto const &op = dir->operands[0]; + ExactValue ev = exact_value_to_integer(op->tav.value); + GB_ASSERT(ev.kind == ExactValue_Integer); + u64 i = exact_value_to_u64(ev); + u64 i_log2 = floor_log2(i); + asm_string = gb_string_appendc(asm_string, ".p2align "); + asm_string = gb_string_append_fmt(asm_string, "%llu", cast(unsigned long long)i_log2); + } else if (name == "skip") { + GB_ASSERT(dir->operands.count == 1); + auto const &op = dir->operands[0]; + ExactValue ev = exact_value_to_integer(op->tav.value); + GB_ASSERT(ev.kind == ExactValue_Integer); + u64 i = exact_value_to_u64(ev); + asm_string = gb_string_appendc(asm_string, ".skip "); + asm_string = gb_string_append_fmt(asm_string, "%llu", cast(unsigned long long)i); + } else if (name == "nop") { + GB_ASSERT(dir->operands.count == 1); + auto const &op = dir->operands[0]; + ExactValue ev = exact_value_to_integer(op->tav.value); + GB_ASSERT(ev.kind == ExactValue_Integer); + u64 i = exact_value_to_u64(ev); + asm_string = gb_string_appendc(asm_string, ".nops "); + asm_string = gb_string_append_fmt(asm_string, "%llu", cast(unsigned long long)i); + } else { + GB_PANIC("Invalid asm directive: %.*s", LIT(name)); + } + case_end; + default: + GB_PANIC("Invalid asm instruction"); + break; + } + } + + bool memory_clobbered_already = false; + // Pass 3: clobbers + // Only the Scratch group. Unpinned register scratch was already emitted as an + // output in Pass 1, so it is skipped here. + StringSet emitted_reg_clobbers = {}; + string_set_init(&emitted_reg_clobbers); + defer (string_set_destroy(&emitted_reg_clobbers)); + + for_array(i, *ops) { + AsmTemplateEntityDecl const &e = (*ops)[i]; + + if (e.view_of >= 0) { + continue; // width-view carries no clobber; its source owns the register + } + if (e.param_group != AsmTemplateEntityDeclParamGroup_Scratch) { + continue; + } + if (e.kind == AsmTemplateEntityDecl_Register && e.pin.len == 0) { + continue; + } + + sep(); + switch (e.kind) { + case AsmTemplateEntityDecl_Register: // pinned -> real clobber + GB_ASSERT(e.pin.len != 0); + clobber("~{", e.pin, "}"); + string_set_update(&emitted_reg_clobbers, e.pin); + break; + case AsmTemplateEntityDecl_Memory: // general memory clobber + raw("~{memory}"); + memory_clobbered_already = true; + break; + default: + GB_PANIC("asm: invalid scratch operand kind"); + } + } + + // Explicit register clobbers from #clobber , deduped against the pinned + // scratch clobbers already emitted above. + for (String const ® : tmpl_entity->AsmTemplate.clobber_registers_set) { + if (string_set_exists(&emitted_reg_clobbers, reg)) { + continue; // already clobbered as a pinned scratch; don't double-emit + } + sep(); + clobber("~{", reg, "}"); + string_set_update(&emitted_reg_clobbers, reg); + } + + // Template-level clobbers derived from #clobber flags / #clobber memory. + if (tmpl_entity->AsmTemplate.clobber_flags) { + sep(); + if (build_context.metrics.arch == TargetArch_amd64) { + // clang's canonical x86 flags clobber + raw("~{dirflag}"); sep(); + raw("~{fpsr}"); sep(); + raw("~{flags}"); + } else { + raw("~{cc}"); // AArch64 uses ~{cc} + } + } + if (tmpl_entity->AsmTemplate.clobber_memory && !memory_clobbered_already) { + sep(); + raw("~{memory}"); + } + + // Build the callee type + // NOTE(bill): Even though the user has given a signature, this might not actually match what + // LLVM requires it to be due to the scratch parameters and more, so many of the results might + // need to be completely ignored to match the user's given signature. + LLVMTypeRef ret_ty = nullptr; + if (ret_types.count == 0) { + ret_ty = LLVMVoidTypeInContext(ctx); + } else if (ret_types.count == 1) { + ret_ty = ret_types[0]; + } else { + ret_ty = LLVMStructTypeInContext(ctx, ret_types.data, cast(unsigned)ret_types.count, /*packed*/false); + } + + LLVMTypeRef fn_ty = LLVMFunctionType(ret_ty, param_types.data, cast(unsigned)param_types.count, /*vararg*/false); + + LLVMValueRef ia = LLVMGetInlineAsm( + fn_ty, + asm_string, cast(size_t)gb_string_length(asm_string), + constraints, cast(size_t)gb_string_length(constraints), + /*HasSideEffects*/ tmpl_entity->AsmTemplate.is_volatile, + /*IsAlignStack*/ tmpl_entity->AsmTemplate.is_align_stack, + LLVMInlineAsmDialectATT, + /*CanThrow*/ false); + + LLVMValueRef call = LLVMBuildCall2(p->builder, fn_ty, ia, call_args.data, cast(unsigned)call_args.count, ""); + + if (LLVM_ASM_DEBUG_PRINT) { + // DEBUG PRINT!!! + // DEBUG PRINT!!! + // DEBUG PRINT!!! + gb_printf_err("%s\n", asm_string); + char *ir = LLVMPrintValueToString(call); + gb_printf_err("%s\n\n", ir); + LLVMDisposeMessage(ir); + } + + // Attach elementtype() to every indirect operand's pointer arg (opaque-pointer requirement). + unsigned et_kind = LLVMGetEnumAttributeKindForName("elementtype", 11); + for (auto const &elem_attr : elem_attrs) { + LLVMAttributeRef attr = LLVMCreateTypeAttribute(ctx, et_kind, elem_attr.elem); + LLVMAddCallSiteAttribute(call, cast(LLVMAttributeIndex)(elem_attr.arg_pos + 1), attr); + } + + // Repackage results in Odin result order + Type *pt = base_type(tmpl_entity->type); + isize result_count = 0; + if (pt->Proc.results != nullptr) { + result_count = pt->Proc.results->Tuple.variables.count; + } + if (result_count == 0) { + return lbValue{}; // void asm (memory outputs already wrote through their pointers) + } + + // The LLVM return struct is ordered by operand and includes scratch slots; + // pull out only the real register outputs and index them by result_index. + auto result_vals = slice_make(temporary_allocator(), result_count); + + for_array(i, *ops) { + AsmTemplateEntityDecl const &e = (*ops)[i]; + if (e.view_of >= 0) { + continue; // width-view: never a returned value + } + if (e.param_group != AsmTemplateEntityDeclParamGroup_Output) { + continue; + } + if (e.result_index < 0) { + continue; // memory output: not a returned value + } + GB_ASSERT(ret_slot[i] >= 0); + + LLVMValueRef v = call; + if (ret_types.count != 1) { + // Not a single-element return but a struct + v = LLVMBuildExtractValue(p->builder, call, cast(unsigned)ret_slot[i], ""); + } + + // A flag output is delivered as i8; coerce it to the declared result type + // (e.g. i1, or a wider bool). zext when widening, trunc when narrowing. + // zext (not sext) is correct: a flag output is 0 or 1. + if (e.pin_flag.len != 0) { + Type *rt = this->result_type_of(e); + LLVMTypeRef want = lb_type(m, rt); + LLVMTypeRef got = LLVMTypeOf(v); + if (want != got) { + unsigned want_w = LLVMGetIntTypeWidth(want); + unsigned got_w = LLVMGetIntTypeWidth(got); + if (want_w < got_w) { + v = LLVMBuildTrunc(p->builder, v, want, ""); + } else if (want_w > got_w) { + v = LLVMBuildZExt(p->builder, v, want, ""); + } + // want_w == got_w with differing type identity: same width, no-op. + } + } + + result_vals[e.result_index] = v; + } + + if (result_count == 1) { + Type *rt = pt->Proc.results->Tuple.variables[0]->type; + return lbValue{result_vals[0], rt}; + } + + // Multiple results -> assemble Odin's result aggregate in result order. + Type *results_type = pt->Proc.results; + LLVMValueRef agg = LLVMGetUndef(lb_type(m, results_type)); + for_array(i, result_vals) { + GB_ASSERT(result_vals[i] != nullptr); + agg = LLVMBuildInsertValue(p->builder, agg, result_vals[i], cast(unsigned)i, ""); + } + + return lbValue{agg, results_type}; + } +}; + + +gb_internal lbValue lb_emit_asm_template_call(lbProcedure *p, Entity *entity, Array const &args) { + lbAsmGenerate *generator = nullptr; + if (build_context.metrics.arch == TargetArch_amd64) { + lbAsmGenerate_amd64 generator_amd64 = {}; + generator = &generator_amd64; + } else { + compiler_error("Architecture does not support asm templates"); + } + GB_ASSERT(generator != nullptr); + generator->init(entity); + return generator->emit_call(p, args); +} \ No newline at end of file diff --git a/src/llvm_backend_expr.cpp b/src/llvm_backend_expr.cpp index abc4cfe47..620850e33 100644 --- a/src/llvm_backend_expr.cpp +++ b/src/llvm_backend_expr.cpp @@ -4798,39 +4798,6 @@ gb_internal lbValue lb_build_expr_internal(lbProcedure *p, Ast *expr) { case_ast_node(ie, MatrixIndexExpr, expr); return lb_addr_load(p, lb_build_addr(p, expr)); case_end; - - case_ast_node(ia, InlineAsmExpr, expr); - Type *t = type_of_expr(expr); - GB_ASSERT(is_type_asm_proc(t)); - - String asm_string = {}; - String constraints_string = {}; - - TypeAndValue tav; - tav = type_and_value_of_expr(ia->asm_string); - GB_ASSERT(is_type_string(tav.type)); - GB_ASSERT(tav.value.kind == ExactValue_String); - asm_string = tav.value.value_string; - - tav = type_and_value_of_expr(ia->constraints_string); - GB_ASSERT(is_type_string(tav.type)); - GB_ASSERT(tav.value.kind == ExactValue_String); - constraints_string = tav.value.value_string; - - - LLVMInlineAsmDialect dialect = LLVMInlineAsmDialectATT; - switch (ia->dialect) { - case InlineAsmDialect_Default: dialect = LLVMInlineAsmDialectATT; break; - case InlineAsmDialect_ATT: dialect = LLVMInlineAsmDialectATT; break; - case InlineAsmDialect_Intel: dialect = LLVMInlineAsmDialectIntel; break; - default: GB_PANIC("Unhandled inline asm dialect"); break; - } - - LLVMTypeRef func_type = lb_type_internal_for_procedures_raw(p->module, t); - LLVMValueRef the_asm = llvm_get_inline_asm(func_type, asm_string, constraints_string, ia->has_side_effects, ia->has_side_effects, dialect); - GB_ASSERT(the_asm != nullptr); - return {the_asm, t}; - case_end; } GB_PANIC("lb_build_expr: %.*s", LIT(ast_strings[expr->kind])); diff --git a/src/llvm_backend_proc.cpp b/src/llvm_backend_proc.cpp index 404620926..4c7a0fb44 100644 --- a/src/llvm_backend_proc.cpp +++ b/src/llvm_backend_proc.cpp @@ -5127,6 +5127,7 @@ gb_internal lbValue lb_build_call_expr_internal(lbProcedure *p, Ast *expr, lbVal // NOTE(bill): Regular call lbValue value = {}; + Entity *asm_template = nullptr; if (proc_entity != nullptr) { if (proc_entity->flags & EntityFlag_Disabled) { @@ -5160,15 +5161,25 @@ gb_internal lbValue lb_build_call_expr_internal(lbProcedure *p, Ast *expr, lbVal } } } + Type *proc_value_type = nullptr; if (is_objc_call) { value.type = proc_tv.type; + proc_value_type = value.type; } else if (value.value == nullptr) { - value = lb_build_expr(p, proc_expr); + Entity *found = entity_of_node(proc_expr); + if (found && found->kind == Entity_AsmTemplate) { + asm_template = found; + proc_value_type = asm_template->type; + } else { + value = lb_build_expr(p, proc_expr); + proc_value_type = value.type; + } } - GB_ASSERT(value.value != nullptr || is_objc_call); - Type *proc_type_ = base_type(value.type); + + GB_ASSERT(value.value != nullptr || is_objc_call || asm_template != nullptr); + Type *proc_type_ = base_type(proc_value_type); GB_ASSERT(proc_type_->kind == Type_Proc); TypeProc *pt = &proc_type_->Proc; @@ -5387,6 +5398,11 @@ gb_internal lbValue lb_build_call_expr_internal(lbProcedure *p, Ast *expr, lbVal } } - return lb_emit_call(p, value, call_args, inlining, tailing, sret_dst); + if (asm_template != nullptr) { + GB_ASSERT(value.value == nullptr); + return lb_emit_asm_template_call(p, asm_template, call_args); + } else { + return lb_emit_call(p, value, call_args, inlining, tailing, sret_dst); + } } diff --git a/src/main.cpp b/src/main.cpp index 7d2f4d713..28b1464cf 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -68,6 +68,8 @@ gb_global Timings global_timings = {0}; #include "parser.hpp" #include "checker.hpp" +#include "asm_tables.cpp" + #include "parser.cpp" #include "checker.cpp" #include "docs.cpp" @@ -4318,6 +4320,9 @@ int main(int arg_count, char const **arg_ptr) { Checker *checker = permanent_alloc_item(); bool failed_to_cache_parsing = false; + TIME_SECTION("init asm tables"); + init_asm_tables(); + MAIN_TIME_SECTION("parse files"); if (!init_parser(parser)) { diff --git a/src/name_canonicalization.cpp b/src/name_canonicalization.cpp index ab9f33d1d..97f10e0f8 100644 --- a/src/name_canonicalization.cpp +++ b/src/name_canonicalization.cpp @@ -573,7 +573,8 @@ gb_internal gbString string_canonical_entity_name(gbAllocator allocator, Entity gb_internal void write_canonical_parent_prefix(TypeWriter *w, Entity *e) { GB_ASSERT(e != nullptr); - if (e->kind == Entity_Procedure || e->kind == Entity_TypeName || e->kind == Entity_Variable) { + if (e->kind == Entity_Procedure || e->kind == Entity_AsmTemplate || + e->kind == Entity_TypeName || e->kind == Entity_Variable) { if (e->kind == Entity_Procedure && (e->Procedure.is_export || e->Procedure.is_foreign)) { // no prefix return; @@ -740,6 +741,7 @@ write_base_name: // For debug symbols only /*fallthrough*/ case Entity_Procedure: + case Entity_AsmTemplate: case Entity_Variable: type_writer_append(w, e->token.string.text, e->token.string.len); if (is_type_polymorphic(e->type)) { diff --git a/src/parser.cpp b/src/parser.cpp index f8d5cb1b8..24e16102a 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -237,6 +237,9 @@ gb_internal Ast *clone_ast(Ast *node, AstFile *f) { case Ast_ProcGroup: n->ProcGroup.args = clone_ast_array(n->ProcGroup.args, f); break; + case Ast_AsmGroup: + n->AsmGroup.args = clone_ast_array(n->AsmGroup.args, f); + break; case Ast_ProcLit: n->ProcLit.type = clone_ast(n->ProcLit.type, f); n->ProcLit.body = clone_ast(n->ProcLit.body, f); @@ -337,13 +340,6 @@ gb_internal Ast *clone_ast(Ast *node, AstFile *f) { n->AutoCast.expr = clone_ast(n->AutoCast.expr, f); break; - case Ast_InlineAsmExpr: - n->InlineAsmExpr.param_types = clone_ast_array(n->InlineAsmExpr.param_types, f); - n->InlineAsmExpr.return_type = clone_ast(n->InlineAsmExpr.return_type, f); - n->InlineAsmExpr.asm_string = clone_ast(n->InlineAsmExpr.asm_string, f); - n->InlineAsmExpr.constraints_string = clone_ast(n->InlineAsmExpr.constraints_string, f); - break; - case Ast_BadStmt: break; case Ast_EmptyStmt: break; case Ast_ExprStmt: @@ -526,8 +522,44 @@ gb_internal Ast *clone_ast(Ast *node, AstFile *f) { n->MatrixType.column_count = clone_ast(n->MatrixType.column_count, f); n->MatrixType.elem = clone_ast(n->MatrixType.elem, f); break; - } + case Ast_AsmTemplate: + n->AsmTemplate.signature = clone_ast(n->AsmTemplate.signature, f); + n->AsmTemplate.specs = clone_ast_array(n->AsmTemplate.specs, f); + n->AsmTemplate.clobbers = clone_ast_array(n->AsmTemplate.clobbers, f); + n->AsmTemplate.instructions = clone_ast_array(n->AsmTemplate.instructions, f); + n->AsmTemplate.anonymous_entity = nullptr; + break; + case Ast_AsmRegister: + break; + case Ast_AsmSpec: + n->AsmSpec.name = clone_ast(n->AsmSpec.name, f); + n->AsmSpec.tied_name = clone_ast(n->AsmSpec.tied_name, f); + n->AsmSpec.type = clone_ast(n->AsmSpec.type, f); + n->AsmSpec.value = clone_ast(n->AsmSpec.value, f); + break; + case Ast_AsmClobber: + n->AsmClobber.value = clone_ast(n->AsmClobber.value, f); + break; + case Ast_AsmLabelDecl: + n->AsmLabelDecl.name = clone_ast(n->AsmLabelDecl.name, f); + break; + case Ast_AsmInstruction: + n->AsmInstruction.name = clone_ast(n->AsmInstruction.name, f); + n->AsmInstruction.operands = clone_ast_array(n->AsmInstruction.operands, f); + break; + case Ast_AsmMemoryOperand: + n->AsmMemoryOperand.segment_override = clone_ast(n->AsmMemoryOperand.segment_override, f); + n->AsmMemoryOperand.base = clone_ast(n->AsmMemoryOperand.base, f); + n->AsmMemoryOperand.index = clone_ast(n->AsmMemoryOperand.index, f); + n->AsmMemoryOperand.scale = clone_ast(n->AsmMemoryOperand.scale, f); + n->AsmMemoryOperand.disp = clone_ast(n->AsmMemoryOperand.disp, f); + n->AsmMemoryOperand.type = clone_ast(n->AsmMemoryOperand.type, f); + break; + case Ast_AsmDirective: + n->AsmDirective.operands = clone_ast_array(n->AsmDirective.operands, f); + break; + } return n; } @@ -819,6 +851,25 @@ gb_internal Ast *ast_uninit(AstFile *f, Token token) { } gb_internal ExactValue exact_value_from_token(AstFile *f, Token const &token) { + auto token_pos_at_offset = [](Token const &token, isize offset) -> TokenPos { + TokenPos pos = token.pos; + if (offset <= 0) { + return pos; + } + String s = token.string; + isize n = gb_min(offset, s.len); + for (isize i = 0; i < n; i++) { + if (s.text[i] == '\n') { + pos.line += 1; + pos.column = 1; + } else { + pos.column += 1; + } + pos.offset += 1; + } + return pos; + }; + String s = token.string; string_interner_insert(s); switch (token.kind) { @@ -828,7 +879,35 @@ gb_internal ExactValue exact_value_from_token(AstFile *f, Token const &token) { } break; case Token_String: - if (!unquote_string(ast_allocator(f), &s, 0, s.text[0] == '`')) { + if (s.len >= 6 && + ((s.text[0] == '"' && s.text[1] == '"' && s.text[2] == '"') || + (s.text[0] == '`' && s.text[1] == '`' && s.text[2] == '`'))) { + TripleStringErrorKind terr = TripleStringError_None; + isize terr_off = -1; + if (!unquote_string_triple(ast_allocator(f), &s, string_contains_char(s, '\r'), &terr, &terr_off)) { + TokenPos pos = token_pos_at_offset(token, terr_off); + switch (terr) { + case TripleStringError_ContentOnOpeningLine: + syntax_error(pos, "A multi-line string literal must begin on the line after the opening delimiter"); + break; + case TripleStringError_ClosingNotOnOwnLine: + syntax_error(pos, "The closing delimiter of a multi-line string literal must be on its own line"); + break; + case TripleStringError_UnderIndented: + syntax_error(pos, "This line is indented less than the closing delimiter of the multi-line string literal"); + break; + case TripleStringError_IndentationMismatch: + syntax_error(pos, "The indentation of this line does not match the closing delimiter of the multi-line string literal"); + break; + case TripleStringError_InvalidEscape: + syntax_error(pos, "Invalid escape sequence in string literal"); + break; + default: + syntax_error(pos, "Invalid multi-line string literal"); + break; + } + } + } else if (!unquote_string(ast_allocator(f), &s, 0, s.text[0] == '`')) { syntax_error(token, "Invalid string literal"); } break; @@ -901,6 +980,15 @@ gb_internal Ast *ast_proc_group(AstFile *f, Token token, Token open, Token close return result; } +gb_internal Ast *ast_asm_group(AstFile *f, Token token, Token open, Token close, Array const &args) { + Ast *result = alloc_ast_node(f, Ast_AsmGroup); + result->AsmGroup.token = token; + result->AsmGroup.open = open; + result->AsmGroup.close = close; + result->AsmGroup.args = slice_from_array(args); + return result; +} + gb_internal Ast *ast_proc_lit(AstFile *f, Ast *type, Ast *body, u64 tags, Token where_token, Array const &where_clauses) { Ast *result = alloc_ast_node(f, Ast_ProcLit); result->ProcLit.type = type; @@ -999,32 +1087,6 @@ gb_internal Ast *ast_auto_cast(AstFile *f, Token token, Ast *expr) { } -gb_internal Ast *ast_inline_asm_expr(AstFile *f, Token token, Token open, Token close, - Array const ¶m_types, - Ast *return_type, - Ast *asm_string, - Ast *constraints_string, - bool has_side_effects, - bool is_align_stack, - InlineAsmDialectKind dialect) { - - Ast *result = alloc_ast_node(f, Ast_InlineAsmExpr); - result->InlineAsmExpr.token = token; - result->InlineAsmExpr.open = open; - result->InlineAsmExpr.close = close; - result->InlineAsmExpr.param_types = slice_from_array(param_types); - result->InlineAsmExpr.return_type = return_type; - result->InlineAsmExpr.asm_string = asm_string; - result->InlineAsmExpr.constraints_string = constraints_string; - result->InlineAsmExpr.has_side_effects = has_side_effects; - result->InlineAsmExpr.is_align_stack = is_align_stack; - result->InlineAsmExpr.dialect = dialect; - return result; -} - - - - gb_internal Ast *ast_bad_stmt(AstFile *f, Token begin, Token end) { Ast *result = alloc_ast_node(f, Ast_BadStmt); result->BadStmt.begin = begin; @@ -1733,7 +1795,7 @@ gb_internal Token expect_operator(AstFile *f) { syntax_error(prev, "'..' for ranges are not allowed, did you mean '..<' or '..='?"); f->tokens[f->curr_token_index].flags |= TokenFlag_Replace; } - + advance_token(f); return prev; } @@ -2385,6 +2447,353 @@ gb_internal void parser_check_polymorphic_record_parameters(AstFile *f, Ast *pol } +gb_internal Ast *parse_asm_register(AstFile *f) { + Token token = expect_token(f, Token_Mod); + Token name = expect_token(f, Token_Ident); + Ast *reg = alloc_ast_node(f, Ast_AsmRegister); + reg->AsmRegister.token = token; + reg->AsmRegister.name = name; + if (allow_token(f, Token_Period)) { + Token flag = expect_token_after(f, Token_Ident, "register name and period for the flag"); + if (flag.kind == Token_Ident) { + reg->AsmRegister.flag = flag; + } + } + return reg; +} +gb_internal Ast *parse_asm_operand(AstFile *f, bool allow_memory_operand) { + switch (f->curr_token.kind) { + case Token_Period: + { + Token token = expect_token(f, Token_Period); + Ast *name = parse_ident(f); + Ast *label_decl = alloc_ast_node(f, Ast_AsmLabelDecl); + label_decl->AsmLabelDecl.token = token; + label_decl->AsmLabelDecl.name = name; + return label_decl; + } + case Token_Ident: + return parse_ident(f); + case Token_Mod: + return parse_asm_register(f); + case Token_Integer: + case Token_Float: + case Token_Rune: + return ast_basic_lit(f, advance_token(f)); + case Token_OpenParen: + return parse_expr(f, false); + case Token_OpenBracket: + if (allow_memory_operand) { + Token open = expect_token(f, Token_OpenBracket); + Ast *segment_override = nullptr; + Ast *base = nullptr; + Ast *index = nullptr; + Ast *scale = nullptr; + Ast *disp = nullptr; + Ast *type = nullptr; + + Token index_op = {}; + Token scale_op = {}; + Token disp_op = {}; + + base = parse_asm_operand(f, false); + + if (allow_token(f, Token_Colon)) { + // [segment: ...] + segment_override = base; + if (segment_override != nullptr && + segment_override->kind != Ast_AsmRegister) { + error(segment_override, "Expected an asm register as the segment override"); + } + base = parse_asm_operand(f, false); + } + + // [base] + // [base + index] + // [base - index] + // [base + index + disp] + // [base + index*scale] // *, <<, >> + // [base + index*scale + disp] + if (allow_token(f, Token_Add) || + allow_token(f, Token_Sub)) { + index_op = f->prev_token; + index = parse_asm_operand(f, false); + if (allow_token(f, Token_Mul) || + allow_token(f, Token_Shl) || + allow_token(f, Token_Shr)) { + scale_op = f->prev_token; + scale = parse_asm_operand(f, false); + } + if (allow_token(f, Token_Add) || + allow_token(f, Token_Sub)) { + disp_op = f->prev_token; + disp = parse_asm_operand(f, false); + } + } + + Token close = expect_token(f, Token_CloseBracket); + + // [...]:type + if (allow_token(f, Token_Colon)) { + type = parse_type(f); + } + + Ast *mem = alloc_ast_node(f, Ast_AsmMemoryOperand); + mem->AsmMemoryOperand.open = open; + mem->AsmMemoryOperand.segment_override = segment_override; + mem->AsmMemoryOperand.base = base; + mem->AsmMemoryOperand.index_op = index_op; + mem->AsmMemoryOperand.index = index; + mem->AsmMemoryOperand.scale_op = scale_op; + mem->AsmMemoryOperand.scale = scale; + mem->AsmMemoryOperand.disp_op = disp_op; + mem->AsmMemoryOperand.disp = disp; + mem->AsmMemoryOperand.close = close; + mem->AsmMemoryOperand.type = type; + + return mem; + } + break; + } + + syntax_error(f->curr_token, "Invalid asm operand, found '%.*s'", LIT(f->curr_token.string)); + advance_token(f); + return nullptr; +} + +gb_internal Slice parse_asm_operands(AstFile *f) { + Array operands = {}; + operands.allocator = heap_allocator(); + + while (f->curr_token.kind != Token_Semicolon && + f->curr_token.kind != Token_EOF) { + Ast *operand = parse_asm_operand(f, true); + if (operand != nullptr) { + array_add(&operands, operand); + } + if (!allow_token(f, Token_Comma)) { + break; + } + } + + if (allow_token(f, Token_Semicolon)) { + // okay + } + + return slice_from_array(operands); +} + +gb_internal Ast *parse_asm_instruction(AstFile *f) { + if (allow_token(f, Token_Semicolon)) { + return nullptr; + } + switch (f->curr_token.kind) { + default: + if (!token_is_keyword(f->curr_token.kind)) { + break; + } + /*fallthrough*/ + case Token_Ident: + { + Ast *name = parse_ident(f); + auto operands = parse_asm_operands(f); + Ast *instruction = alloc_ast_node(f, Ast_AsmInstruction); + instruction->AsmInstruction.name = name; + instruction->AsmInstruction.operands = operands; + instruction->AsmInstruction.valid_form_index = -1; + return instruction; + } + case Token_Period: + { + Token token = expect_token(f, Token_Period); + Ast *name = parse_ident(f); + expect_token(f, Token_Colon); + Ast *label_decl = alloc_ast_node(f, Ast_AsmLabelDecl); + label_decl->AsmLabelDecl.token = token; + label_decl->AsmLabelDecl.name = name; + return label_decl; + } + case Token_Hash: + { + Token token = expect_token(f, Token_Hash); + Token name = expect_token(f, Token_Ident); + auto operands = parse_asm_operands(f); + Ast *dir = alloc_ast_node(f, Ast_AsmDirective); + dir->AsmDirective.token = token; + dir->AsmDirective.name = name; + dir->AsmDirective.operands = operands; + return dir; + } + } + syntax_error(f->curr_token, "Expected an asm instruction, got '%.*s'", LIT(f->curr_token.string)); + advance_token(f); + return nullptr; +} + +gb_internal Ast *parse_results(AstFile *f, bool *diverging); +gb_internal bool is_field_list_generic(AstFieldList *field_list, bool check_names); +gb_internal Ast *parse_asm_signature(AstFile *f, Token asm_token) { + Ast *params = nullptr; + Ast *results = nullptr; + bool diverging = false; + + ProcCallingConvention cc = ProcCC_InlineAsm; + + expect_token(f, Token_OpenParen); + f->expr_level += 1; + params = parse_field_list(f, nullptr, FieldFlag_Signature, Token_CloseParen, false, true); + if (file_allow_newline(f)) { + skip_possible_newline(f); + } + f->expr_level -= 1; + expect_token_after(f, Token_CloseParen, "asm template parameter list"); + results = parse_results(f, &diverging); + + u64 tags = 0; + bool is_generic = is_field_list_generic(¶ms->FieldList, true); + if (!is_generic && (results != nullptr)) { + is_generic = is_field_list_generic(&results->FieldList, false); + } + + return ast_proc_type(f, asm_token, params, results, tags, cc, is_generic, diverging); +} + +gb_internal Ast *parse_asm_template(AstFile *f) { + Token token = expect_token(f, Token_asm); + + Ast *signature = parse_asm_signature(f, token); + + Slice asm_specs = {}; + Slice asm_clobbers = {}; + + if (file_allow_newline(f)) { + skip_possible_newline(f); + } + + if (f->curr_token.kind == Token_OpenBracket) { + Array specs = {}; + specs.allocator = heap_allocator(); + + Array clobbers = {}; + clobbers.allocator = heap_allocator(); + + Token open = expect_token(f, Token_OpenBracket); + while (f->curr_token.kind != Token_CloseBracket && + f->curr_token.kind != Token_EOF) { + Ast *spec = nullptr; + if (f->curr_token.kind == Token_Ident) { + Ast *name = parse_ident(f); + Ast *tied_name = nullptr; + Ast *type = nullptr; + Ast *value = nullptr; + if (allow_token(f, Token_ArrowRight)) { + tied_name = parse_ident(f); + } + if (allow_token(f, Token_Colon)) { + type = parse_type(f); + } + if (allow_token(f, Token_Eq)) { + if (f->curr_token.kind == Token_Ident) { + value = parse_ident(f); + } else if (f->curr_token.kind == Token_Mod) { + value = parse_asm_register(f); + } else { + error(f->curr_token, "Expected a register or scratch parameter"); + Ast *dummy = parse_expr(f, true); + gb_unused(dummy); + } + } + + if (tied_name != nullptr) { + if (type != nullptr) { + syntax_error(f->curr_token, "An asm specification for tied values cannot declare a type"); + } + } else if (type == nullptr && value == nullptr) { + syntax_error(f->curr_token, "An asm specification must specify at least either a type or a value if the value is not tied"); + } + + spec = alloc_ast_node(f, Ast_AsmSpec); + spec->AsmSpec.name = name; + spec->AsmSpec.tied_name = tied_name; + spec->AsmSpec.type = type; + spec->AsmSpec.value = value; + } else if (f->curr_token.kind == Token_Hash) { + Token hash = expect_token(f, Token_Hash); + Token name = expect_token(f, Token_Ident); + + if (name.string == "volatile" || + name.string == "align_stack") { + Ast *clobber = alloc_ast_node(f, Ast_AsmClobber); + clobber->AsmClobber.token = hash; + clobber->AsmClobber.name = name; + array_add(&clobbers, clobber); + } else if (name.string == "clobber") { + Ast *value = parse_asm_operand(f, false); + Ast *clobber = alloc_ast_node(f, Ast_AsmClobber); + clobber->AsmClobber.token = hash; + clobber->AsmClobber.name = name; + clobber->AsmClobber.value = value; + array_add(&clobbers, clobber); + } else { + syntax_error(name, "Expected #clobber, #side_effects, or #align_stack, got '%.*s'", LIT(name.string)); + } + } else { + syntax_error(f->curr_token, "Expected am asm specification which begins with a identifier, got '%.*s'", LIT(f->curr_token.string)); + advance_token(f); + } + if (spec != nullptr) { + array_add(&specs, spec); + } + if (!allow_token(f, Token_Comma)) { + break; + } + } + Token close = expect_token(f, Token_CloseBracket); + if (file_allow_newline(f)) { + skip_possible_newline(f); + } + + asm_specs = slice_from_array(specs); + asm_clobbers = slice_from_array(clobbers); + } + + Slice asm_instructions = {}; + + if (!allow_token(f, Token_OpenBrace)) { + syntax_error(f->curr_token, "Expected a body for an asm template"); + advance_token(f); + } else { + Array instructions = {}; + instructions.allocator = heap_allocator(); + + while (f->curr_token.kind != Token_CloseBrace && + f->curr_token.kind != Token_EOF) { + Ast *instruction = parse_asm_instruction(f); + if (instruction != nullptr) { + array_add(&instructions, instruction); + } + } + + Token close = expect_token(f, Token_CloseBrace); + + asm_instructions = slice_from_array(instructions); + } + + if (build_context.metrics.arch != TargetArch_amd64) { + syntax_error(token, "asm templates are currently only supported on -target:amd64"); + } + + Ast *asm_template = alloc_ast_node(f, Ast_AsmTemplate); + asm_template->AsmTemplate.token = token; + asm_template->AsmTemplate.signature = signature; + asm_template->AsmTemplate.specs = asm_specs; + asm_template->AsmTemplate.clobbers = asm_clobbers; + asm_template->AsmTemplate.instructions = asm_instructions; + asm_template->AsmTemplate.end = f->prev_token; + return asm_template; +} + + gb_internal Ast *parse_operand(AstFile *f, bool lhs) { Ast *operand = nullptr; // Operand switch (f->curr_token.kind) { @@ -3111,83 +3520,38 @@ gb_internal Ast *parse_operand(AstFile *f, bool lhs) { return ast_bit_set_type(f, token, elem, underlying); } - case Token_asm: { - Token token = expect_token(f, Token_asm); + case Token_asm: + if (peek_token(f).kind == Token_OpenBrace) { // asm group + Token token = expect_token(f, Token_asm); + Token open = expect_token(f, Token_OpenBrace); - Array param_types = {}; - Ast *return_type = nullptr; - if (allow_token(f, Token_OpenParen)) { - param_types = array_make(ast_allocator(f)); - while (f->curr_token.kind != Token_CloseParen && f->curr_token.kind != Token_EOF) { - Ast *t = parse_type(f); - array_add(¶m_types, t); - if (f->curr_token.kind != Token_Comma || - f->curr_token.kind == Token_EOF) { - break; + auto args = array_make(ast_allocator(f)); + + while (f->curr_token.kind != Token_CloseBrace && + f->curr_token.kind != Token_EOF) { + Ast *elem = parse_expr(f, false); + + if (f->curr_token.kind == Token_where) { + Token where = expect_token(f, Token_where); + Ast *cond = parse_expr(f, false); + elem = ast_binary_expr(f, where, elem, cond); } - advance_token(f); - } - expect_token(f, Token_CloseParen); - if (allow_token(f, Token_ArrowRight)) { - return_type = parse_type(f); - } - } - - bool has_side_effects = false; - bool is_align_stack = false; - InlineAsmDialectKind dialect = InlineAsmDialect_Default; - - while (f->curr_token.kind == Token_Hash) { - advance_token(f); - if (f->curr_token.kind == Token_Ident) { - Token token = advance_token(f); - String name = token.string; - if (name == "side_effects") { - if (has_side_effects) { - syntax_error(token, "Duplicate directive on inline asm expression: '#side_effects'"); - } - has_side_effects = true; - } else if (name == "align_stack") { - if (is_align_stack) { - syntax_error(token, "Duplicate directive on inline asm expression: '#align_stack'"); - } - is_align_stack = true; - } else if (name == "att") { - if (dialect == InlineAsmDialect_ATT) { - syntax_error(token, "Duplicate directive on inline asm expression: '#att'"); - } else if (dialect != InlineAsmDialect_Default) { - syntax_error(token, "Conflicting asm dialects"); - } else { - dialect = InlineAsmDialect_ATT; - } - } else if (name == "intel") { - if (dialect == InlineAsmDialect_Intel) { - syntax_error(token, "Duplicate directive on inline asm expression: '#intel'"); - } else if (dialect != InlineAsmDialect_Default) { - syntax_error(token, "Conflicting asm dialects"); - } else { - dialect = InlineAsmDialect_Intel; - } - } else { - syntax_error(token, "Invalid directive on inline asm expression: '#%.*s'", LIT(token.string)); + array_add(&args, elem); + if (!allow_field_separator(f)) { + break; } - } else { - syntax_error(f->curr_token, "Expected an identifier after hash"); } + + Token close = expect_token(f, Token_CloseBrace); + + if (args.count == 0) { + syntax_error(token, "Expected a least 1 argument in a procedure group"); + } + + return ast_asm_group(f, token, open, close, args); } - - skip_possible_newline_for_literal(f); - Token open = expect_token(f, Token_OpenBrace); - Ast *asm_string = parse_expr(f, false); - expect_token(f, Token_Comma); - Ast *constraints_string = parse_expr(f, false); - allow_token(f, Token_Comma); - Token close = expect_closing_brace_of_field_list(f); - - return ast_inline_asm_expr(f, token, open, close, param_types, return_type, asm_string, constraints_string, has_side_effects, is_align_stack, dialect); - } - + return parse_asm_template(f); } return nullptr; diff --git a/src/parser.hpp b/src/parser.hpp index e423cb9b2..4779e09a8 100644 --- a/src/parser.hpp +++ b/src/parser.hpp @@ -451,6 +451,12 @@ struct AstSplitArgs { Token close; \ Slice args; \ }) \ + AST_KIND(AsmGroup, "asm group", struct { \ + Token token; \ + Token open; \ + Token close; \ + Slice args; \ + }) \ AST_KIND(ProcLit, "procedure literal", struct { \ Ast *type; \ Ast *body; \ @@ -468,6 +474,59 @@ struct AstSplitArgs { i64 max_count; \ Ast *tag; \ }) \ + AST_KIND(AsmTemplate, "asm template", struct { \ + Token token; \ + Ast * signature; \ + Slice specs; \ + Slice clobbers; \ + Slice instructions; \ + Token end; \ + Entity * anonymous_entity; \ + }) \ + AST_KIND(AsmRegister, "asm register", struct { \ + Token token; \ + Token name; \ + Token flag; \ + }) \ + AST_KIND(AsmSpec, "asm specification", struct { \ + Ast *name; \ + Ast *tied_name; \ + Ast *type; \ + Ast *value; \ + }) \ + AST_KIND(AsmClobber, "asm clobber", struct { \ + Token token; \ + Token name; \ + Ast * value; \ + }) \ + AST_KIND(AsmLabelDecl, "asm label declaration", struct { \ + Token token; \ + Ast * name; \ + }) \ + AST_KIND(AsmInstruction, "asm instruction", struct { \ + Ast * name; \ + Slice operands; \ + u16 mnemonic; \ + i32 valid_form_index; \ + }) \ + AST_KIND(AsmMemoryOperand, "asm memory operand", struct { \ + Token open; \ + Ast * segment_override; \ + Ast * base; \ + Token index_op; \ + Ast * index; \ + Token scale_op; \ + Ast * scale; \ + Token disp_op; \ + Ast * disp; \ + Ast * type; \ + Token close; \ + }) \ + AST_KIND(AsmDirective, "asm directive", struct { \ + Token token; \ + Token name; \ + Slice operands; \ + }) \ AST_KIND(_ExprBegin, "", bool) \ AST_KIND(BadExpr, "bad expression", struct { Token begin, end; }) \ AST_KIND(TagExpr, "tag expression", struct { Token token, name; Ast *expr; }) \ @@ -529,17 +588,6 @@ AST_KIND(_ExprBegin, "", bool) \ }) \ AST_KIND(TypeCast, "type cast", struct { Token token; Ast *type, *expr; }) \ AST_KIND(AutoCast, "auto_cast", struct { Token token; Ast *expr; }) \ - AST_KIND(InlineAsmExpr, "inline asm expression", struct { \ - Token token; \ - Token open, close; \ - Slice param_types; \ - Ast *return_type; \ - Ast *asm_string; \ - Ast *constraints_string; \ - bool has_side_effects; \ - bool is_align_stack; \ - InlineAsmDialectKind dialect; \ - }) \ AST_KIND(MatrixIndexExpr, "matrix index expression", struct { Ast *expr, *row_index, *column_index; Token open, close; }) \ AST_KIND(_ExprEnd, "", bool) \ AST_KIND(_StmtBegin, "", bool) \ diff --git a/src/parser_pos.cpp b/src/parser_pos.cpp index 1d2b5090a..70ba92728 100644 --- a/src/parser_pos.cpp +++ b/src/parser_pos.cpp @@ -6,6 +6,7 @@ gb_internal Token ast_token(Ast *node) { case Ast_BasicLit: return node->BasicLit.token; case Ast_BasicDirective: return node->BasicDirective.token; case Ast_ProcGroup: return node->ProcGroup.token; + case Ast_AsmGroup: return node->AsmGroup.token; case Ast_ProcLit: return ast_token(node->ProcLit.type); case Ast_CompoundLit: if (node->CompoundLit.type != nullptr) { @@ -13,6 +14,23 @@ gb_internal Token ast_token(Ast *node) { } return node->CompoundLit.open; + case Ast_AsmTemplate: + return node->AsmTemplate.token; + case Ast_AsmRegister: + return node->AsmRegister.token; + case Ast_AsmSpec: + return ast_token(node->AsmSpec.name); + case Ast_AsmClobber: + return node->AsmClobber.token; + case Ast_AsmLabelDecl: + return node->AsmLabelDecl.token; + case Ast_AsmInstruction: + return ast_token(node->AsmInstruction.name); + case Ast_AsmMemoryOperand: + return node->AsmMemoryOperand.open; + case Ast_AsmDirective: + return node->AsmDirective.token; + case Ast_TagExpr: return node->TagExpr.token; case Ast_BadExpr: return node->BadExpr.begin; case Ast_UnaryExpr: return node->UnaryExpr.op; @@ -56,7 +74,6 @@ gb_internal Token ast_token(Ast *node) { case Ast_TypeAssertion: return ast_token(node->TypeAssertion.expr); case Ast_TypeCast: return node->TypeCast.token; case Ast_AutoCast: return node->AutoCast.token; - case Ast_InlineAsmExpr: return node->InlineAsmExpr.token; case Ast_BadStmt: return node->BadStmt.begin; case Ast_EmptyStmt: return node->EmptyStmt.token; @@ -148,6 +165,7 @@ Token ast_end_token(Ast *node) { case Ast_BasicLit: return node->BasicLit.token; case Ast_BasicDirective: return node->BasicDirective.token; case Ast_ProcGroup: return node->ProcGroup.close; + case Ast_AsmGroup: return node->AsmGroup.close; case Ast_ProcLit: if (node->ProcLit.body) { return ast_end_token(node->ProcLit.body); @@ -156,6 +174,44 @@ Token ast_end_token(Ast *node) { case Ast_CompoundLit: return node->CompoundLit.close; + case Ast_AsmTemplate: + return node->AsmTemplate.end; + case Ast_AsmRegister: + return node->AsmRegister.name; + case Ast_AsmSpec: + if (node->AsmSpec.value) { + return ast_end_token(node->AsmSpec.value); + } + if (node->AsmSpec.type) { + return ast_end_token(node->AsmSpec.type); + } + if (node->AsmSpec.tied_name) { + return ast_end_token(node->AsmSpec.tied_name); + } + return ast_end_token(node->AsmSpec.name); + case Ast_AsmClobber: + if (node->AsmClobber.value) { + return ast_end_token(node->AsmClobber.value); + } + return node->AsmClobber.name; + case Ast_AsmLabelDecl: + return ast_end_token(node->AsmLabelDecl.name); + case Ast_AsmInstruction: + if (node->AsmInstruction.operands.count > 0) { + return ast_end_token(node->AsmInstruction.operands[node->AsmInstruction.operands.count-1]); + } + return ast_end_token(node->AsmInstruction.name); + case Ast_AsmDirective: + if (node->AsmDirective.operands.count > 0) { + return ast_end_token(node->AsmDirective.operands[node->AsmDirective.operands.count-1]); + } + return node->AsmDirective.name; + case Ast_AsmMemoryOperand: + if (node->AsmMemoryOperand.type) { + return ast_end_token(node->AsmMemoryOperand.type); + } + return node->AsmMemoryOperand.close; + case Ast_BadExpr: return node->BadExpr.end; case Ast_TagExpr: if (node->TagExpr.expr) { @@ -206,7 +262,6 @@ Token ast_end_token(Ast *node) { case Ast_TypeAssertion: return ast_end_token(node->TypeAssertion.type); case Ast_TypeCast: return ast_end_token(node->TypeCast.expr); case Ast_AutoCast: return ast_end_token(node->AutoCast.expr); - case Ast_InlineAsmExpr: return node->InlineAsmExpr.close; case Ast_BadStmt: return node->BadStmt.end; case Ast_EmptyStmt: return node->EmptyStmt.token; diff --git a/src/string.cpp b/src/string.cpp index 199aa017f..76d03d55f 100644 --- a/src/string.cpp +++ b/src/string.cpp @@ -1233,6 +1233,291 @@ gb_internal i32 unquote_string(gbAllocator a, String *s_, u8 quote=0, bool has_c return 2; } +// Escape-process the already-delimiter-stripped body of a triple-quoted +// string. `force_new` is true when `s` already points at a freshly allocated +// buffer, so the "no escapes" fast path still reports a new allocation. +// +// 0 == failure +// 1 == original memory +// 2 == new allocation +gb_internal i32 unquote_string_triple_content(gbAllocator a, String *s_, String s, bool has_carriage_return, bool force_new) { + if (!string_contains_char(s, '\\')) { + if (has_carriage_return) { + *s_ = strip_carriage_return(a, s); + return 2; + } + *s_ = s; + return force_new ? 2 : 1; + } + if (has_carriage_return) { + s = strip_carriage_return(a, s); + } + u8 rune_temp[4] = {}; + isize buf_len = 3*s.len / 2 + 1; + u8 *buf = gb_alloc_array(a, u8, buf_len); + isize offset = 0; + while (s.len > 0) { + String tail_string = {}; + Rune r = 0; + bool multiple_bytes = false; + // NOTE: quote==0 makes unquote_char treat `"` as an ordinary byte + // (it only rejects a bare quote when quote is '"' or '\''), while + // `\\` escapes — including `\"` — are still handled. + bool success = unquote_char(s, 0, &r, &multiple_bytes, &tail_string); + if (!success) { + gb_free(a, buf); + return 0; + } + s = tail_string; + if (r < 0x80 || !multiple_bytes) { + buf[offset++] = cast(u8)r; + } else { + isize size = gb_utf8_encode_rune(rune_temp, r); + gb_memmove(buf+offset, rune_temp, size); + offset += size; + } + } + *s_ = make_string(buf, offset); + return 2; +} + +gb_internal bool triple_string_deindent(gbAllocator a, String body, String *out) { + // Opening delimiter's line (up to the first newline) must be blank. + isize first_nl = 0; + while (body.text[first_nl] != '\n') { + first_nl += 1; + } + for (isize i = 0; i < first_nl; i++) { + u8 c = body.text[i]; + if (c != ' ' && c != '\t' && c != '\r') { + return false; + } + } + + // Closing delimiter's line: whitespace after the final newline is the + // indentation prefix removed from each content line. + isize last_nl = body.len - 1; + while (body.text[last_nl] != '\n') { + last_nl -= 1; + } + String indent = make_string(body.text+last_nl+1, body.len-(last_nl+1)); + for (isize i = 0; i < indent.len; i++) { + u8 c = indent.text[i]; + if (c != ' ' && c != '\t') { + return false; + } + } + + String content = make_string(body.text+first_nl+1, last_nl-(first_nl+1)); + + u8 *dbuf = gb_alloc_array(a, u8, content.len+1); + isize dlen = 0; + isize li = 0; + for (;;) { + isize le = li; + while (le < content.len && content.text[le] != '\n') { + le += 1; + } + isize len = le - li; + if (len > 0 && content.text[li+len-1] == '\r') { + len -= 1; // normalize CRLF line endings + } + + bool blank = true; + for (isize k = 0; k < len; k++) { + u8 c = content.text[li+k]; + if (c != ' ' && c != '\t') { + blank = false; + break; + } + } + if (blank) { + // A whitespace-only line contributes an empty line. + } else { + if (len < indent.len) { + gb_free(a, dbuf); + return false; // content line is less indented than the closing delimiter + } + for (isize k = 0; k < indent.len; k++) { + if (content.text[li+k] != indent.text[k]) { + gb_free(a, dbuf); + return false; // indentation whitespace does not match + } + } + for (isize k = indent.len; k < len; k++) { + dbuf[dlen++] = content.text[li+k]; + } + } + + if (le >= content.len) { + break; + } + dbuf[dlen++] = '\n'; + li = le + 1; + } + + *out = make_string(dbuf, dlen); + return true; +} + + +enum TripleStringErrorKind { + TripleStringError_None = 0, + TripleStringError_InvalidLiteral, // malformed delimiters (shouldn't occur for a real token) + TripleStringError_ContentOnOpeningLine, // text after the opening delimiter on its own line + TripleStringError_ClosingNotOnOwnLine, // closing delimiter is not alone on its line + TripleStringError_UnderIndented, // a content line is indented less than the closing delimiter + TripleStringError_IndentationMismatch, // a line's indentation whitespace differs from the closing delimiter + TripleStringError_InvalidEscape, // bad escape sequence (only reachable for `"""` strings) +}; + +// `out_err` receives the failure reason and `out_err_offset` a byte offset into +// the *token string* (i.e. into *s_ on entry) pointing at the offending +// character, or -1 when no precise location is available. Both are only +// meaningful when the function returns 0. +// +// 0 == failure +// 1 == original memory +// 2 == new allocation +gb_internal i32 unquote_string_triple(gbAllocator a, String *s_, bool has_carriage_return=false, + TripleStringErrorKind *out_err=nullptr, isize *out_err_offset=nullptr) { + if (out_err) *out_err = TripleStringError_None; + if (out_err_offset) *out_err_offset = -1; + + #define TRIPLE_FAIL(kind, off) do { \ + if (out_err) *out_err = (kind); \ + if (out_err_offset) *out_err_offset = (off); \ + return 0; \ + } while (0) + + String s = *s_; + isize n = s.len; + if (n < 6) { + TRIPLE_FAIL(TripleStringError_InvalidLiteral, 0); + } + u8 quote = s[0]; + if (quote != '"' && quote != '`') { + TRIPLE_FAIL(TripleStringError_InvalidLiteral, 0); + } + if (!(s[0] == quote && s[1] == quote && s[2] == quote) || + !(s[n-1] == quote && s[n-2] == quote && s[n-3] == quote)) { + TRIPLE_FAIL(TripleStringError_InvalidLiteral, 0); + } + + bool raw = (quote == '`'); + String body = make_string(s.text+3, s.len-6); // body begins at token offset 3 + + // Single-line form: no indentation handling + if (!string_contains_char(body, '\n')) { + if (raw) { + if (has_carriage_return) { + *s_ = strip_carriage_return(a, body); + return 2; + } + *s_ = body; + return 1; + } + i32 r = unquote_string_triple_content(a, s_, body, has_carriage_return, false); + if (r == 0) { + TRIPLE_FAIL(TripleStringError_InvalidEscape, -1); + } + return r; + } + + // Opening delimiter's line must be whitespace only. + isize first_nl = 0; + while (body.text[first_nl] != '\n') { + first_nl += 1; + } + for (isize i = 0; i < first_nl; i++) { + u8 c = body.text[i]; + if (c != ' ' && c != '\t' && c != '\r') { + TRIPLE_FAIL(TripleStringError_ContentOnOpeningLine, 3 + i); + } + } + + // Closing delimiter's line: whitespace after the final newline is the indent prefix. + isize last_nl = body.len - 1; + while (body.text[last_nl] != '\n') { + last_nl -= 1; + } + String indent = make_string(body.text+last_nl+1, body.len-(last_nl+1)); + for (isize i = 0; i < indent.len; i++) { + u8 c = indent.text[i]; + if (c != ' ' && c != '\t') { + TRIPLE_FAIL(TripleStringError_ClosingNotOnOwnLine, 3 + (last_nl+1) + i); + } + } + + String content = make_string(body.text+first_nl+1, last_nl-(first_nl+1)); + isize content_base = 3 + (first_nl+1); // token offset of the content start + + u8 *dbuf = gb_alloc_array(a, u8, content.len+1); + isize dlen = 0; + isize li = 0; + for (;;) { + isize le = li; + while (le < content.len && content.text[le] != '\n') { + le += 1; + } + isize len = le - li; + if (len > 0 && content.text[li+len-1] == '\r') { + len -= 1; // normalize CRLF + } + + bool blank = true; + for (isize k = 0; k < len; k++) { + u8 c = content.text[li+k]; + if (c != ' ' && c != '\t') { + blank = false; + break; + } + } + if (!blank) { + isize ws = 0; + while (ws < len && (content.text[li+ws] == ' ' || content.text[li+ws] == '\t')) { + ws += 1; + } + isize ws_end_off = content_base + li + ws; + + for (isize k = 0; k < indent.len; k++) { + if (k >= len || content.text[li+k] != indent.text[k]) { + u8 lc = 0; + if (k < len) { + lc = content.text[li+k]; + } + gb_free(a, dbuf); + + if (k < len && (lc == ' ' || lc == '\t')) { + TRIPLE_FAIL(TripleStringError_IndentationMismatch, ws_end_off); + } + TRIPLE_FAIL(TripleStringError_UnderIndented, ws_end_off); + } + } + for (isize k = indent.len; k < len; k++) { + dbuf[dlen++] = content.text[li+k]; + } + } + if (le >= content.len) { + break; + } + dbuf[dlen++] = '\n'; + li = le + 1; + } + + String di = make_string(dbuf, dlen); + if (raw) { + *s_ = di; + return 2; + } + i32 r = unquote_string_triple_content(a, s_, di, false, true); + if (r == 0) { + TRIPLE_FAIL(TripleStringError_InvalidEscape, -1); + } + return r; + + #undef TRIPLE_FAIL +} gb_internal bool string_is_valid_identifier(String str) { diff --git a/src/tokenizer.cpp b/src/tokenizer.cpp index f505b142e..84d4d3041 100644 --- a/src/tokenizer.cpp +++ b/src/tokenizer.cpp @@ -793,6 +793,32 @@ gb_internal void tokenizer_get_token(Tokenizer *t, Token *token, int repeat=0) { Rune quote = curr_rune; token->kind = Token_String; if (curr_rune == '"') { + // NOTE(bill): Python-style triple-quoted string literal `"""..."""`. + if (t->curr_rune == '"' && peek_byte(t, 0) == '"') { + advance_to_next_rune(t); // consume the second opening `"` + advance_to_next_rune(t); // consume the third opening `"` + for (;;) { + Rune r = t->curr_rune; + if (r < 0) { + tokenizer_err(t, "Triple-quote multi-line string literal not terminated"); + break; + } + advance_to_next_rune(t); + // A closing `"""` is three consecutive quotes: `r` plus the + // next two runes. `t->curr_rune` is now the second quote and + // `peek_byte(t, 0)` is the third. + if (r == quote && t->curr_rune == '"' && peek_byte(t, 0) == '"') { + advance_to_next_rune(t); // consume the second closing `"` + advance_to_next_rune(t); // consume the third closing `"` + break; + } + if (r == '\\') { + scan_escape(t); + } + } + token->string.len = t->curr - token->string.text; + goto semicolon_check; + } for (;;) { Rune r = t->curr_rune; if (r == '\n' || r < 0) { @@ -808,6 +834,25 @@ gb_internal void tokenizer_get_token(Tokenizer *t, Token *token, int repeat=0) { } } } else { + if (t->curr_rune == '`' && peek_byte(t, 0) == '`') { + advance_to_next_rune(t); // consume the second opening ``` + advance_to_next_rune(t); // consume the third opening ``` + for (;;) { + Rune r = t->curr_rune; + if (r < 0) { + tokenizer_err(t, "Triple-quote multi-line string literal not terminated"); + break; + } + advance_to_next_rune(t); + if (r == quote && t->curr_rune == '`' && peek_byte(t, 0) == '`') { + advance_to_next_rune(t); // consume the second closing ``` + advance_to_next_rune(t); // consume the third closing ``` + break; + } + } + token->string.len = t->curr - token->string.text; + goto semicolon_check; + } for (;;) { Rune r = t->curr_rune; if (r < 0) {