// Copyright 2023 the Strata authors
// SPDX-License-Identifier: GPL-3.0-or-later

use crate::{
	enum_table,
	state::StrataComp,
	workspaces::FocusTarget,
};
use bitflags::bitflags;
use smithay::{
	backend::input::{
		AbsolutePositionEvent,
		Axis,
		AxisSource,
		Event,
		InputBackend,
		PointerAxisEvent,
		PointerButtonEvent,
		PointerMotionEvent,
	},
	input::{
		keyboard::{
			Keysym,
			ModifiersState,
		},
		pointer::{
			AxisFrame,
			ButtonEvent,
			MotionEvent,
			RelativeMotionEvent,
		},
	},
	utils::SERIAL_COUNTER,
};

#[derive(Debug)]
pub struct Mods {
	pub flags: ModFlags,
	pub state: ModifiersState,
}

// complete list, for future reference
//
// Shift_L Shift_R
// Control_L Control_R
// Meta_L Meta_R
// Alt_L Alt_R
// Super_L Super_R
// Hyper_L Hyper_R
// ISO_Level2_Latch
// ISO_Level3_Shift ISO_Level3_Latch ISO_Level3_Lock
// ISO_Level5_Shift ISO_Level5_Latch ISO_Level5_Lock

// const KEY_Shift_L = 0xffe1;
// const KEY_Shift_R = 0xffe2;
// const KEY_Control_L = 0xffe3;
// const KEY_Control_R = 0xffe4;
// const KEY_Caps_Lock = 0xffe5;
// const KEY_Shift_Lock = 0xffe6;
//
// const KEY_Meta_L = 0xffe7;
// const KEY_Meta_R = 0xffe8;
// const KEY_Alt_L = 0xffe9;
// const KEY_Alt_R = 0xffea;
// const KEY_Super_L = 0xffeb;
// const KEY_Super_R = 0xffec;
// const KEY_Hyper_L = 0xffed;
// const KEY_Hyper_R = 0xffee;
//
//
// const KEY_ISO_Lock = 0xfe01;
// const KEY_ISO_Level2_Latch = 0xfe02;
// const KEY_ISO_Level3_Shift = 0xfe03;
// const KEY_ISO_Level3_Latch = 0xfe04;
// const KEY_ISO_Level3_Lock = 0xfe05;
// const KEY_ISO_Level5_Shift = 0xfe11;
// const KEY_ISO_Level5_Latch = 0xfe12;
// const KEY_ISO_Level5_Lock = 0xfe13;
// const KEY_ISO_Group_Shift = 0xff7e;
// const KEY_ISO_Group_Latch = 0xfe06;
// const KEY_ISO_Group_Lock = 0xfe07;
// const KEY_ISO_Next_Group = 0xfe08;
// const KEY_ISO_Next_Group_Lock = 0xfe09;
// const KEY_ISO_Prev_Group = 0xfe0a;
// const KEY_ISO_Prev_Group_Lock = 0xfe0b;
// const KEY_ISO_First_Group = 0xfe0c;
// const KEY_ISO_First_Group_Lock = 0xfe0d;
// const KEY_ISO_Last_Group = 0xfe0e;
// const KEY_ISO_Last_Group_Lock = 0xfe0f;
bitflags! {
	#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
	pub struct ModFlags: u8 {
		const Shift_L = 1;
		const Shift_R = 1 << 1;
		const Control_L = 1 << 1 + 1;
		const Control_R = 1 << 2;
		const Alt_L = 1 << 2 + 1;
		const Alt_R = 1 << 3;
		const Super_L = 1 << 3 + 1;
		const Super_R = 1 << 4;
		const ISO_Level3_Shift = 1 << 4 + 1;
		const ISO_Level5_Shift = 1 << 5;
	}
}

enum_table! {
	#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
	pub struct Key: Keysym {
		const VoidSymbol = Keysym::VoidSymbol;
		const BackSpace = Keysym::BackSpace;
		const Tab = Keysym::Tab;
		const Linefeed = Keysym::Linefeed;
		const Clear = Keysym::Clear;
		const Return = Keysym::Return;
		const Pause = Keysym::Pause;
		const Scroll_Lock = Keysym::Scroll_Lock;
		const Sys_Req = Keysym::Sys_Req;
		const Escape = Keysym::Escape;
		const Delete = Keysym::Delete;
		const Multi_key = Keysym::Multi_key;
		const Codeinput = Keysym::Codeinput;
		const SingleCandidate = Keysym::SingleCandidate;
		const MultipleCandidate = Keysym::MultipleCandidate;
		const PreviousCandidate = Keysym::PreviousCandidate;
		const Kanji = Keysym::Kanji;
		const Muhenkan = Keysym::Muhenkan;
		const Henkan_Mode = Keysym::Henkan_Mode;
		const Henkan = Keysym::Henkan;
		const Romaji = Keysym::Romaji;
		const Hiragana = Keysym::Hiragana;
		const Katakana = Keysym::Katakana;
		const Hiragana_Katakana = Keysym::Hiragana_Katakana;
		const Zenkaku = Keysym::Zenkaku;
		const Hankaku = Keysym::Hankaku;
		const Zenkaku_Hankaku = Keysym::Zenkaku_Hankaku;
		const Touroku = Keysym::Touroku;
		const Massyo = Keysym::Massyo;
		const Kana_Lock = Keysym::Kana_Lock;
		const Kana_Shift = Keysym::Kana_Shift;
		const Eisu_Shift = Keysym::Eisu_Shift;
		const Eisu_toggle = Keysym::Eisu_toggle;
		const Kanji_Bangou = Keysym::Kanji_Bangou;
		const Zen_Koho = Keysym::Zen_Koho;
		const Mae_Koho = Keysym::Mae_Koho;
		const Home = Keysym::Home;
		const Left = Keysym::Left;
		const Up = Keysym::Up;
		const Right = Keysym::Right;
		const Down = Keysym::Down;
		const Prior = Keysym::Prior;
		const Page_Up = Keysym::Page_Up;
		const Next = Keysym::Next;
		const Page_Down = Keysym::Page_Down;
		const End = Keysym::End;
		const Begin = Keysym::Begin;
		const Select = Keysym::Select;
		const Print = Keysym::Print;
		const Execute = Keysym::Execute;
		const Insert = Keysym::Insert;
		const Undo = Keysym::Undo;
		const Redo = Keysym::Redo;
		const Menu = Keysym::Menu;
		const Find = Keysym::Find;
		const Cancel = Keysym::Cancel;
		const Help = Keysym::Help;
		const Break = Keysym::Break;
		const Mode_switch = Keysym::Mode_switch;
		const script_switch = Keysym::script_switch;
		const Num_Lock = Keysym::Num_Lock;
		const KP_Space = Keysym::KP_Space;
		const KP_Tab = Keysym::KP_Tab;
		const KP_Enter = Keysym::KP_Enter;
		const KP_F1 = Keysym::KP_F1;
		const KP_F2 = Keysym::KP_F2;
		const KP_F3 = Keysym::KP_F3;
		const KP_F4 = Keysym::KP_F4;
		const KP_Home = Keysym::KP_Home;
		const KP_Left = Keysym::KP_Left;
		const KP_Up = Keysym::KP_Up;
		const KP_Right = Keysym::KP_Right;
		const KP_Down = Keysym::KP_Down;
		const KP_Prior = Keysym::KP_Prior;
		const KP_Page_Up = Keysym::KP_Page_Up;
		const KP_Next = Keysym::KP_Next;
		const KP_Page_Down = Keysym::KP_Page_Down;
		const KP_End = Keysym::KP_End;
		const KP_Begin = Keysym::KP_Begin;
		const KP_Insert = Keysym::KP_Insert;
		const KP_Delete = Keysym::KP_Delete;
		const KP_Equal = Keysym::KP_Equal;
		const KP_Multiply = Keysym::KP_Multiply;
		const KP_Add = Keysym::KP_Add;
		const KP_Separator = Keysym::KP_Separator;
		const KP_Subtract = Keysym::KP_Subtract;
		const KP_Decimal = Keysym::KP_Decimal;
		const KP_Divide = Keysym::KP_Divide;
		const KP_0 = Keysym::KP_0;
		const KP_1 = Keysym::KP_1;
		const KP_2 = Keysym::KP_2;
		const KP_3 = Keysym::KP_3;
		const KP_4 = Keysym::KP_4;
		const KP_5 = Keysym::KP_5;
		const KP_6 = Keysym::KP_6;
		const KP_7 = Keysym::KP_7;
		const KP_8 = Keysym::KP_8;
		const KP_9 = Keysym::KP_9;
		const F1 = Keysym::F1;
		const F2 = Keysym::F2;
		const F3 = Keysym::F3;
		const F4 = Keysym::F4;
		const F5 = Keysym::F5;
		const F6 = Keysym::F6;
		const F7 = Keysym::F7;
		const F8 = Keysym::F8;
		const F9 = Keysym::F9;
		const F10 = Keysym::F10;
		const F11 = Keysym::F11;
		const L1 = Keysym::L1;
		const F12 = Keysym::F12;
		const L2 = Keysym::L2;
		const F13 = Keysym::F13;
		const L3 = Keysym::L3;
		const F14 = Keysym::F14;
		const L4 = Keysym::L4;
		const F15 = Keysym::F15;
		const L5 = Keysym::L5;
		const F16 = Keysym::F16;
		const L6 = Keysym::L6;
		const F17 = Keysym::F17;
		const L7 = Keysym::L7;
		const F18 = Keysym::F18;
		const L8 = Keysym::L8;
		const F19 = Keysym::F19;
		const L9 = Keysym::L9;
		const F20 = Keysym::F20;
		const L10 = Keysym::L10;
		const F21 = Keysym::F21;
		const R1 = Keysym::R1;
		const F22 = Keysym::F22;
		const R2 = Keysym::R2;
		const F23 = Keysym::F23;
		const R3 = Keysym::R3;
		const F24 = Keysym::F24;
		const R4 = Keysym::R4;
		const F25 = Keysym::F25;
		const R5 = Keysym::R5;
		const F26 = Keysym::F26;
		const R6 = Keysym::R6;
		const F27 = Keysym::F27;
		const R7 = Keysym::R7;
		const F28 = Keysym::F28;
		const R8 = Keysym::R8;
		const F29 = Keysym::F29;
		const R9 = Keysym::R9;
		const F30 = Keysym::F30;
		const R10 = Keysym::R10;
		const F31 = Keysym::F31;
		const R11 = Keysym::R11;
		const F32 = Keysym::F32;
		const R12 = Keysym::R12;
		const F33 = Keysym::F33;
		const R13 = Keysym::R13;
		const F34 = Keysym::F34;
		const R14 = Keysym::R14;
		const F35 = Keysym::F35;
		const R15 = Keysym::R15;
		const ISO_Left_Tab = Keysym::ISO_Left_Tab;
		const ISO_Move_Line_Up = Keysym::ISO_Move_Line_Up;
		const ISO_Move_Line_Down = Keysym::ISO_Move_Line_Down;
		const ISO_Partial_Line_Up = Keysym::ISO_Partial_Line_Up;
		const ISO_Partial_Line_Down = Keysym::ISO_Partial_Line_Down;
		const ISO_Partial_Space_Left = Keysym::ISO_Partial_Space_Left;
		const ISO_Partial_Space_Right = Keysym::ISO_Partial_Space_Right;
		const ISO_Set_Margin_Left = Keysym::ISO_Set_Margin_Left;
		const ISO_Set_Margin_Right = Keysym::ISO_Set_Margin_Right;
		const ISO_Release_Margin_Left = Keysym::ISO_Release_Margin_Left;
		const ISO_Release_Margin_Right = Keysym::ISO_Release_Margin_Right;
		const ISO_Release_Both_Margins = Keysym::ISO_Release_Both_Margins;
		const ISO_Fast_Cursor_Left = Keysym::ISO_Fast_Cursor_Left;
		const ISO_Fast_Cursor_Right = Keysym::ISO_Fast_Cursor_Right;
		const ISO_Fast_Cursor_Up = Keysym::ISO_Fast_Cursor_Up;
		const ISO_Fast_Cursor_Down = Keysym::ISO_Fast_Cursor_Down;
		const ISO_Continuous_Underline = Keysym::ISO_Continuous_Underline;
		const ISO_Discontinuous_Underline = Keysym::ISO_Discontinuous_Underline;
		const ISO_Emphasize = Keysym::ISO_Emphasize;
		const ISO_Center_Object = Keysym::ISO_Center_Object;
		const ISO_Enter = Keysym::ISO_Enter;
		const dead_grave = Keysym::dead_grave;
		const dead_acute = Keysym::dead_acute;
		const dead_circumflex = Keysym::dead_circumflex;
		const dead_tilde = Keysym::dead_tilde;
		const dead_perispomeni = Keysym::dead_perispomeni;
		const dead_macron = Keysym::dead_macron;
		const dead_breve = Keysym::dead_breve;
		const dead_abovedot = Keysym::dead_abovedot;
		const dead_diaeresis = Keysym::dead_diaeresis;
		const dead_abovering = Keysym::dead_abovering;
		const dead_doubleacute = Keysym::dead_doubleacute;
		const dead_caron = Keysym::dead_caron;
		const dead_cedilla = Keysym::dead_cedilla;
		const dead_ogonek = Keysym::dead_ogonek;
		const dead_iota = Keysym::dead_iota;
		const dead_voiced_sound = Keysym::dead_voiced_sound;
		const dead_semivoiced_sound = Keysym::dead_semivoiced_sound;
		const dead_belowdot = Keysym::dead_belowdot;
		const dead_hook = Keysym::dead_hook;
		const dead_horn = Keysym::dead_horn;
		const dead_stroke = Keysym::dead_stroke;
		const dead_abovecomma = Keysym::dead_abovecomma;
		const dead_psili = Keysym::dead_psili;
		const dead_abovereversedcomma = Keysym::dead_abovereversedcomma;
		const dead_dasia = Keysym::dead_dasia;
		const dead_doublegrave = Keysym::dead_doublegrave;
		const dead_belowring = Keysym::dead_belowring;
		const dead_belowmacron = Keysym::dead_belowmacron;
		const dead_belowcircumflex = Keysym::dead_belowcircumflex;
		const dead_belowtilde = Keysym::dead_belowtilde;
		const dead_belowbreve = Keysym::dead_belowbreve;
		const dead_belowdiaeresis = Keysym::dead_belowdiaeresis;
		const dead_invertedbreve = Keysym::dead_invertedbreve;
		const dead_belowcomma = Keysym::dead_belowcomma;
		const dead_currency = Keysym::dead_currency;
		const dead_lowline = Keysym::dead_lowline;
		const dead_aboveverticalline = Keysym::dead_aboveverticalline;
		const dead_belowverticalline = Keysym::dead_belowverticalline;
		const dead_longsolidusoverlay = Keysym::dead_longsolidusoverlay;
		const dead_a = Keysym::dead_a;
		const dead_A = Keysym::dead_A;
		const dead_e = Keysym::dead_e;
		const dead_E = Keysym::dead_E;
		const dead_i = Keysym::dead_i;
		const dead_I = Keysym::dead_I;
		const dead_o = Keysym::dead_o;
		const dead_O = Keysym::dead_O;
		const dead_u = Keysym::dead_u;
		const dead_U = Keysym::dead_U;
		const dead_small_schwa = Keysym::dead_small_schwa;
		const dead_capital_schwa = Keysym::dead_capital_schwa;
		const dead_greek = Keysym::dead_greek;
		const First_Virtual_Screen = Keysym::First_Virtual_Screen;
		const Prev_Virtual_Screen = Keysym::Prev_Virtual_Screen;
		const Next_Virtual_Screen = Keysym::Next_Virtual_Screen;
		const Last_Virtual_Screen = Keysym::Last_Virtual_Screen;
		const Terminate_Server = Keysym::Terminate_Server;
		const AccessX_Enable = Keysym::AccessX_Enable;
		const AccessX_Feedback_Enable = Keysym::AccessX_Feedback_Enable;
		const RepeatKeys_Enable = Keysym::RepeatKeys_Enable;
		const SlowKeys_Enable = Keysym::SlowKeys_Enable;
		const BounceKeys_Enable = Keysym::BounceKeys_Enable;
		const StickyKeys_Enable = Keysym::StickyKeys_Enable;
		const MouseKeys_Enable = Keysym::MouseKeys_Enable;
		const MouseKeys_Accel_Enable = Keysym::MouseKeys_Accel_Enable;
		const Overlay1_Enable = Keysym::Overlay1_Enable;
		const Overlay2_Enable = Keysym::Overlay2_Enable;
		const AudibleBell_Enable = Keysym::AudibleBell_Enable;
		const Pointer_Left = Keysym::Pointer_Left;
		const Pointer_Right = Keysym::Pointer_Right;
		const Pointer_Up = Keysym::Pointer_Up;
		const Pointer_Down = Keysym::Pointer_Down;
		const Pointer_UpLeft = Keysym::Pointer_UpLeft;
		const Pointer_UpRight = Keysym::Pointer_UpRight;
		const Pointer_DownLeft = Keysym::Pointer_DownLeft;
		const Pointer_DownRight = Keysym::Pointer_DownRight;
		const Pointer_Button_Dflt = Keysym::Pointer_Button_Dflt;
		const Pointer_Button1 = Keysym::Pointer_Button1;
		const Pointer_Button2 = Keysym::Pointer_Button2;
		const Pointer_Button3 = Keysym::Pointer_Button3;
		const Pointer_Button4 = Keysym::Pointer_Button4;
		const Pointer_Button5 = Keysym::Pointer_Button5;
		const Pointer_DblClick_Dflt = Keysym::Pointer_DblClick_Dflt;
		const Pointer_DblClick1 = Keysym::Pointer_DblClick1;
		const Pointer_DblClick2 = Keysym::Pointer_DblClick2;
		const Pointer_DblClick3 = Keysym::Pointer_DblClick3;
		const Pointer_DblClick4 = Keysym::Pointer_DblClick4;
		const Pointer_DblClick5 = Keysym::Pointer_DblClick5;
		const Pointer_Drag_Dflt = Keysym::Pointer_Drag_Dflt;
		const Pointer_Drag1 = Keysym::Pointer_Drag1;
		const Pointer_Drag2 = Keysym::Pointer_Drag2;
		const Pointer_Drag3 = Keysym::Pointer_Drag3;
		const Pointer_Drag4 = Keysym::Pointer_Drag4;
		const Pointer_Drag5 = Keysym::Pointer_Drag5;
		const Pointer_EnableKeys = Keysym::Pointer_EnableKeys;
		const Pointer_Accelerate = Keysym::Pointer_Accelerate;
		const Pointer_DfltBtnNext = Keysym::Pointer_DfltBtnNext;
		const Pointer_DfltBtnPrev = Keysym::Pointer_DfltBtnPrev;
		const ch = Keysym::ch;
		const Ch = Keysym::Ch;
		const CH = Keysym::CH;
		const c_h = Keysym::c_h;
		const C_h = Keysym::C_h;
		const C_H = Keysym::C_H;
		const _3270_Duplicate = Keysym::_3270_Duplicate;
		const _3270_FieldMark = Keysym::_3270_FieldMark;
		const _3270_Right2 = Keysym::_3270_Right2;
		const _3270_Left2 = Keysym::_3270_Left2;
		const _3270_BackTab = Keysym::_3270_BackTab;
		const _3270_EraseEOF = Keysym::_3270_EraseEOF;
		const _3270_EraseInput = Keysym::_3270_EraseInput;
		const _3270_Reset = Keysym::_3270_Reset;
		const _3270_Quit = Keysym::_3270_Quit;
		const _3270_PA1 = Keysym::_3270_PA1;
		const _3270_PA2 = Keysym::_3270_PA2;
		const _3270_PA3 = Keysym::_3270_PA3;
		const _3270_Test = Keysym::_3270_Test;
		const _3270_Attn = Keysym::_3270_Attn;
		const _3270_CursorBlink = Keysym::_3270_CursorBlink;
		const _3270_AltCursor = Keysym::_3270_AltCursor;
		const _3270_KeyClick = Keysym::_3270_KeyClick;
		const _3270_Jump = Keysym::_3270_Jump;
		const _3270_Ident = Keysym::_3270_Ident;
		const _3270_Rule = Keysym::_3270_Rule;
		const _3270_Copy = Keysym::_3270_Copy;
		const _3270_Play = Keysym::_3270_Play;
		const _3270_Setup = Keysym::_3270_Setup;
		const _3270_Record = Keysym::_3270_Record;
		const _3270_ChangeScreen = Keysym::_3270_ChangeScreen;
		const _3270_DeleteWord = Keysym::_3270_DeleteWord;
		const _3270_ExSelect = Keysym::_3270_ExSelect;
		const _3270_CursorSelect = Keysym::_3270_CursorSelect;
		const _3270_PrintScreen = Keysym::_3270_PrintScreen;
		const _3270_Enter = Keysym::_3270_Enter;
		const space = Keysym::space;
		const exclam = Keysym::exclam;
		const quotedbl = Keysym::quotedbl;
		const numbersign = Keysym::numbersign;
		const dollar = Keysym::dollar;
		const percent = Keysym::percent;
		const ampersand = Keysym::ampersand;
		const apostrophe = Keysym::apostrophe;
		const quoteright = Keysym::quoteright;
		const parenleft = Keysym::parenleft;
		const parenright = Keysym::parenright;
		const asterisk = Keysym::asterisk;
		const plus = Keysym::plus;
		const comma = Keysym::comma;
		const minus = Keysym::minus;
		const period = Keysym::period;
		const slash = Keysym::slash;
		const _0 = Keysym::_0;
		const _1 = Keysym::_1;
		const _2 = Keysym::_2;
		const _3 = Keysym::_3;
		const _4 = Keysym::_4;
		const _5 = Keysym::_5;
		const _6 = Keysym::_6;
		const _7 = Keysym::_7;
		const _8 = Keysym::_8;
		const _9 = Keysym::_9;
		const colon = Keysym::colon;
		const semicolon = Keysym::semicolon;
		const less = Keysym::less;
		const equal = Keysym::equal;
		const greater = Keysym::greater;
		const question = Keysym::question;
		const at = Keysym::at;
		const A = Keysym::A;
		const B = Keysym::B;
		const C = Keysym::C;
		const D = Keysym::D;
		const E = Keysym::E;
		const F = Keysym::F;
		const G = Keysym::G;
		const H = Keysym::H;
		const I = Keysym::I;
		const J = Keysym::J;
		const K = Keysym::K;
		const L = Keysym::L;
		const M = Keysym::M;
		const N = Keysym::N;
		const O = Keysym::O;
		const P = Keysym::P;
		const Q = Keysym::Q;
		const R = Keysym::R;
		const S = Keysym::S;
		const T = Keysym::T;
		const U = Keysym::U;
		const V = Keysym::V;
		const W = Keysym::W;
		const X = Keysym::X;
		const Y = Keysym::Y;
		const Z = Keysym::Z;
		const bracketleft = Keysym::bracketleft;
		const backslash = Keysym::backslash;
		const bracketright = Keysym::bracketright;
		const asciicircum = Keysym::asciicircum;
		const underscore = Keysym::underscore;
		const grave = Keysym::grave;
		const quoteleft = Keysym::quoteleft;
		const a = Keysym::a;
		const b = Keysym::b;
		const c = Keysym::c;
		const d = Keysym::d;
		const e = Keysym::e;
		const f = Keysym::f;
		const g = Keysym::g;
		const h = Keysym::h;
		const i = Keysym::i;
		const j = Keysym::j;
		const k = Keysym::k;
		const l = Keysym::l;
		const m = Keysym::m;
		const n = Keysym::n;
		const o = Keysym::o;
		const p = Keysym::p;
		const q = Keysym::q;
		const r = Keysym::r;
		const s = Keysym::s;
		const t = Keysym::t;
		const u = Keysym::u;
		const v = Keysym::v;
		const w = Keysym::w;
		const x = Keysym::x;
		const y = Keysym::y;
		const z = Keysym::z;
		const braceleft = Keysym::braceleft;
		const bar = Keysym::bar;
		const braceright = Keysym::braceright;
		const asciitilde = Keysym::asciitilde;
		const nobreakspace = Keysym::nobreakspace;
		const exclamdown = Keysym::exclamdown;
		const cent = Keysym::cent;
		const sterling = Keysym::sterling;
		const currency = Keysym::currency;
		const yen = Keysym::yen;
		const brokenbar = Keysym::brokenbar;
		const section = Keysym::section;
		const diaeresis = Keysym::diaeresis;
		const copyright = Keysym::copyright;
		const ordfeminine = Keysym::ordfeminine;
		const guillemotleft = Keysym::guillemotleft;
		const notsign = Keysym::notsign;
		const hyphen = Keysym::hyphen;
		const registered = Keysym::registered;
		const macron = Keysym::macron;
		const degree = Keysym::degree;
		const plusminus = Keysym::plusminus;
		const twosuperior = Keysym::twosuperior;
		const threesuperior = Keysym::threesuperior;
		const acute = Keysym::acute;
		const mu = Keysym::mu;
		const paragraph = Keysym::paragraph;
		const periodcentered = Keysym::periodcentered;
		const cedilla = Keysym::cedilla;
		const onesuperior = Keysym::onesuperior;
		const masculine = Keysym::masculine;
		const guillemotright = Keysym::guillemotright;
		const onequarter = Keysym::onequarter;
		const onehalf = Keysym::onehalf;
		const threequarters = Keysym::threequarters;
		const questiondown = Keysym::questiondown;
		const Agrave = Keysym::Agrave;
		const Aacute = Keysym::Aacute;
		const Acircumflex = Keysym::Acircumflex;
		const Atilde = Keysym::Atilde;
		const Adiaeresis = Keysym::Adiaeresis;
		const Aring = Keysym::Aring;
		const AE = Keysym::AE;
		const Ccedilla = Keysym::Ccedilla;
		const Egrave = Keysym::Egrave;
		const Eacute = Keysym::Eacute;
		const Ecircumflex = Keysym::Ecircumflex;
		const Ediaeresis = Keysym::Ediaeresis;
		const Igrave = Keysym::Igrave;
		const Iacute = Keysym::Iacute;
		const Icircumflex = Keysym::Icircumflex;
		const Idiaeresis = Keysym::Idiaeresis;
		const ETH = Keysym::ETH;
		const Eth = Keysym::Eth;
		const Ntilde = Keysym::Ntilde;
		const Ograve = Keysym::Ograve;
		const Oacute = Keysym::Oacute;
		const Ocircumflex = Keysym::Ocircumflex;
		const Otilde = Keysym::Otilde;
		const Odiaeresis = Keysym::Odiaeresis;
		const multiply = Keysym::multiply;
		const Oslash = Keysym::Oslash;
		const Ooblique = Keysym::Ooblique;
		const Ugrave = Keysym::Ugrave;
		const Uacute = Keysym::Uacute;
		const Ucircumflex = Keysym::Ucircumflex;
		const Udiaeresis = Keysym::Udiaeresis;
		const Yacute = Keysym::Yacute;
		const THORN = Keysym::THORN;
		const Thorn = Keysym::Thorn;
		const ssharp = Keysym::ssharp;
		const agrave = Keysym::agrave;
		const aacute = Keysym::aacute;
		const acircumflex = Keysym::acircumflex;
		const atilde = Keysym::atilde;
		const adiaeresis = Keysym::adiaeresis;
		const aring = Keysym::aring;
		const ae = Keysym::ae;
		const ccedilla = Keysym::ccedilla;
		const egrave = Keysym::egrave;
		const eacute = Keysym::eacute;
		const ecircumflex = Keysym::ecircumflex;
		const ediaeresis = Keysym::ediaeresis;
		const igrave = Keysym::igrave;
		const iacute = Keysym::iacute;
		const icircumflex = Keysym::icircumflex;
		const idiaeresis = Keysym::idiaeresis;
		const eth = Keysym::eth;
		const ntilde = Keysym::ntilde;
		const ograve = Keysym::ograve;
		const oacute = Keysym::oacute;
		const ocircumflex = Keysym::ocircumflex;
		const otilde = Keysym::otilde;
		const odiaeresis = Keysym::odiaeresis;
		const division = Keysym::division;
		const oslash = Keysym::oslash;
		const ooblique = Keysym::ooblique;
		const ugrave = Keysym::ugrave;
		const uacute = Keysym::uacute;
		const ucircumflex = Keysym::ucircumflex;
		const udiaeresis = Keysym::udiaeresis;
		const yacute = Keysym::yacute;
		const thorn = Keysym::thorn;
		const ydiaeresis = Keysym::ydiaeresis;
		const Aogonek = Keysym::Aogonek;
		const breve = Keysym::breve;
		const Lstroke = Keysym::Lstroke;
		const Lcaron = Keysym::Lcaron;
		const Sacute = Keysym::Sacute;
		const Scaron = Keysym::Scaron;
		const Scedilla = Keysym::Scedilla;
		const Tcaron = Keysym::Tcaron;
		const Zacute = Keysym::Zacute;
		const Zcaron = Keysym::Zcaron;
		const Zabovedot = Keysym::Zabovedot;
		const aogonek = Keysym::aogonek;
		const ogonek = Keysym::ogonek;
		const lstroke = Keysym::lstroke;
		const lcaron = Keysym::lcaron;
		const sacute = Keysym::sacute;
		const caron = Keysym::caron;
		const scaron = Keysym::scaron;
		const scedilla = Keysym::scedilla;
		const tcaron = Keysym::tcaron;
		const zacute = Keysym::zacute;
		const doubleacute = Keysym::doubleacute;
		const zcaron = Keysym::zcaron;
		const zabovedot = Keysym::zabovedot;
		const Racute = Keysym::Racute;
		const Abreve = Keysym::Abreve;
		const Lacute = Keysym::Lacute;
		const Cacute = Keysym::Cacute;
		const Ccaron = Keysym::Ccaron;
		const Eogonek = Keysym::Eogonek;
		const Ecaron = Keysym::Ecaron;
		const Dcaron = Keysym::Dcaron;
		const Dstroke = Keysym::Dstroke;
		const Nacute = Keysym::Nacute;
		const Ncaron = Keysym::Ncaron;
		const Odoubleacute = Keysym::Odoubleacute;
		const Rcaron = Keysym::Rcaron;
		const Uring = Keysym::Uring;
		const Udoubleacute = Keysym::Udoubleacute;
		const Tcedilla = Keysym::Tcedilla;
		const racute = Keysym::racute;
		const abreve = Keysym::abreve;
		const lacute = Keysym::lacute;
		const cacute = Keysym::cacute;
		const ccaron = Keysym::ccaron;
		const eogonek = Keysym::eogonek;
		const ecaron = Keysym::ecaron;
		const dcaron = Keysym::dcaron;
		const dstroke = Keysym::dstroke;
		const nacute = Keysym::nacute;
		const ncaron = Keysym::ncaron;
		const odoubleacute = Keysym::odoubleacute;
		const rcaron = Keysym::rcaron;
		const uring = Keysym::uring;
		const udoubleacute = Keysym::udoubleacute;
		const tcedilla = Keysym::tcedilla;
		const abovedot = Keysym::abovedot;
		const Hstroke = Keysym::Hstroke;
		const Hcircumflex = Keysym::Hcircumflex;
		const Iabovedot = Keysym::Iabovedot;
		const Gbreve = Keysym::Gbreve;
		const Jcircumflex = Keysym::Jcircumflex;
		const hstroke = Keysym::hstroke;
		const hcircumflex = Keysym::hcircumflex;
		const idotless = Keysym::idotless;
		const gbreve = Keysym::gbreve;
		const jcircumflex = Keysym::jcircumflex;
		const Cabovedot = Keysym::Cabovedot;
		const Ccircumflex = Keysym::Ccircumflex;
		const Gabovedot = Keysym::Gabovedot;
		const Gcircumflex = Keysym::Gcircumflex;
		const Ubreve = Keysym::Ubreve;
		const Scircumflex = Keysym::Scircumflex;
		const cabovedot = Keysym::cabovedot;
		const ccircumflex = Keysym::ccircumflex;
		const gabovedot = Keysym::gabovedot;
		const gcircumflex = Keysym::gcircumflex;
		const ubreve = Keysym::ubreve;
		const scircumflex = Keysym::scircumflex;
		const kra = Keysym::kra;
		const kappa = Keysym::kappa;
		const Rcedilla = Keysym::Rcedilla;
		const Itilde = Keysym::Itilde;
		const Lcedilla = Keysym::Lcedilla;
		const Emacron = Keysym::Emacron;
		const Gcedilla = Keysym::Gcedilla;
		const Tslash = Keysym::Tslash;
		const rcedilla = Keysym::rcedilla;
		const itilde = Keysym::itilde;
		const lcedilla = Keysym::lcedilla;
		const emacron = Keysym::emacron;
		const gcedilla = Keysym::gcedilla;
		const tslash = Keysym::tslash;
		const ENG = Keysym::ENG;
		const eng = Keysym::eng;
		const Amacron = Keysym::Amacron;
		const Iogonek = Keysym::Iogonek;
		const Eabovedot = Keysym::Eabovedot;
		const Imacron = Keysym::Imacron;
		const Ncedilla = Keysym::Ncedilla;
		const Omacron = Keysym::Omacron;
		const Kcedilla = Keysym::Kcedilla;
		const Uogonek = Keysym::Uogonek;
		const Utilde = Keysym::Utilde;
		const Umacron = Keysym::Umacron;
		const amacron = Keysym::amacron;
		const iogonek = Keysym::iogonek;
		const eabovedot = Keysym::eabovedot;
		const imacron = Keysym::imacron;
		const ncedilla = Keysym::ncedilla;
		const omacron = Keysym::omacron;
		const kcedilla = Keysym::kcedilla;
		const uogonek = Keysym::uogonek;
		const utilde = Keysym::utilde;
		const umacron = Keysym::umacron;
		const Wcircumflex = Keysym::Wcircumflex;
		const wcircumflex = Keysym::wcircumflex;
		const Ycircumflex = Keysym::Ycircumflex;
		const ycircumflex = Keysym::ycircumflex;
		const Babovedot = Keysym::Babovedot;
		const babovedot = Keysym::babovedot;
		const Dabovedot = Keysym::Dabovedot;
		const dabovedot = Keysym::dabovedot;
		const Fabovedot = Keysym::Fabovedot;
		const fabovedot = Keysym::fabovedot;
		const Mabovedot = Keysym::Mabovedot;
		const mabovedot = Keysym::mabovedot;
		const Pabovedot = Keysym::Pabovedot;
		const pabovedot = Keysym::pabovedot;
		const Sabovedot = Keysym::Sabovedot;
		const sabovedot = Keysym::sabovedot;
		const Tabovedot = Keysym::Tabovedot;
		const tabovedot = Keysym::tabovedot;
		const Wgrave = Keysym::Wgrave;
		const wgrave = Keysym::wgrave;
		const Wacute = Keysym::Wacute;
		const wacute = Keysym::wacute;
		const Wdiaeresis = Keysym::Wdiaeresis;
		const wdiaeresis = Keysym::wdiaeresis;
		const Ygrave = Keysym::Ygrave;
		const ygrave = Keysym::ygrave;
		const OE = Keysym::OE;
		const oe = Keysym::oe;
		const Ydiaeresis = Keysym::Ydiaeresis;
		const overline = Keysym::overline;
		const kana_fullstop = Keysym::kana_fullstop;
		const kana_openingbracket = Keysym::kana_openingbracket;
		const kana_closingbracket = Keysym::kana_closingbracket;
		const kana_comma = Keysym::kana_comma;
		const kana_conjunctive = Keysym::kana_conjunctive;
		const kana_middledot = Keysym::kana_middledot;
		const kana_WO = Keysym::kana_WO;
		const kana_a = Keysym::kana_a;
		const kana_i = Keysym::kana_i;
		const kana_u = Keysym::kana_u;
		const kana_e = Keysym::kana_e;
		const kana_o = Keysym::kana_o;
		const kana_ya = Keysym::kana_ya;
		const kana_yu = Keysym::kana_yu;
		const kana_yo = Keysym::kana_yo;
		const kana_tsu = Keysym::kana_tsu;
		const kana_tu = Keysym::kana_tu;
		const prolongedsound = Keysym::prolongedsound;
		const kana_A = Keysym::kana_A;
		const kana_I = Keysym::kana_I;
		const kana_U = Keysym::kana_U;
		const kana_E = Keysym::kana_E;
		const kana_O = Keysym::kana_O;
		const kana_KA = Keysym::kana_KA;
		const kana_KI = Keysym::kana_KI;
		const kana_KU = Keysym::kana_KU;
		const kana_KE = Keysym::kana_KE;
		const kana_KO = Keysym::kana_KO;
		const kana_SA = Keysym::kana_SA;
		const kana_SHI = Keysym::kana_SHI;
		const kana_SU = Keysym::kana_SU;
		const kana_SE = Keysym::kana_SE;
		const kana_SO = Keysym::kana_SO;
		const kana_TA = Keysym::kana_TA;
		const kana_CHI = Keysym::kana_CHI;
		const kana_TI = Keysym::kana_TI;
		const kana_TSU = Keysym::kana_TSU;
		const kana_TU = Keysym::kana_TU;
		const kana_TE = Keysym::kana_TE;
		const kana_TO = Keysym::kana_TO;
		const kana_NA = Keysym::kana_NA;
		const kana_NI = Keysym::kana_NI;
		const kana_NU = Keysym::kana_NU;
		const kana_NE = Keysym::kana_NE;
		const kana_NO = Keysym::kana_NO;
		const kana_HA = Keysym::kana_HA;
		const kana_HI = Keysym::kana_HI;
		const kana_FU = Keysym::kana_FU;
		const kana_HU = Keysym::kana_HU;
		const kana_HE = Keysym::kana_HE;
		const kana_HO = Keysym::kana_HO;
		const kana_MA = Keysym::kana_MA;
		const kana_MI = Keysym::kana_MI;
		const kana_MU = Keysym::kana_MU;
		const kana_ME = Keysym::kana_ME;
		const kana_MO = Keysym::kana_MO;
		const kana_YA = Keysym::kana_YA;
		const kana_YU = Keysym::kana_YU;
		const kana_YO = Keysym::kana_YO;
		const kana_RA = Keysym::kana_RA;
		const kana_RI = Keysym::kana_RI;
		const kana_RU = Keysym::kana_RU;
		const kana_RE = Keysym::kana_RE;
		const kana_RO = Keysym::kana_RO;
		const kana_WA = Keysym::kana_WA;
		const kana_N = Keysym::kana_N;
		const voicedsound = Keysym::voicedsound;
		const semivoicedsound = Keysym::semivoicedsound;
		const kana_switch = Keysym::kana_switch;
		const Farsi_0 = Keysym::Farsi_0;
		const Farsi_1 = Keysym::Farsi_1;
		const Farsi_2 = Keysym::Farsi_2;
		const Farsi_3 = Keysym::Farsi_3;
		const Farsi_4 = Keysym::Farsi_4;
		const Farsi_5 = Keysym::Farsi_5;
		const Farsi_6 = Keysym::Farsi_6;
		const Farsi_7 = Keysym::Farsi_7;
		const Farsi_8 = Keysym::Farsi_8;
		const Farsi_9 = Keysym::Farsi_9;
		const Arabic_percent = Keysym::Arabic_percent;
		const Arabic_superscript_alef = Keysym::Arabic_superscript_alef;
		const Arabic_tteh = Keysym::Arabic_tteh;
		const Arabic_peh = Keysym::Arabic_peh;
		const Arabic_tcheh = Keysym::Arabic_tcheh;
		const Arabic_ddal = Keysym::Arabic_ddal;
		const Arabic_rreh = Keysym::Arabic_rreh;
		const Arabic_comma = Keysym::Arabic_comma;
		const Arabic_fullstop = Keysym::Arabic_fullstop;
		const Arabic_0 = Keysym::Arabic_0;
		const Arabic_1 = Keysym::Arabic_1;
		const Arabic_2 = Keysym::Arabic_2;
		const Arabic_3 = Keysym::Arabic_3;
		const Arabic_4 = Keysym::Arabic_4;
		const Arabic_5 = Keysym::Arabic_5;
		const Arabic_6 = Keysym::Arabic_6;
		const Arabic_7 = Keysym::Arabic_7;
		const Arabic_8 = Keysym::Arabic_8;
		const Arabic_9 = Keysym::Arabic_9;
		const Arabic_semicolon = Keysym::Arabic_semicolon;
		const Arabic_question_mark = Keysym::Arabic_question_mark;
		const Arabic_hamza = Keysym::Arabic_hamza;
		const Arabic_maddaonalef = Keysym::Arabic_maddaonalef;
		const Arabic_hamzaonalef = Keysym::Arabic_hamzaonalef;
		const Arabic_hamzaonwaw = Keysym::Arabic_hamzaonwaw;
		const Arabic_hamzaunderalef = Keysym::Arabic_hamzaunderalef;
		const Arabic_hamzaonyeh = Keysym::Arabic_hamzaonyeh;
		const Arabic_alef = Keysym::Arabic_alef;
		const Arabic_beh = Keysym::Arabic_beh;
		const Arabic_tehmarbuta = Keysym::Arabic_tehmarbuta;
		const Arabic_teh = Keysym::Arabic_teh;
		const Arabic_theh = Keysym::Arabic_theh;
		const Arabic_jeem = Keysym::Arabic_jeem;
		const Arabic_hah = Keysym::Arabic_hah;
		const Arabic_khah = Keysym::Arabic_khah;
		const Arabic_dal = Keysym::Arabic_dal;
		const Arabic_thal = Keysym::Arabic_thal;
		const Arabic_ra = Keysym::Arabic_ra;
		const Arabic_zain = Keysym::Arabic_zain;
		const Arabic_seen = Keysym::Arabic_seen;
		const Arabic_sheen = Keysym::Arabic_sheen;
		const Arabic_sad = Keysym::Arabic_sad;
		const Arabic_dad = Keysym::Arabic_dad;
		const Arabic_tah = Keysym::Arabic_tah;
		const Arabic_zah = Keysym::Arabic_zah;
		const Arabic_ain = Keysym::Arabic_ain;
		const Arabic_ghain = Keysym::Arabic_ghain;
		const Arabic_tatweel = Keysym::Arabic_tatweel;
		const Arabic_feh = Keysym::Arabic_feh;
		const Arabic_qaf = Keysym::Arabic_qaf;
		const Arabic_kaf = Keysym::Arabic_kaf;
		const Arabic_lam = Keysym::Arabic_lam;
		const Arabic_meem = Keysym::Arabic_meem;
		const Arabic_noon = Keysym::Arabic_noon;
		const Arabic_ha = Keysym::Arabic_ha;
		const Arabic_heh = Keysym::Arabic_heh;
		const Arabic_waw = Keysym::Arabic_waw;
		const Arabic_alefmaksura = Keysym::Arabic_alefmaksura;
		const Arabic_yeh = Keysym::Arabic_yeh;
		const Arabic_fathatan = Keysym::Arabic_fathatan;
		const Arabic_dammatan = Keysym::Arabic_dammatan;
		const Arabic_kasratan = Keysym::Arabic_kasratan;
		const Arabic_fatha = Keysym::Arabic_fatha;
		const Arabic_damma = Keysym::Arabic_damma;
		const Arabic_kasra = Keysym::Arabic_kasra;
		const Arabic_shadda = Keysym::Arabic_shadda;
		const Arabic_sukun = Keysym::Arabic_sukun;
		const Arabic_madda_above = Keysym::Arabic_madda_above;
		const Arabic_hamza_above = Keysym::Arabic_hamza_above;
		const Arabic_hamza_below = Keysym::Arabic_hamza_below;
		const Arabic_jeh = Keysym::Arabic_jeh;
		const Arabic_veh = Keysym::Arabic_veh;
		const Arabic_keheh = Keysym::Arabic_keheh;
		const Arabic_gaf = Keysym::Arabic_gaf;
		const Arabic_noon_ghunna = Keysym::Arabic_noon_ghunna;
		const Arabic_heh_doachashmee = Keysym::Arabic_heh_doachashmee;
		const Farsi_yeh = Keysym::Farsi_yeh;
		const Arabic_farsi_yeh = Keysym::Arabic_farsi_yeh;
		const Arabic_yeh_baree = Keysym::Arabic_yeh_baree;
		const Arabic_heh_goal = Keysym::Arabic_heh_goal;
		const Arabic_switch = Keysym::Arabic_switch;
		const Cyrillic_GHE_bar = Keysym::Cyrillic_GHE_bar;
		const Cyrillic_ghe_bar = Keysym::Cyrillic_ghe_bar;
		const Cyrillic_ZHE_descender = Keysym::Cyrillic_ZHE_descender;
		const Cyrillic_zhe_descender = Keysym::Cyrillic_zhe_descender;
		const Cyrillic_KA_descender = Keysym::Cyrillic_KA_descender;
		const Cyrillic_ka_descender = Keysym::Cyrillic_ka_descender;
		const Cyrillic_KA_vertstroke = Keysym::Cyrillic_KA_vertstroke;
		const Cyrillic_ka_vertstroke = Keysym::Cyrillic_ka_vertstroke;
		const Cyrillic_EN_descender = Keysym::Cyrillic_EN_descender;
		const Cyrillic_en_descender = Keysym::Cyrillic_en_descender;
		const Cyrillic_U_straight = Keysym::Cyrillic_U_straight;
		const Cyrillic_u_straight = Keysym::Cyrillic_u_straight;
		const Cyrillic_U_straight_bar = Keysym::Cyrillic_U_straight_bar;
		const Cyrillic_u_straight_bar = Keysym::Cyrillic_u_straight_bar;
		const Cyrillic_HA_descender = Keysym::Cyrillic_HA_descender;
		const Cyrillic_ha_descender = Keysym::Cyrillic_ha_descender;
		const Cyrillic_CHE_descender = Keysym::Cyrillic_CHE_descender;
		const Cyrillic_che_descender = Keysym::Cyrillic_che_descender;
		const Cyrillic_CHE_vertstroke = Keysym::Cyrillic_CHE_vertstroke;
		const Cyrillic_che_vertstroke = Keysym::Cyrillic_che_vertstroke;
		const Cyrillic_SHHA = Keysym::Cyrillic_SHHA;
		const Cyrillic_shha = Keysym::Cyrillic_shha;
		const Cyrillic_SCHWA = Keysym::Cyrillic_SCHWA;
		const Cyrillic_schwa = Keysym::Cyrillic_schwa;
		const Cyrillic_I_macron = Keysym::Cyrillic_I_macron;
		const Cyrillic_i_macron = Keysym::Cyrillic_i_macron;
		const Cyrillic_O_bar = Keysym::Cyrillic_O_bar;
		const Cyrillic_o_bar = Keysym::Cyrillic_o_bar;
		const Cyrillic_U_macron = Keysym::Cyrillic_U_macron;
		const Cyrillic_u_macron = Keysym::Cyrillic_u_macron;
		const Serbian_dje = Keysym::Serbian_dje;
		const Macedonia_gje = Keysym::Macedonia_gje;
		const Cyrillic_io = Keysym::Cyrillic_io;
		const Ukrainian_ie = Keysym::Ukrainian_ie;
		const Ukranian_je = Keysym::Ukranian_je;
		const Macedonia_dse = Keysym::Macedonia_dse;
		const Ukrainian_i = Keysym::Ukrainian_i;
		const Ukranian_i = Keysym::Ukranian_i;
		const Ukrainian_yi = Keysym::Ukrainian_yi;
		const Ukranian_yi = Keysym::Ukranian_yi;
		const Cyrillic_je = Keysym::Cyrillic_je;
		const Serbian_je = Keysym::Serbian_je;
		const Cyrillic_lje = Keysym::Cyrillic_lje;
		const Serbian_lje = Keysym::Serbian_lje;
		const Cyrillic_nje = Keysym::Cyrillic_nje;
		const Serbian_tshe = Keysym::Serbian_tshe;
		const Macedonia_kje = Keysym::Macedonia_kje;
		const Ukrainian_ghe_with_upturn = Keysym::Ukrainian_ghe_with_upturn;
		const Byelorussian_shortu = Keysym::Byelorussian_shortu;
		const Cyrillic_dzhe = Keysym::Cyrillic_dzhe;
		const Serbian_dze = Keysym::Serbian_dze;
		const numerosign = Keysym::numerosign;
		const Serbian_DJE = Keysym::Serbian_DJE;
		const Macedonia_GJE = Keysym::Macedonia_GJE;
		const Cyrillic_IO = Keysym::Cyrillic_IO;
		const Ukrainian_IE = Keysym::Ukrainian_IE;
		const Ukranian_JE = Keysym::Ukranian_JE;
		const Macedonia_DSE = Keysym::Macedonia_DSE;
		const Ukrainian_I = Keysym::Ukrainian_I;
		const Ukranian_I = Keysym::Ukranian_I;
		const Ukrainian_YI = Keysym::Ukrainian_YI;
		const Ukranian_YI = Keysym::Ukranian_YI;
		const Cyrillic_JE = Keysym::Cyrillic_JE;
		const Serbian_JE = Keysym::Serbian_JE;
		const Cyrillic_LJE = Keysym::Cyrillic_LJE;
		const Serbian_LJE = Keysym::Serbian_LJE;
		const Cyrillic_NJE = Keysym::Cyrillic_NJE;
		const Serbian_NJE = Keysym::Serbian_NJE;
		const Serbian_TSHE = Keysym::Serbian_TSHE;
		const Macedonia_KJE = Keysym::Macedonia_KJE;
		const Ukrainian_GHE_WITH_UPTURN = Keysym::Ukrainian_GHE_WITH_UPTURN;
		const Byelorussian_SHORTU = Keysym::Byelorussian_SHORTU;
		const Cyrillic_DZHE = Keysym::Cyrillic_DZHE;
		const Serbian_DZE = Keysym::Serbian_DZE;
		const Cyrillic_yu = Keysym::Cyrillic_yu;
		const Cyrillic_a = Keysym::Cyrillic_a;
		const Cyrillic_be = Keysym::Cyrillic_be;
		const Cyrillic_tse = Keysym::Cyrillic_tse;
		const Cyrillic_de = Keysym::Cyrillic_de;
		const Cyrillic_ie = Keysym::Cyrillic_ie;
		const Cyrillic_ef = Keysym::Cyrillic_ef;
		const Cyrillic_ghe = Keysym::Cyrillic_ghe;
		const Cyrillic_ha = Keysym::Cyrillic_ha;
		const Cyrillic_i = Keysym::Cyrillic_i;
		const Cyrillic_shorti = Keysym::Cyrillic_shorti;
		const Cyrillic_ka = Keysym::Cyrillic_ka;
		const Cyrillic_el = Keysym::Cyrillic_el;
		const Cyrillic_em = Keysym::Cyrillic_em;
		const Cyrillic_en = Keysym::Cyrillic_en;
		const Cyrillic_o = Keysym::Cyrillic_o;
		const Cyrillic_pe = Keysym::Cyrillic_pe;
		const Cyrillic_ya = Keysym::Cyrillic_ya;
		const Cyrillic_er = Keysym::Cyrillic_er;
		const Cyrillic_es = Keysym::Cyrillic_es;
		const Cyrillic_te = Keysym::Cyrillic_te;
		const Cyrillic_u = Keysym::Cyrillic_u;
		const Cyrillic_zhe = Keysym::Cyrillic_zhe;
		const Cyrillic_ve = Keysym::Cyrillic_ve;
		const Cyrillic_softsign = Keysym::Cyrillic_softsign;
		const Cyrillic_yeru = Keysym::Cyrillic_yeru;
		const Cyrillic_ze = Keysym::Cyrillic_ze;
		const Cyrillic_sha = Keysym::Cyrillic_sha;
		const Cyrillic_e = Keysym::Cyrillic_e;
		const Cyrillic_shcha = Keysym::Cyrillic_shcha;
		const Cyrillic_che = Keysym::Cyrillic_che;
		const Cyrillic_hardsign = Keysym::Cyrillic_hardsign;
		const Cyrillic_YU = Keysym::Cyrillic_YU;
		const Cyrillic_A = Keysym::Cyrillic_A;
		const Cyrillic_BE = Keysym::Cyrillic_BE;
		const Cyrillic_TSE = Keysym::Cyrillic_TSE;
		const Cyrillic_DE = Keysym::Cyrillic_DE;
		const Cyrillic_IE = Keysym::Cyrillic_IE;
		const Cyrillic_EF = Keysym::Cyrillic_EF;
		const Cyrillic_GHE = Keysym::Cyrillic_GHE;
		const Cyrillic_HA = Keysym::Cyrillic_HA;
		const Cyrillic_I = Keysym::Cyrillic_I;
		const Cyrillic_SHORTI = Keysym::Cyrillic_SHORTI;
		const Cyrillic_KA = Keysym::Cyrillic_KA;
		const Cyrillic_EL = Keysym::Cyrillic_EL;
		const Cyrillic_EM = Keysym::Cyrillic_EM;
		const Cyrillic_EN = Keysym::Cyrillic_EN;
		const Cyrillic_O = Keysym::Cyrillic_O;
		const Cyrillic_PE = Keysym::Cyrillic_PE;
		const Cyrillic_YA = Keysym::Cyrillic_YA;
		const Cyrillic_ER = Keysym::Cyrillic_ER;
		const Cyrillic_ES = Keysym::Cyrillic_ES;
		const Cyrillic_TE = Keysym::Cyrillic_TE;
		const Cyrillic_U = Keysym::Cyrillic_U;
		const Cyrillic_ZHE = Keysym::Cyrillic_ZHE;
		const Cyrillic_VE = Keysym::Cyrillic_VE;
		const Cyrillic_SOFTSIGN = Keysym::Cyrillic_SOFTSIGN;
		const Cyrillic_YERU = Keysym::Cyrillic_YERU;
		const Cyrillic_ZE = Keysym::Cyrillic_ZE;
		const Cyrillic_SHA = Keysym::Cyrillic_SHA;
		const Cyrillic_E = Keysym::Cyrillic_E;
		const Cyrillic_SHCHA = Keysym::Cyrillic_SHCHA;
		const Cyrillic_CHE = Keysym::Cyrillic_CHE;
		const Cyrillic_HARDSIGN = Keysym::Cyrillic_HARDSIGN;
		const Greek_ALPHAaccent = Keysym::Greek_ALPHAaccent;
		const Greek_EPSILONaccent = Keysym::Greek_EPSILONaccent;
		const Greek_ETAaccent = Keysym::Greek_ETAaccent;
		const Greek_IOTAaccent = Keysym::Greek_IOTAaccent;
		const Greek_IOTAdieresis = Keysym::Greek_IOTAdieresis;
		const Greek_IOTAdiaeresis = Keysym::Greek_IOTAdiaeresis;
		const Greek_OMICRONaccent = Keysym::Greek_OMICRONaccent;
		const Greek_UPSILONaccent = Keysym::Greek_UPSILONaccent;
		const Greek_UPSILONdieresis = Keysym::Greek_UPSILONdieresis;
		const Greek_OMEGAaccent = Keysym::Greek_OMEGAaccent;
		const Greek_accentdieresis = Keysym::Greek_accentdieresis;
		const Greek_horizbar = Keysym::Greek_horizbar;
		const Greek_alphaaccent = Keysym::Greek_alphaaccent;
		const Greek_epsilonaccent = Keysym::Greek_epsilonaccent;
		const Greek_etaaccent = Keysym::Greek_etaaccent;
		const Greek_iotaaccent = Keysym::Greek_iotaaccent;
		const Greek_iotadieresis = Keysym::Greek_iotadieresis;
		const Greek_iotaaccentdieresis = Keysym::Greek_iotaaccentdieresis;
		const Greek_omicronaccent = Keysym::Greek_omicronaccent;
		const Greek_upsilonaccent = Keysym::Greek_upsilonaccent;
		const Greek_upsilondieresis = Keysym::Greek_upsilondieresis;
		const Greek_upsilonaccentdieresis = Keysym::Greek_upsilonaccentdieresis;
		const Greek_omegaaccent = Keysym::Greek_omegaaccent;
		const Greek_ALPHA = Keysym::Greek_ALPHA;
		const Greek_BETA = Keysym::Greek_BETA;
		const Greek_GAMMA = Keysym::Greek_GAMMA;
		const Greek_DELTA = Keysym::Greek_DELTA;
		const Greek_EPSILON = Keysym::Greek_EPSILON;
		const Greek_ZETA = Keysym::Greek_ZETA;
		const Greek_ETA = Keysym::Greek_ETA;
		const Greek_THETA = Keysym::Greek_THETA;
		const Greek_IOTA = Keysym::Greek_IOTA;
		const Greek_KAPPA = Keysym::Greek_KAPPA;
		const Greek_LAMDA = Keysym::Greek_LAMDA;
		const Greek_LAMBDA = Keysym::Greek_LAMBDA;
		const Greek_MU = Keysym::Greek_MU;
		const Greek_NU = Keysym::Greek_NU;
		const Greek_XI = Keysym::Greek_XI;
		const Greek_OMICRON = Keysym::Greek_OMICRON;
		const Greek_PI = Keysym::Greek_PI;
		const Greek_RHO = Keysym::Greek_RHO;
		const Greek_SIGMA = Keysym::Greek_SIGMA;
		const Greek_TAU = Keysym::Greek_TAU;
		const Greek_UPSILON = Keysym::Greek_UPSILON;
		const Greek_PHI = Keysym::Greek_PHI;
		const Greek_CHI = Keysym::Greek_CHI;
		const Greek_PSI = Keysym::Greek_PSI;
		const Greek_OMEGA = Keysym::Greek_OMEGA;
		const Greek_alpha = Keysym::Greek_alpha;
		const Greek_beta = Keysym::Greek_beta;
		const Greek_gamma = Keysym::Greek_gamma;
		const Greek_delta = Keysym::Greek_delta;
		const Greek_epsilon = Keysym::Greek_epsilon;
		const Greek_zeta = Keysym::Greek_zeta;
		const Greek_eta = Keysym::Greek_eta;
		const Greek_theta = Keysym::Greek_theta;
		const Greek_iota = Keysym::Greek_iota;
		const Greek_kappa = Keysym::Greek_kappa;
		const Greek_lamda = Keysym::Greek_lamda;
		const Greek_lambda = Keysym::Greek_lambda;
		const Greek_mu = Keysym::Greek_mu;
		const Greek_nu = Keysym::Greek_nu;
		const Greek_xi = Keysym::Greek_xi;
		const Greek_omicron = Keysym::Greek_omicron;
		const Greek_pi = Keysym::Greek_pi;
		const Greek_rho = Keysym::Greek_rho;
		const Greek_sigma = Keysym::Greek_sigma;
		const Greek_finalsmallsigma = Keysym::Greek_finalsmallsigma;
		const Greek_tau = Keysym::Greek_tau;
		const Greek_upsilon = Keysym::Greek_upsilon;
		const Greek_phi = Keysym::Greek_phi;
		const Greek_chi = Keysym::Greek_chi;
		const Greek_psi = Keysym::Greek_psi;
		const Greek_omega = Keysym::Greek_omega;
		const Greek_switch = Keysym::Greek_switch;
		const leftradical = Keysym::leftradical;
		const topleftradical = Keysym::topleftradical;
		const horizconnector = Keysym::horizconnector;
		const topintegral = Keysym::topintegral;
		const botintegral = Keysym::botintegral;
		const vertconnector = Keysym::vertconnector;
		const topleftsqbracket = Keysym::topleftsqbracket;
		const botleftsqbracket = Keysym::botleftsqbracket;
		const toprightsqbracket = Keysym::toprightsqbracket;
		const botrightsqbracket = Keysym::botrightsqbracket;
		const topleftparens = Keysym::topleftparens;
		const botleftparens = Keysym::botleftparens;
		const toprightparens = Keysym::toprightparens;
		const botrightparens = Keysym::botrightparens;
		const leftmiddlecurlybrace = Keysym::leftmiddlecurlybrace;
		const rightmiddlecurlybrace = Keysym::rightmiddlecurlybrace;
		const topleftsummation = Keysym::topleftsummation;
		const botleftsummation = Keysym::botleftsummation;
		const topvertsummationconnector = Keysym::topvertsummationconnector;
		const botvertsummationconnector = Keysym::botvertsummationconnector;
		const toprightsummation = Keysym::toprightsummation;
		const botrightsummation = Keysym::botrightsummation;
		const rightmiddlesummation = Keysym::rightmiddlesummation;
		const lessthanequal = Keysym::lessthanequal;
		const notequal = Keysym::notequal;
		const greaterthanequal = Keysym::greaterthanequal;
		const integral = Keysym::integral;
		const therefore = Keysym::therefore;
		const variation = Keysym::variation;
		const infinity = Keysym::infinity;
		const nabla = Keysym::nabla;
		const approximate = Keysym::approximate;
		const similarequal = Keysym::similarequal;
		const ifonlyif = Keysym::ifonlyif;
		const implies = Keysym::implies;
		const identical = Keysym::identical;
		const radical = Keysym::radical;
		const includedin = Keysym::includedin;
		const includes = Keysym::includes;
		const intersection = Keysym::intersection;
		const union = Keysym::union;
		const logicaland = Keysym::logicaland;
		const logicalor = Keysym::logicalor;
		const partialderivative = Keysym::partialderivative;
		const function = Keysym::function;
		const leftarrow = Keysym::leftarrow;
		const uparrow = Keysym::uparrow;
		const rightarrow = Keysym::rightarrow;
		const downarrow = Keysym::downarrow;
		const blank = Keysym::blank;
		const soliddiamond = Keysym::soliddiamond;
		const checkerboard = Keysym::checkerboard;
		const ht = Keysym::ht;
		const ff = Keysym::ff;
		const cr = Keysym::cr;
		const lf = Keysym::lf;
		const nl = Keysym::nl;
		const vt = Keysym::vt;
		const lowrightcorner = Keysym::lowrightcorner;
		const uprightcorner = Keysym::uprightcorner;
		const upleftcorner = Keysym::upleftcorner;
		const lowleftcorner = Keysym::lowleftcorner;
		const crossinglines = Keysym::crossinglines;
		const horizlinescan1 = Keysym::horizlinescan1;
		const horizlinescan3 = Keysym::horizlinescan3;
		const horizlinescan5 = Keysym::horizlinescan5;
		const horizlinescan7 = Keysym::horizlinescan7;
		const horizlinescan9 = Keysym::horizlinescan9;
		const leftt = Keysym::leftt;
		const rightt = Keysym::rightt;
		const bott = Keysym::bott;
		const topt = Keysym::topt;
		const vertbar = Keysym::vertbar;
		const emspace = Keysym::emspace;
		const enspace = Keysym::enspace;
		const em3space = Keysym::em3space;
		const em4space = Keysym::em4space;
		const digitspace = Keysym::digitspace;
		const punctspace = Keysym::punctspace;
		const thinspace = Keysym::thinspace;
		const hairspace = Keysym::hairspace;
		const emdash = Keysym::emdash;
		const endash = Keysym::endash;
		const signifblank = Keysym::signifblank;
		const ellipsis = Keysym::ellipsis;
		const doubbaselinedot = Keysym::doubbaselinedot;
		const onethird = Keysym::onethird;
		const twothirds = Keysym::twothirds;
		const onefifth = Keysym::onefifth;
		const twofifths = Keysym::twofifths;
		const threefifths = Keysym::threefifths;
		const fourfifths = Keysym::fourfifths;
		const onesixth = Keysym::onesixth;
		const fivesixths = Keysym::fivesixths;
		const careof = Keysym::careof;
		const figdash = Keysym::figdash;
		const leftanglebracket = Keysym::leftanglebracket;
		const decimalpoint = Keysym::decimalpoint;
		const rightanglebracket = Keysym::rightanglebracket;
		const marker = Keysym::marker;
		const oneeighth = Keysym::oneeighth;
		const threeeighths = Keysym::threeeighths;
		const fiveeighths = Keysym::fiveeighths;
		const seveneighths = Keysym::seveneighths;
		const trademark = Keysym::trademark;
		const signaturemark = Keysym::signaturemark;
		const trademarkincircle = Keysym::trademarkincircle;
		const leftopentriangle = Keysym::leftopentriangle;
		const rightopentriangle = Keysym::rightopentriangle;
		const emopencircle = Keysym::emopencircle;
		const emopenrectangle = Keysym::emopenrectangle;
		const leftsinglequotemark = Keysym::leftsinglequotemark;
		const rightsinglequotemark = Keysym::rightsinglequotemark;
		const leftdoublequotemark = Keysym::leftdoublequotemark;
		const rightdoublequotemark = Keysym::rightdoublequotemark;
		const prescription = Keysym::prescription;
		const permille = Keysym::permille;
		const minutes = Keysym::minutes;
		const seconds = Keysym::seconds;
		const latincross = Keysym::latincross;
		const hexagram = Keysym::hexagram;
		const filledrectbullet = Keysym::filledrectbullet;
		const filledlefttribullet = Keysym::filledlefttribullet;
		const filledrighttribullet = Keysym::filledrighttribullet;
		const emfilledcircle = Keysym::emfilledcircle;
		const emfilledrect = Keysym::emfilledrect;
		const enopencircbullet = Keysym::enopencircbullet;
		const enopensquarebullet = Keysym::enopensquarebullet;
		const openrectbullet = Keysym::openrectbullet;
		const opentribulletup = Keysym::opentribulletup;
		const opentribulletdown = Keysym::opentribulletdown;
		const openstar = Keysym::openstar;
		const enfilledcircbullet = Keysym::enfilledcircbullet;
		const enfilledsqbullet = Keysym::enfilledsqbullet;
		const filledtribulletup = Keysym::filledtribulletup;
		const filledtribulletdown = Keysym::filledtribulletdown;
		const leftpointer = Keysym::leftpointer;
		const rightpointer = Keysym::rightpointer;
		const club = Keysym::club;
		const diamond = Keysym::diamond;
		const heart = Keysym::heart;
		const maltesecross = Keysym::maltesecross;
		const dagger = Keysym::dagger;
		const doubledagger = Keysym::doubledagger;
		const checkmark = Keysym::checkmark;
		const ballotcross = Keysym::ballotcross;
		const musicalsharp = Keysym::musicalsharp;
		const musicalflat = Keysym::musicalflat;
		const malesymbol = Keysym::malesymbol;
		const femalesymbol = Keysym::femalesymbol;
		const telephone = Keysym::telephone;
		const telephonerecorder = Keysym::telephonerecorder;
		const phonographcopyright = Keysym::phonographcopyright;
		const caret = Keysym::caret;
		const singlelowquotemark = Keysym::singlelowquotemark;
		const doublelowquotemark = Keysym::doublelowquotemark;
		const cursor = Keysym::cursor;
		const leftcaret = Keysym::leftcaret;
		const rightcaret = Keysym::rightcaret;
		const downcaret = Keysym::downcaret;
		const upcaret = Keysym::upcaret;
		const overbar = Keysym::overbar;
		const downtack = Keysym::downtack;
		const upshoe = Keysym::upshoe;
		const downstile = Keysym::downstile;
		const underbar = Keysym::underbar;
		const jot = Keysym::jot;
		const quad = Keysym::quad;
		const uptack = Keysym::uptack;
		const circle = Keysym::circle;
		const upstile = Keysym::upstile;
		const downshoe = Keysym::downshoe;
		const rightshoe = Keysym::rightshoe;
		const leftshoe = Keysym::leftshoe;
		const lefttack = Keysym::lefttack;
		const righttack = Keysym::righttack;
		const hebrew_doublelowline = Keysym::hebrew_doublelowline;
		const hebrew_aleph = Keysym::hebrew_aleph;
		const hebrew_bet = Keysym::hebrew_bet;
		const hebrew_beth = Keysym::hebrew_beth;
		const hebrew_gimel = Keysym::hebrew_gimel;
		const hebrew_gimmel = Keysym::hebrew_gimmel;
		const hebrew_dalet = Keysym::hebrew_dalet;
		const hebrew_daleth = Keysym::hebrew_daleth;
		const hebrew_he = Keysym::hebrew_he;
		const hebrew_waw = Keysym::hebrew_waw;
		const hebrew_zain = Keysym::hebrew_zain;
		const hebrew_zayin = Keysym::hebrew_zayin;
		const hebrew_chet = Keysym::hebrew_chet;
		const hebrew_het = Keysym::hebrew_het;
		const hebrew_tet = Keysym::hebrew_tet;
		const hebrew_teth = Keysym::hebrew_teth;
		const hebrew_yod = Keysym::hebrew_yod;
		const hebrew_finalkaph = Keysym::hebrew_finalkaph;
		const hebrew_kaph = Keysym::hebrew_kaph;
		const hebrew_lamed = Keysym::hebrew_lamed;
		const hebrew_finalmem = Keysym::hebrew_finalmem;
		const hebrew_mem = Keysym::hebrew_mem;
		const hebrew_finalnun = Keysym::hebrew_finalnun;
		const hebrew_nun = Keysym::hebrew_nun;
		const hebrew_samech = Keysym::hebrew_samech;
		const hebrew_samekh = Keysym::hebrew_samekh;
		const hebrew_ayin = Keysym::hebrew_ayin;
		const hebrew_finalpe = Keysym::hebrew_finalpe;
		const hebrew_pe = Keysym::hebrew_pe;
		const hebrew_finalzade = Keysym::hebrew_finalzade;
		const hebrew_finalzadi = Keysym::hebrew_finalzadi;
		const hebrew_zade = Keysym::hebrew_zade;
		const hebrew_zadi = Keysym::hebrew_zadi;
		const hebrew_qoph = Keysym::hebrew_qoph;
		const hebrew_kuf = Keysym::hebrew_kuf;
		const hebrew_resh = Keysym::hebrew_resh;
		const hebrew_shin = Keysym::hebrew_shin;
		const hebrew_taw = Keysym::hebrew_taw;
		const hebrew_taf = Keysym::hebrew_taf;
		const Hebrew_switch = Keysym::Hebrew_switch;
		const Thai_kokai = Keysym::Thai_kokai;
		const Thai_khokhai = Keysym::Thai_khokhai;
		const Thai_khokhuat = Keysym::Thai_khokhuat;
		const Thai_khokhwai = Keysym::Thai_khokhwai;
		const Thai_khokhon = Keysym::Thai_khokhon;
		const Thai_khorakhang = Keysym::Thai_khorakhang;
		const Thai_ngongu = Keysym::Thai_ngongu;
		const Thai_chochan = Keysym::Thai_chochan;
		const Thai_choching = Keysym::Thai_choching;
		const Thai_chochang = Keysym::Thai_chochang;
		const Thai_soso = Keysym::Thai_soso;
		const Thai_chochoe = Keysym::Thai_chochoe;
		const Thai_yoying = Keysym::Thai_yoying;
		const Thai_dochada = Keysym::Thai_dochada;
		const Thai_topatak = Keysym::Thai_topatak;
		const Thai_thothan = Keysym::Thai_thothan;
		const Thai_thonangmontho = Keysym::Thai_thonangmontho;
		const Thai_thophuthao = Keysym::Thai_thophuthao;
		const Thai_nonen = Keysym::Thai_nonen;
		const Thai_dodek = Keysym::Thai_dodek;
		const Thai_totao = Keysym::Thai_totao;
		const Thai_thothung = Keysym::Thai_thothung;
		const Thai_thothahan = Keysym::Thai_thothahan;
		const Thai_thothong = Keysym::Thai_thothong;
		const Thai_nonu = Keysym::Thai_nonu;
		const Thai_bobaimai = Keysym::Thai_bobaimai;
		const Thai_popla = Keysym::Thai_popla;
		const Thai_phophung = Keysym::Thai_phophung;
		const Thai_fofa = Keysym::Thai_fofa;
		const Thai_phophan = Keysym::Thai_phophan;
		const Thai_fofan = Keysym::Thai_fofan;
		const Thai_phosamphao = Keysym::Thai_phosamphao;
		const Thai_moma = Keysym::Thai_moma;
		const Thai_yoyak = Keysym::Thai_yoyak;
		const Thai_rorua = Keysym::Thai_rorua;
		const Thai_ru = Keysym::Thai_ru;
		const Thai_loling = Keysym::Thai_loling;
		const Thai_lu = Keysym::Thai_lu;
		const Thai_wowaen = Keysym::Thai_wowaen;
		const Thai_sosala = Keysym::Thai_sosala;
		const Thai_sorusi = Keysym::Thai_sorusi;
		const Thai_sosua = Keysym::Thai_sosua;
		const Thai_hohip = Keysym::Thai_hohip;
		const Thai_lochula = Keysym::Thai_lochula;
		const Thai_oang = Keysym::Thai_oang;
		const Thai_honokhuk = Keysym::Thai_honokhuk;
		const Thai_paiyannoi = Keysym::Thai_paiyannoi;
		const Thai_saraa = Keysym::Thai_saraa;
		const Thai_maihanakat = Keysym::Thai_maihanakat;
		const Thai_saraaa = Keysym::Thai_saraaa;
		const Thai_saraam = Keysym::Thai_saraam;
		const Thai_sarai = Keysym::Thai_sarai;
		const Thai_saraii = Keysym::Thai_saraii;
		const Thai_saraue = Keysym::Thai_saraue;
		const Thai_sarauee = Keysym::Thai_sarauee;
		const Thai_sarau = Keysym::Thai_sarau;
		const Thai_sarauu = Keysym::Thai_sarauu;
		const Thai_phinthu = Keysym::Thai_phinthu;
		const Thai_maihanakat_maitho = Keysym::Thai_maihanakat_maitho;
		const Thai_baht = Keysym::Thai_baht;
		const Thai_sarae = Keysym::Thai_sarae;
		const Thai_saraae = Keysym::Thai_saraae;
		const Thai_sarao = Keysym::Thai_sarao;
		const Thai_saraaimaimuan = Keysym::Thai_saraaimaimuan;
		const Thai_saraaimaimalai = Keysym::Thai_saraaimaimalai;
		const Thai_lakkhangyao = Keysym::Thai_lakkhangyao;
		const Thai_maiyamok = Keysym::Thai_maiyamok;
		const Thai_maitaikhu = Keysym::Thai_maitaikhu;
		const Thai_maiek = Keysym::Thai_maiek;
		const Thai_maitho = Keysym::Thai_maitho;
		const Thai_maitri = Keysym::Thai_maitri;
		const Thai_maichattawa = Keysym::Thai_maichattawa;
		const Thai_thanthakhat = Keysym::Thai_thanthakhat;
		const Thai_nikhahit = Keysym::Thai_nikhahit;
		const Thai_leksun = Keysym::Thai_leksun;
		const Thai_leknung = Keysym::Thai_leknung;
		const Thai_leksong = Keysym::Thai_leksong;
		const Thai_leksam = Keysym::Thai_leksam;
		const Thai_leksi = Keysym::Thai_leksi;
		const Thai_lekha = Keysym::Thai_lekha;
		const Thai_lekhok = Keysym::Thai_lekhok;
		const Thai_lekchet = Keysym::Thai_lekchet;
		const Thai_lekpaet = Keysym::Thai_lekpaet;
		const Thai_lekkao = Keysym::Thai_lekkao;
		const Hangul = Keysym::Hangul;
		const Hangul_Start = Keysym::Hangul_Start;
		const Hangul_End = Keysym::Hangul_End;
		const Hangul_Hanja = Keysym::Hangul_Hanja;
		const Hangul_Jamo = Keysym::Hangul_Jamo;
		const Hangul_Romaja = Keysym::Hangul_Romaja;
		const Hangul_Codeinput = Keysym::Hangul_Codeinput;
		const Hangul_Jeonja = Keysym::Hangul_Jeonja;
		const Hangul_Banja = Keysym::Hangul_Banja;
		const Hangul_PreHanja = Keysym::Hangul_PreHanja;
		const Hangul_PostHanja = Keysym::Hangul_PostHanja;
		const Hangul_SingleCandidate = Keysym::Hangul_SingleCandidate;
		const Hangul_MultipleCandidate = Keysym::Hangul_MultipleCandidate;
		const Hangul_PreviousCandidate = Keysym::Hangul_PreviousCandidate;
		const Hangul_Special = Keysym::Hangul_Special;
		const Hangul_switch = Keysym::Hangul_switch;
		const Hangul_Kiyeog = Keysym::Hangul_Kiyeog;
		const Hangul_SsangKiyeog = Keysym::Hangul_SsangKiyeog;
		const Hangul_KiyeogSios = Keysym::Hangul_KiyeogSios;
		const Hangul_Nieun = Keysym::Hangul_Nieun;
		const Hangul_NieunJieuj = Keysym::Hangul_NieunJieuj;
		const Hangul_NieunHieuh = Keysym::Hangul_NieunHieuh;
		const Hangul_Dikeud = Keysym::Hangul_Dikeud;
		const Hangul_SsangDikeud = Keysym::Hangul_SsangDikeud;
		const Hangul_Rieul = Keysym::Hangul_Rieul;
		const Hangul_RieulKiyeog = Keysym::Hangul_RieulKiyeog;
		const Hangul_RieulMieum = Keysym::Hangul_RieulMieum;
		const Hangul_RieulPieub = Keysym::Hangul_RieulPieub;
		const Hangul_RieulSios = Keysym::Hangul_RieulSios;
		const Hangul_RieulTieut = Keysym::Hangul_RieulTieut;
		const Hangul_RieulPhieuf = Keysym::Hangul_RieulPhieuf;
		const Hangul_RieulHieuh = Keysym::Hangul_RieulHieuh;
		const Hangul_Mieum = Keysym::Hangul_Mieum;
		const Hangul_Pieub = Keysym::Hangul_Pieub;
		const Hangul_SsangPieub = Keysym::Hangul_SsangPieub;
		const Hangul_PieubSios = Keysym::Hangul_PieubSios;
		const Hangul_Sios = Keysym::Hangul_Sios;
		const Hangul_SsangSios = Keysym::Hangul_SsangSios;
		const Hangul_Ieung = Keysym::Hangul_Ieung;
		const Hangul_Jieuj = Keysym::Hangul_Jieuj;
		const Hangul_SsangJieuj = Keysym::Hangul_SsangJieuj;
		const Hangul_Cieuc = Keysym::Hangul_Cieuc;
		const Hangul_Khieuq = Keysym::Hangul_Khieuq;
		const Hangul_Tieut = Keysym::Hangul_Tieut;
		const Hangul_Phieuf = Keysym::Hangul_Phieuf;
		const Hangul_Hieuh = Keysym::Hangul_Hieuh;
		const Hangul_A = Keysym::Hangul_A;
		const Hangul_AE = Keysym::Hangul_AE;
		const Hangul_YA = Keysym::Hangul_YA;
		const Hangul_YAE = Keysym::Hangul_YAE;
		const Hangul_EO = Keysym::Hangul_EO;
		const Hangul_E = Keysym::Hangul_E;
		const Hangul_YEO = Keysym::Hangul_YEO;
		const Hangul_YE = Keysym::Hangul_YE;
		const Hangul_O = Keysym::Hangul_O;
		const Hangul_WA = Keysym::Hangul_WA;
		const Hangul_WAE = Keysym::Hangul_WAE;
		const Hangul_OE = Keysym::Hangul_OE;
		const Hangul_YO = Keysym::Hangul_YO;
		const Hangul_U = Keysym::Hangul_U;
		const Hangul_WEO = Keysym::Hangul_WEO;
		const Hangul_WE = Keysym::Hangul_WE;
		const Hangul_WI = Keysym::Hangul_WI;
		const Hangul_YU = Keysym::Hangul_YU;
		const Hangul_EU = Keysym::Hangul_EU;
		const Hangul_YI = Keysym::Hangul_YI;
		const Hangul_I = Keysym::Hangul_I;
		const Hangul_J_Kiyeog = Keysym::Hangul_J_Kiyeog;
		const Hangul_J_SsangKiyeog = Keysym::Hangul_J_SsangKiyeog;
		const Hangul_J_KiyeogSios = Keysym::Hangul_J_KiyeogSios;
		const Hangul_J_Nieun = Keysym::Hangul_J_Nieun;
		const Hangul_J_NieunJieuj = Keysym::Hangul_J_NieunJieuj;
		const Hangul_J_NieunHieuh = Keysym::Hangul_J_NieunHieuh;
		const Hangul_J_Dikeud = Keysym::Hangul_J_Dikeud;
		const Hangul_J_Rieul = Keysym::Hangul_J_Rieul;
		const Hangul_J_RieulKiyeog = Keysym::Hangul_J_RieulKiyeog;
		const Hangul_J_RieulMieum = Keysym::Hangul_J_RieulMieum;
		const Hangul_J_RieulPieub = Keysym::Hangul_J_RieulPieub;
		const Hangul_J_RieulSios = Keysym::Hangul_J_RieulSios;
		const Hangul_J_RieulTieut = Keysym::Hangul_J_RieulTieut;
		const Hangul_J_RieulPhieuf = Keysym::Hangul_J_RieulPhieuf;
		const Hangul_J_RieulHieuh = Keysym::Hangul_J_RieulHieuh;
		const Hangul_J_Mieum = Keysym::Hangul_J_Mieum;
		const Hangul_J_Pieub = Keysym::Hangul_J_Pieub;
		const Hangul_J_PieubSios = Keysym::Hangul_J_PieubSios;
		const Hangul_J_Sios = Keysym::Hangul_J_Sios;
		const Hangul_J_SsangSios = Keysym::Hangul_J_SsangSios;
		const Hangul_J_Ieung = Keysym::Hangul_J_Ieung;
		const Hangul_J_Jieuj = Keysym::Hangul_J_Jieuj;
		const Hangul_J_Cieuc = Keysym::Hangul_J_Cieuc;
		const Hangul_J_Khieuq = Keysym::Hangul_J_Khieuq;
		const Hangul_J_Tieut = Keysym::Hangul_J_Tieut;
		const Hangul_J_Phieuf = Keysym::Hangul_J_Phieuf;
		const Hangul_J_Hieuh = Keysym::Hangul_J_Hieuh;
		const Hangul_RieulYeorinHieuh = Keysym::Hangul_RieulYeorinHieuh;
		const Hangul_SunkyeongeumMieum = Keysym::Hangul_SunkyeongeumMieum;
		const Hangul_SunkyeongeumPieub = Keysym::Hangul_SunkyeongeumPieub;
		const Hangul_PanSios = Keysym::Hangul_PanSios;
		const Hangul_KkogjiDalrinIeung = Keysym::Hangul_KkogjiDalrinIeung;
		const Hangul_SunkyeongeumPhieuf = Keysym::Hangul_SunkyeongeumPhieuf;
		const Hangul_YeorinHieuh = Keysym::Hangul_YeorinHieuh;
		const Hangul_AraeA = Keysym::Hangul_AraeA;
		const Hangul_AraeAE = Keysym::Hangul_AraeAE;
		const Hangul_J_PanSios = Keysym::Hangul_J_PanSios;
		const Hangul_J_KkogjiDalrinIeung = Keysym::Hangul_J_KkogjiDalrinIeung;
		const Hangul_J_YeorinHieuh = Keysym::Hangul_J_YeorinHieuh;
		const Korean_Won = Keysym::Korean_Won;
		const Armenian_ligature_ew = Keysym::Armenian_ligature_ew;
		const Armenian_full_stop = Keysym::Armenian_full_stop;
		const Armenian_verjaket = Keysym::Armenian_verjaket;
		const Armenian_separation_mark = Keysym::Armenian_separation_mark;
		const Armenian_but = Keysym::Armenian_but;
		const Armenian_hyphen = Keysym::Armenian_hyphen;
		const Armenian_yentamna = Keysym::Armenian_yentamna;
		const Armenian_exclam = Keysym::Armenian_exclam;
		const Armenian_amanak = Keysym::Armenian_amanak;
		const Armenian_accent = Keysym::Armenian_accent;
		const Armenian_shesht = Keysym::Armenian_shesht;
		const Armenian_question = Keysym::Armenian_question;
		const Armenian_paruyk = Keysym::Armenian_paruyk;
		const Armenian_AYB = Keysym::Armenian_AYB;
		const Armenian_ayb = Keysym::Armenian_ayb;
		const Armenian_BEN = Keysym::Armenian_BEN;
		const Armenian_ben = Keysym::Armenian_ben;
		const Armenian_GIM = Keysym::Armenian_GIM;
		const Armenian_gim = Keysym::Armenian_gim;
		const Armenian_DA = Keysym::Armenian_DA;
		const Armenian_da = Keysym::Armenian_da;
		const Armenian_YECH = Keysym::Armenian_YECH;
		const Armenian_yech = Keysym::Armenian_yech;
		const Armenian_ZA = Keysym::Armenian_ZA;
		const Armenian_za = Keysym::Armenian_za;
		const Armenian_E = Keysym::Armenian_E;
		const Armenian_e = Keysym::Armenian_e;
		const Armenian_AT = Keysym::Armenian_AT;
		const Armenian_at = Keysym::Armenian_at;
		const Armenian_TO = Keysym::Armenian_TO;
		const Armenian_to = Keysym::Armenian_to;
		const Armenian_ZHE = Keysym::Armenian_ZHE;
		const Armenian_zhe = Keysym::Armenian_zhe;
		const Armenian_INI = Keysym::Armenian_INI;
		const Armenian_ini = Keysym::Armenian_ini;
		const Armenian_LYUN = Keysym::Armenian_LYUN;
		const Armenian_lyun = Keysym::Armenian_lyun;
		const Armenian_KHE = Keysym::Armenian_KHE;
		const Armenian_khe = Keysym::Armenian_khe;
		const Armenian_TSA = Keysym::Armenian_TSA;
		const Armenian_tsa = Keysym::Armenian_tsa;
		const Armenian_KEN = Keysym::Armenian_KEN;
		const Armenian_ken = Keysym::Armenian_ken;
		const Armenian_HO = Keysym::Armenian_HO;
		const Armenian_ho = Keysym::Armenian_ho;
		const Armenian_DZA = Keysym::Armenian_DZA;
		const Armenian_dza = Keysym::Armenian_dza;
		const Armenian_GHAT = Keysym::Armenian_GHAT;
		const Armenian_ghat = Keysym::Armenian_ghat;
		const Armenian_TCHE = Keysym::Armenian_TCHE;
		const Armenian_tche = Keysym::Armenian_tche;
		const Armenian_MEN = Keysym::Armenian_MEN;
		const Armenian_men = Keysym::Armenian_men;
		const Armenian_HI = Keysym::Armenian_HI;
		const Armenian_hi = Keysym::Armenian_hi;
		const Armenian_NU = Keysym::Armenian_NU;
		const Armenian_nu = Keysym::Armenian_nu;
		const Armenian_SHA = Keysym::Armenian_SHA;
		const Armenian_sha = Keysym::Armenian_sha;
		const Armenian_VO = Keysym::Armenian_VO;
		const Armenian_vo = Keysym::Armenian_vo;
		const Armenian_CHA = Keysym::Armenian_CHA;
		const Armenian_cha = Keysym::Armenian_cha;
		const Armenian_PE = Keysym::Armenian_PE;
		const Armenian_pe = Keysym::Armenian_pe;
		const Armenian_JE = Keysym::Armenian_JE;
		const Armenian_je = Keysym::Armenian_je;
		const Armenian_RA = Keysym::Armenian_RA;
		const Armenian_ra = Keysym::Armenian_ra;
		const Armenian_SE = Keysym::Armenian_SE;
		const Armenian_se = Keysym::Armenian_se;
		const Armenian_VEV = Keysym::Armenian_VEV;
		const Armenian_vev = Keysym::Armenian_vev;
		const Armenian_TYUN = Keysym::Armenian_TYUN;
		const Armenian_tyun = Keysym::Armenian_tyun;
		const Armenian_RE = Keysym::Armenian_RE;
		const Armenian_re = Keysym::Armenian_re;
		const Armenian_TSO = Keysym::Armenian_TSO;
		const Armenian_tso = Keysym::Armenian_tso;
		const Armenian_VYUN = Keysym::Armenian_VYUN;
		const Armenian_vyun = Keysym::Armenian_vyun;
		const Armenian_PYUR = Keysym::Armenian_PYUR;
		const Armenian_pyur = Keysym::Armenian_pyur;
		const Armenian_KE = Keysym::Armenian_KE;
		const Armenian_ke = Keysym::Armenian_ke;
		const Armenian_O = Keysym::Armenian_O;
		const Armenian_o = Keysym::Armenian_o;
		const Armenian_FE = Keysym::Armenian_FE;
		const Armenian_fe = Keysym::Armenian_fe;
		const Armenian_apostrophe = Keysym::Armenian_apostrophe;
		const Georgian_an = Keysym::Georgian_an;
		const Georgian_ban = Keysym::Georgian_ban;
		const Georgian_gan = Keysym::Georgian_gan;
		const Georgian_don = Keysym::Georgian_don;
		const Georgian_en = Keysym::Georgian_en;
		const Georgian_vin = Keysym::Georgian_vin;
		const Georgian_zen = Keysym::Georgian_zen;
		const Georgian_tan = Keysym::Georgian_tan;
		const Georgian_in = Keysym::Georgian_in;
		const Georgian_kan = Keysym::Georgian_kan;
		const Georgian_las = Keysym::Georgian_las;
		const Georgian_man = Keysym::Georgian_man;
		const Georgian_nar = Keysym::Georgian_nar;
		const Georgian_on = Keysym::Georgian_on;
		const Georgian_par = Keysym::Georgian_par;
		const Georgian_zhar = Keysym::Georgian_zhar;
		const Georgian_rae = Keysym::Georgian_rae;
		const Georgian_san = Keysym::Georgian_san;
		const Georgian_tar = Keysym::Georgian_tar;
		const Georgian_un = Keysym::Georgian_un;
		const Georgian_phar = Keysym::Georgian_phar;
		const Georgian_khar = Keysym::Georgian_khar;
		const Georgian_ghan = Keysym::Georgian_ghan;
		const Georgian_qar = Keysym::Georgian_qar;
		const Georgian_shin = Keysym::Georgian_shin;
		const Georgian_chin = Keysym::Georgian_chin;
		const Georgian_can = Keysym::Georgian_can;
		const Georgian_jil = Keysym::Georgian_jil;
		const Georgian_cil = Keysym::Georgian_cil;
		const Georgian_char = Keysym::Georgian_char;
		const Georgian_xan = Keysym::Georgian_xan;
		const Georgian_jhan = Keysym::Georgian_jhan;
		const Georgian_hae = Keysym::Georgian_hae;
		const Georgian_he = Keysym::Georgian_he;
		const Georgian_hie = Keysym::Georgian_hie;
		const Georgian_we = Keysym::Georgian_we;
		const Georgian_har = Keysym::Georgian_har;
		const Georgian_hoe = Keysym::Georgian_hoe;
		const Georgian_fi = Keysym::Georgian_fi;
		const Xabovedot = Keysym::Xabovedot;
		const Ibreve = Keysym::Ibreve;
		const Zstroke = Keysym::Zstroke;
		const Gcaron = Keysym::Gcaron;
		const Ocaron = Keysym::Ocaron;
		const Obarred = Keysym::Obarred;
		const xabovedot = Keysym::xabovedot;
		const ibreve = Keysym::ibreve;
		const zstroke = Keysym::zstroke;
		const gcaron = Keysym::gcaron;
		const ocaron = Keysym::ocaron;
		const obarred = Keysym::obarred;
		const SCHWA = Keysym::SCHWA;
		const schwa = Keysym::schwa;
		const EZH = Keysym::EZH;
		const ezh = Keysym::ezh;
		const Lbelowdot = Keysym::Lbelowdot;
		const lbelowdot = Keysym::lbelowdot;
		const Abelowdot = Keysym::Abelowdot;
		const abelowdot = Keysym::abelowdot;
		const Ahook = Keysym::Ahook;
		const ahook = Keysym::ahook;
		const Acircumflexacute = Keysym::Acircumflexacute;
		const acircumflexacute = Keysym::acircumflexacute;
		const Acircumflexgrave = Keysym::Acircumflexgrave;
		const acircumflexgrave = Keysym::acircumflexgrave;
		const Acircumflexhook = Keysym::Acircumflexhook;
		const acircumflexhook = Keysym::acircumflexhook;
		const Acircumflextilde = Keysym::Acircumflextilde;
		const acircumflextilde = Keysym::acircumflextilde;
		const Acircumflexbelowdot = Keysym::Acircumflexbelowdot;
		const acircumflexbelowdot = Keysym::acircumflexbelowdot;
		const Abreveacute = Keysym::Abreveacute;
		const abreveacute = Keysym::abreveacute;
		const Abrevegrave = Keysym::Abrevegrave;
		const abrevegrave = Keysym::abrevegrave;
		const Abrevehook = Keysym::Abrevehook;
		const abrevehook = Keysym::abrevehook;
		const Abrevetilde = Keysym::Abrevetilde;
		const abrevetilde = Keysym::abrevetilde;
		const Abrevebelowdot = Keysym::Abrevebelowdot;
		const abrevebelowdot = Keysym::abrevebelowdot;
		const Ebelowdot = Keysym::Ebelowdot;
		const ebelowdot = Keysym::ebelowdot;
		const Ehook = Keysym::Ehook;
		const ehook = Keysym::ehook;
		const Etilde = Keysym::Etilde;
		const etilde = Keysym::etilde;
		const Ecircumflexacute = Keysym::Ecircumflexacute;
		const ecircumflexacute = Keysym::ecircumflexacute;
		const Ecircumflexgrave = Keysym::Ecircumflexgrave;
		const ecircumflexgrave = Keysym::ecircumflexgrave;
		const Ecircumflexhook = Keysym::Ecircumflexhook;
		const ecircumflexhook = Keysym::ecircumflexhook;
		const Ecircumflextilde = Keysym::Ecircumflextilde;
		const ecircumflextilde = Keysym::ecircumflextilde;
		const Ecircumflexbelowdot = Keysym::Ecircumflexbelowdot;
		const ecircumflexbelowdot = Keysym::ecircumflexbelowdot;
		const Ihook = Keysym::Ihook;
		const ihook = Keysym::ihook;
		const Ibelowdot = Keysym::Ibelowdot;
		const ibelowdot = Keysym::ibelowdot;
		const Obelowdot = Keysym::Obelowdot;
		const obelowdot = Keysym::obelowdot;
		const Ohook = Keysym::Ohook;
		const ohook = Keysym::ohook;
		const Ocircumflexacute = Keysym::Ocircumflexacute;
		const ocircumflexacute = Keysym::ocircumflexacute;
		const Ocircumflexgrave = Keysym::Ocircumflexgrave;
		const ocircumflexgrave = Keysym::ocircumflexgrave;
		const Ocircumflexhook = Keysym::Ocircumflexhook;
		const ocircumflexhook = Keysym::ocircumflexhook;
		const Ocircumflextilde = Keysym::Ocircumflextilde;
		const ocircumflextilde = Keysym::ocircumflextilde;
		const Ocircumflexbelowdot = Keysym::Ocircumflexbelowdot;
		const ocircumflexbelowdot = Keysym::ocircumflexbelowdot;
		const Ohornacute = Keysym::Ohornacute;
		const ohornacute = Keysym::ohornacute;
		const Ohorngrave = Keysym::Ohorngrave;
		const ohorngrave = Keysym::ohorngrave;
		const Ohornhook = Keysym::Ohornhook;
		const ohornhook = Keysym::ohornhook;
		const Ohorntilde = Keysym::Ohorntilde;
		const ohorntilde = Keysym::ohorntilde;
		const Ohornbelowdot = Keysym::Ohornbelowdot;
		const ohornbelowdot = Keysym::ohornbelowdot;
		const Ubelowdot = Keysym::Ubelowdot;
		const ubelowdot = Keysym::ubelowdot;
		const Uhook = Keysym::Uhook;
		const uhook = Keysym::uhook;
		const Uhornacute = Keysym::Uhornacute;
		const uhornacute = Keysym::uhornacute;
		const Uhorngrave = Keysym::Uhorngrave;
		const uhorngrave = Keysym::uhorngrave;
		const Uhornhook = Keysym::Uhornhook;
		const uhornhook = Keysym::uhornhook;
		const Uhorntilde = Keysym::Uhorntilde;
		const uhorntilde = Keysym::uhorntilde;
		const Uhornbelowdot = Keysym::Uhornbelowdot;
		const uhornbelowdot = Keysym::uhornbelowdot;
		const Ybelowdot = Keysym::Ybelowdot;
		const ybelowdot = Keysym::ybelowdot;
		const Yhook = Keysym::Yhook;
		const yhook = Keysym::yhook;
		const Ytilde = Keysym::Ytilde;
		const ytilde = Keysym::ytilde;
		const Ohorn = Keysym::Ohorn;
		const ohorn = Keysym::ohorn;
		const Uhorn = Keysym::Uhorn;
		const uhorn = Keysym::uhorn;
		const combining_tilde = Keysym::combining_tilde;
		const combining_grave = Keysym::combining_grave;
		const combining_acute = Keysym::combining_acute;
		const combining_hook = Keysym::combining_hook;
		const combining_belowdot = Keysym::combining_belowdot;
		const EcuSign = Keysym::EcuSign;
		const ColonSign = Keysym::ColonSign;
		const CruzeiroSign = Keysym::CruzeiroSign;
		const FFrancSign = Keysym::FFrancSign;
		const LiraSign = Keysym::LiraSign;
		const MillSign = Keysym::MillSign;
		const NairaSign = Keysym::NairaSign;
		const PesetaSign = Keysym::PesetaSign;
		const RupeeSign = Keysym::RupeeSign;
		const WonSign = Keysym::WonSign;
		const NewSheqelSign = Keysym::NewSheqelSign;
		const DongSign = Keysym::DongSign;
		const EuroSign = Keysym::EuroSign;
		const zerosuperior = Keysym::zerosuperior;
		const foursuperior = Keysym::foursuperior;
		const fivesuperior = Keysym::fivesuperior;
		const sixsuperior = Keysym::sixsuperior;
		const sevensuperior = Keysym::sevensuperior;
		const eightsuperior = Keysym::eightsuperior;
		const ninesuperior = Keysym::ninesuperior;
		const zerosubscript = Keysym::zerosubscript;
		const onesubscript = Keysym::onesubscript;
		const twosubscript = Keysym::twosubscript;
		const threesubscript = Keysym::threesubscript;
		const foursubscript = Keysym::foursubscript;
		const fivesubscript = Keysym::fivesubscript;
		const sixsubscript = Keysym::sixsubscript;
		const sevensubscript = Keysym::sevensubscript;
		const eightsubscript = Keysym::eightsubscript;
		const ninesubscript = Keysym::ninesubscript;
		const partdifferential = Keysym::partdifferential;
		const emptyset = Keysym::emptyset;
		const elementof = Keysym::elementof;
		const notelementof = Keysym::notelementof;
		const containsas = Keysym::containsas;
		const squareroot = Keysym::squareroot;
		const cuberoot = Keysym::cuberoot;
		const fourthroot = Keysym::fourthroot;
		const dintegral = Keysym::dintegral;
		const tintegral = Keysym::tintegral;
		const because = Keysym::because;
		const approxeq = Keysym::approxeq;
		const notapproxeq = Keysym::notapproxeq;
		const notidentical = Keysym::notidentical;
		const stricteq = Keysym::stricteq;
		const braille_dot_1 = Keysym::braille_dot_1;
		const braille_dot_2 = Keysym::braille_dot_2;
		const braille_dot_3 = Keysym::braille_dot_3;
		const braille_dot_4 = Keysym::braille_dot_4;
		const braille_dot_5 = Keysym::braille_dot_5;
		const braille_dot_6 = Keysym::braille_dot_6;
		const braille_dot_7 = Keysym::braille_dot_7;
		const braille_dot_8 = Keysym::braille_dot_8;
		const braille_dot_9 = Keysym::braille_dot_9;
		const braille_dot_10 = Keysym::braille_dot_10;
		const braille_blank = Keysym::braille_blank;
		const braille_dots_1 = Keysym::braille_dots_1;
		const braille_dots_2 = Keysym::braille_dots_2;
		const braille_dots_12 = Keysym::braille_dots_12;
		const braille_dots_3 = Keysym::braille_dots_3;
		const braille_dots_13 = Keysym::braille_dots_13;
		const braille_dots_23 = Keysym::braille_dots_23;
		const braille_dots_123 = Keysym::braille_dots_123;
		const braille_dots_4 = Keysym::braille_dots_4;
		const braille_dots_14 = Keysym::braille_dots_14;
		const braille_dots_24 = Keysym::braille_dots_24;
		const braille_dots_124 = Keysym::braille_dots_124;
		const braille_dots_34 = Keysym::braille_dots_34;
		const braille_dots_134 = Keysym::braille_dots_134;
		const braille_dots_234 = Keysym::braille_dots_234;
		const braille_dots_1234 = Keysym::braille_dots_1234;
		const braille_dots_5 = Keysym::braille_dots_5;
		const braille_dots_15 = Keysym::braille_dots_15;
		const braille_dots_25 = Keysym::braille_dots_25;
		const braille_dots_125 = Keysym::braille_dots_125;
		const braille_dots_35 = Keysym::braille_dots_35;
		const braille_dots_135 = Keysym::braille_dots_135;
		const braille_dots_235 = Keysym::braille_dots_235;
		const braille_dots_1235 = Keysym::braille_dots_1235;
		const braille_dots_45 = Keysym::braille_dots_45;
		const braille_dots_145 = Keysym::braille_dots_145;
		const braille_dots_245 = Keysym::braille_dots_245;
		const braille_dots_1245 = Keysym::braille_dots_1245;
		const braille_dots_345 = Keysym::braille_dots_345;
		const braille_dots_1345 = Keysym::braille_dots_1345;
		const braille_dots_2345 = Keysym::braille_dots_2345;
		const braille_dots_12345 = Keysym::braille_dots_12345;
		const braille_dots_6 = Keysym::braille_dots_6;
		const braille_dots_16 = Keysym::braille_dots_16;
		const braille_dots_26 = Keysym::braille_dots_26;
		const braille_dots_126 = Keysym::braille_dots_126;
		const braille_dots_36 = Keysym::braille_dots_36;
		const braille_dots_136 = Keysym::braille_dots_136;
		const braille_dots_236 = Keysym::braille_dots_236;
		const braille_dots_1236 = Keysym::braille_dots_1236;
		const braille_dots_46 = Keysym::braille_dots_46;
		const braille_dots_146 = Keysym::braille_dots_146;
		const braille_dots_246 = Keysym::braille_dots_246;
		const braille_dots_1246 = Keysym::braille_dots_1246;
		const braille_dots_346 = Keysym::braille_dots_346;
		const braille_dots_1346 = Keysym::braille_dots_1346;
		const braille_dots_2346 = Keysym::braille_dots_2346;
		const braille_dots_12346 = Keysym::braille_dots_12346;
		const braille_dots_56 = Keysym::braille_dots_56;
		const braille_dots_156 = Keysym::braille_dots_156;
		const braille_dots_256 = Keysym::braille_dots_256;
		const braille_dots_1256 = Keysym::braille_dots_1256;
		const braille_dots_356 = Keysym::braille_dots_356;
		const braille_dots_1356 = Keysym::braille_dots_1356;
		const braille_dots_2356 = Keysym::braille_dots_2356;
		const braille_dots_12356 = Keysym::braille_dots_12356;
		const braille_dots_456 = Keysym::braille_dots_456;
		const braille_dots_1456 = Keysym::braille_dots_1456;
		const braille_dots_2456 = Keysym::braille_dots_2456;
		const braille_dots_12456 = Keysym::braille_dots_12456;
		const braille_dots_3456 = Keysym::braille_dots_3456;
		const braille_dots_13456 = Keysym::braille_dots_13456;
		const braille_dots_23456 = Keysym::braille_dots_23456;
		const braille_dots_123456 = Keysym::braille_dots_123456;
		const braille_dots_7 = Keysym::braille_dots_7;
		const braille_dots_17 = Keysym::braille_dots_17;
		const braille_dots_27 = Keysym::braille_dots_27;
		const braille_dots_127 = Keysym::braille_dots_127;
		const braille_dots_37 = Keysym::braille_dots_37;
		const braille_dots_137 = Keysym::braille_dots_137;
		const braille_dots_237 = Keysym::braille_dots_237;
		const braille_dots_1237 = Keysym::braille_dots_1237;
		const braille_dots_47 = Keysym::braille_dots_47;
		const braille_dots_147 = Keysym::braille_dots_147;
		const braille_dots_247 = Keysym::braille_dots_247;
		const braille_dots_1247 = Keysym::braille_dots_1247;
		const braille_dots_347 = Keysym::braille_dots_347;
		const braille_dots_1347 = Keysym::braille_dots_1347;
		const braille_dots_2347 = Keysym::braille_dots_2347;
		const braille_dots_12347 = Keysym::braille_dots_12347;
		const braille_dots_57 = Keysym::braille_dots_57;
		const braille_dots_157 = Keysym::braille_dots_157;
		const braille_dots_257 = Keysym::braille_dots_257;
		const braille_dots_1257 = Keysym::braille_dots_1257;
		const braille_dots_357 = Keysym::braille_dots_357;
		const braille_dots_1357 = Keysym::braille_dots_1357;
		const braille_dots_2357 = Keysym::braille_dots_2357;
		const braille_dots_12357 = Keysym::braille_dots_12357;
		const braille_dots_457 = Keysym::braille_dots_457;
		const braille_dots_1457 = Keysym::braille_dots_1457;
		const braille_dots_2457 = Keysym::braille_dots_2457;
		const braille_dots_12457 = Keysym::braille_dots_12457;
		const braille_dots_3457 = Keysym::braille_dots_3457;
		const braille_dots_13457 = Keysym::braille_dots_13457;
		const braille_dots_23457 = Keysym::braille_dots_23457;
		const braille_dots_123457 = Keysym::braille_dots_123457;
		const braille_dots_67 = Keysym::braille_dots_67;
		const braille_dots_167 = Keysym::braille_dots_167;
		const braille_dots_267 = Keysym::braille_dots_267;
		const braille_dots_1267 = Keysym::braille_dots_1267;
		const braille_dots_367 = Keysym::braille_dots_367;
		const braille_dots_1367 = Keysym::braille_dots_1367;
		const braille_dots_2367 = Keysym::braille_dots_2367;
		const braille_dots_12367 = Keysym::braille_dots_12367;
		const braille_dots_467 = Keysym::braille_dots_467;
		const braille_dots_1467 = Keysym::braille_dots_1467;
		const braille_dots_2467 = Keysym::braille_dots_2467;
		const braille_dots_12467 = Keysym::braille_dots_12467;
		const braille_dots_3467 = Keysym::braille_dots_3467;
		const braille_dots_13467 = Keysym::braille_dots_13467;
		const braille_dots_23467 = Keysym::braille_dots_23467;
		const braille_dots_123467 = Keysym::braille_dots_123467;
		const braille_dots_567 = Keysym::braille_dots_567;
		const braille_dots_1567 = Keysym::braille_dots_1567;
		const braille_dots_2567 = Keysym::braille_dots_2567;
		const braille_dots_12567 = Keysym::braille_dots_12567;
		const braille_dots_3567 = Keysym::braille_dots_3567;
		const braille_dots_13567 = Keysym::braille_dots_13567;
		const braille_dots_23567 = Keysym::braille_dots_23567;
		const braille_dots_123567 = Keysym::braille_dots_123567;
		const braille_dots_4567 = Keysym::braille_dots_4567;
		const braille_dots_14567 = Keysym::braille_dots_14567;
		const braille_dots_24567 = Keysym::braille_dots_24567;
		const braille_dots_124567 = Keysym::braille_dots_124567;
		const braille_dots_34567 = Keysym::braille_dots_34567;
		const braille_dots_134567 = Keysym::braille_dots_134567;
		const braille_dots_234567 = Keysym::braille_dots_234567;
		const braille_dots_1234567 = Keysym::braille_dots_1234567;
		const braille_dots_8 = Keysym::braille_dots_8;
		const braille_dots_18 = Keysym::braille_dots_18;
		const braille_dots_28 = Keysym::braille_dots_28;
		const braille_dots_128 = Keysym::braille_dots_128;
		const braille_dots_38 = Keysym::braille_dots_38;
		const braille_dots_138 = Keysym::braille_dots_138;
		const braille_dots_238 = Keysym::braille_dots_238;
		const braille_dots_1238 = Keysym::braille_dots_1238;
		const braille_dots_48 = Keysym::braille_dots_48;
		const braille_dots_148 = Keysym::braille_dots_148;
		const braille_dots_248 = Keysym::braille_dots_248;
		const braille_dots_1248 = Keysym::braille_dots_1248;
		const braille_dots_348 = Keysym::braille_dots_348;
		const braille_dots_1348 = Keysym::braille_dots_1348;
		const braille_dots_2348 = Keysym::braille_dots_2348;
		const braille_dots_12348 = Keysym::braille_dots_12348;
		const braille_dots_58 = Keysym::braille_dots_58;
		const braille_dots_158 = Keysym::braille_dots_158;
		const braille_dots_258 = Keysym::braille_dots_258;
		const braille_dots_1258 = Keysym::braille_dots_1258;
		const braille_dots_358 = Keysym::braille_dots_358;
		const braille_dots_1358 = Keysym::braille_dots_1358;
		const braille_dots_2358 = Keysym::braille_dots_2358;
		const braille_dots_12358 = Keysym::braille_dots_12358;
		const braille_dots_458 = Keysym::braille_dots_458;
		const braille_dots_1458 = Keysym::braille_dots_1458;
		const braille_dots_2458 = Keysym::braille_dots_2458;
		const braille_dots_12458 = Keysym::braille_dots_12458;
		const braille_dots_3458 = Keysym::braille_dots_3458;
		const braille_dots_13458 = Keysym::braille_dots_13458;
		const braille_dots_23458 = Keysym::braille_dots_23458;
		const braille_dots_123458 = Keysym::braille_dots_123458;
		const braille_dots_68 = Keysym::braille_dots_68;
		const braille_dots_168 = Keysym::braille_dots_168;
		const braille_dots_268 = Keysym::braille_dots_268;
		const braille_dots_1268 = Keysym::braille_dots_1268;
		const braille_dots_368 = Keysym::braille_dots_368;
		const braille_dots_1368 = Keysym::braille_dots_1368;
		const braille_dots_2368 = Keysym::braille_dots_2368;
		const braille_dots_12368 = Keysym::braille_dots_12368;
		const braille_dots_468 = Keysym::braille_dots_468;
		const braille_dots_1468 = Keysym::braille_dots_1468;
		const braille_dots_2468 = Keysym::braille_dots_2468;
		const braille_dots_12468 = Keysym::braille_dots_12468;
		const braille_dots_3468 = Keysym::braille_dots_3468;
		const braille_dots_13468 = Keysym::braille_dots_13468;
		const braille_dots_23468 = Keysym::braille_dots_23468;
		const braille_dots_123468 = Keysym::braille_dots_123468;
		const braille_dots_568 = Keysym::braille_dots_568;
		const braille_dots_1568 = Keysym::braille_dots_1568;
		const braille_dots_2568 = Keysym::braille_dots_2568;
		const braille_dots_12568 = Keysym::braille_dots_12568;
		const braille_dots_3568 = Keysym::braille_dots_3568;
		const braille_dots_13568 = Keysym::braille_dots_13568;
		const braille_dots_23568 = Keysym::braille_dots_23568;
		const braille_dots_123568 = Keysym::braille_dots_123568;
		const braille_dots_4568 = Keysym::braille_dots_4568;
		const braille_dots_14568 = Keysym::braille_dots_14568;
		const braille_dots_24568 = Keysym::braille_dots_24568;
		const braille_dots_124568 = Keysym::braille_dots_124568;
		const braille_dots_34568 = Keysym::braille_dots_34568;
		const braille_dots_134568 = Keysym::braille_dots_134568;
		const braille_dots_234568 = Keysym::braille_dots_234568;
		const braille_dots_1234568 = Keysym::braille_dots_1234568;
		const braille_dots_78 = Keysym::braille_dots_78;
		const braille_dots_178 = Keysym::braille_dots_178;
		const braille_dots_278 = Keysym::braille_dots_278;
		const braille_dots_1278 = Keysym::braille_dots_1278;
		const braille_dots_378 = Keysym::braille_dots_378;
		const braille_dots_1378 = Keysym::braille_dots_1378;
		const braille_dots_2378 = Keysym::braille_dots_2378;
		const braille_dots_12378 = Keysym::braille_dots_12378;
		const braille_dots_478 = Keysym::braille_dots_478;
		const braille_dots_1478 = Keysym::braille_dots_1478;
		const braille_dots_2478 = Keysym::braille_dots_2478;
		const braille_dots_12478 = Keysym::braille_dots_12478;
		const braille_dots_3478 = Keysym::braille_dots_3478;
		const braille_dots_13478 = Keysym::braille_dots_13478;
		const braille_dots_23478 = Keysym::braille_dots_23478;
		const braille_dots_123478 = Keysym::braille_dots_123478;
		const braille_dots_578 = Keysym::braille_dots_578;
		const braille_dots_1578 = Keysym::braille_dots_1578;
		const braille_dots_2578 = Keysym::braille_dots_2578;
		const braille_dots_12578 = Keysym::braille_dots_12578;
		const braille_dots_3578 = Keysym::braille_dots_3578;
		const braille_dots_13578 = Keysym::braille_dots_13578;
		const braille_dots_23578 = Keysym::braille_dots_23578;
		const braille_dots_123578 = Keysym::braille_dots_123578;
		const braille_dots_4578 = Keysym::braille_dots_4578;
		const braille_dots_14578 = Keysym::braille_dots_14578;
		const braille_dots_24578 = Keysym::braille_dots_24578;
		const braille_dots_124578 = Keysym::braille_dots_124578;
		const braille_dots_34578 = Keysym::braille_dots_34578;
		const braille_dots_134578 = Keysym::braille_dots_134578;
		const braille_dots_234578 = Keysym::braille_dots_234578;
		const braille_dots_1234578 = Keysym::braille_dots_1234578;
		const braille_dots_678 = Keysym::braille_dots_678;
		const braille_dots_1678 = Keysym::braille_dots_1678;
		const braille_dots_2678 = Keysym::braille_dots_2678;
		const braille_dots_12678 = Keysym::braille_dots_12678;
		const braille_dots_3678 = Keysym::braille_dots_3678;
		const braille_dots_13678 = Keysym::braille_dots_13678;
		const braille_dots_23678 = Keysym::braille_dots_23678;
		const braille_dots_123678 = Keysym::braille_dots_123678;
		const braille_dots_4678 = Keysym::braille_dots_4678;
		const braille_dots_14678 = Keysym::braille_dots_14678;
		const braille_dots_24678 = Keysym::braille_dots_24678;
		const braille_dots_124678 = Keysym::braille_dots_124678;
		const braille_dots_34678 = Keysym::braille_dots_34678;
		const braille_dots_134678 = Keysym::braille_dots_134678;
		const braille_dots_234678 = Keysym::braille_dots_234678;
		const braille_dots_1234678 = Keysym::braille_dots_1234678;
		const braille_dots_5678 = Keysym::braille_dots_5678;
		const braille_dots_15678 = Keysym::braille_dots_15678;
		const braille_dots_25678 = Keysym::braille_dots_25678;
		const braille_dots_125678 = Keysym::braille_dots_125678;
		const braille_dots_35678 = Keysym::braille_dots_35678;
		const braille_dots_135678 = Keysym::braille_dots_135678;
		const braille_dots_235678 = Keysym::braille_dots_235678;
		const braille_dots_1235678 = Keysym::braille_dots_1235678;
		const braille_dots_45678 = Keysym::braille_dots_45678;
		const braille_dots_145678 = Keysym::braille_dots_145678;
		const braille_dots_245678 = Keysym::braille_dots_245678;
		const braille_dots_1245678 = Keysym::braille_dots_1245678;
		const braille_dots_345678 = Keysym::braille_dots_345678;
		const braille_dots_1345678 = Keysym::braille_dots_1345678;
		const braille_dots_2345678 = Keysym::braille_dots_2345678;
		const braille_dots_12345678 = Keysym::braille_dots_12345678;
		const Sinh_ng = Keysym::Sinh_ng;
		const Sinh_h2 = Keysym::Sinh_h2;
		const Sinh_a = Keysym::Sinh_a;
		const Sinh_aa = Keysym::Sinh_aa;
		const Sinh_ae = Keysym::Sinh_ae;
		const Sinh_aee = Keysym::Sinh_aee;
		const Sinh_i = Keysym::Sinh_i;
		const Sinh_ii = Keysym::Sinh_ii;
		const Sinh_u = Keysym::Sinh_u;
		const Sinh_uu = Keysym::Sinh_uu;
		const Sinh_ri = Keysym::Sinh_ri;
		const Sinh_rii = Keysym::Sinh_rii;
		const Sinh_lu = Keysym::Sinh_lu;
		const Sinh_luu = Keysym::Sinh_luu;
		const Sinh_e = Keysym::Sinh_e;
		const Sinh_ee = Keysym::Sinh_ee;
		const Sinh_ai = Keysym::Sinh_ai;
		const Sinh_o = Keysym::Sinh_o;
		const Sinh_oo = Keysym::Sinh_oo;
		const Sinh_au = Keysym::Sinh_au;
		const Sinh_ka = Keysym::Sinh_ka;
		const Sinh_kha = Keysym::Sinh_kha;
		const Sinh_ga = Keysym::Sinh_ga;
		const Sinh_gha = Keysym::Sinh_gha;
		const Sinh_ng2 = Keysym::Sinh_ng2;
		const Sinh_nga = Keysym::Sinh_nga;
		const Sinh_ca = Keysym::Sinh_ca;
		const Sinh_cha = Keysym::Sinh_cha;
		const Sinh_ja = Keysym::Sinh_ja;
		const Sinh_jha = Keysym::Sinh_jha;
		const Sinh_nya = Keysym::Sinh_nya;
		const Sinh_jnya = Keysym::Sinh_jnya;
		const Sinh_nja = Keysym::Sinh_nja;
		const Sinh_tta = Keysym::Sinh_tta;
		const Sinh_ttha = Keysym::Sinh_ttha;
		const Sinh_dda = Keysym::Sinh_dda;
		const Sinh_ddha = Keysym::Sinh_ddha;
		const Sinh_nna = Keysym::Sinh_nna;
		const Sinh_ndda = Keysym::Sinh_ndda;
		const Sinh_tha = Keysym::Sinh_tha;
		const Sinh_thha = Keysym::Sinh_thha;
		const Sinh_dha = Keysym::Sinh_dha;
		const Sinh_dhha = Keysym::Sinh_dhha;
		const Sinh_na = Keysym::Sinh_na;
		const Sinh_ndha = Keysym::Sinh_ndha;
		const Sinh_pa = Keysym::Sinh_pa;
		const Sinh_pha = Keysym::Sinh_pha;
		const Sinh_ba = Keysym::Sinh_ba;
		const Sinh_bha = Keysym::Sinh_bha;
		const Sinh_ma = Keysym::Sinh_ma;
		const Sinh_mba = Keysym::Sinh_mba;
		const Sinh_ya = Keysym::Sinh_ya;
		const Sinh_ra = Keysym::Sinh_ra;
		const Sinh_la = Keysym::Sinh_la;
		const Sinh_va = Keysym::Sinh_va;
		const Sinh_sha = Keysym::Sinh_sha;
		const Sinh_ssha = Keysym::Sinh_ssha;
		const Sinh_sa = Keysym::Sinh_sa;
		const Sinh_ha = Keysym::Sinh_ha;
		const Sinh_lla = Keysym::Sinh_lla;
		const Sinh_fa = Keysym::Sinh_fa;
		const Sinh_al = Keysym::Sinh_al;
		const Sinh_aa2 = Keysym::Sinh_aa2;
		const Sinh_ae2 = Keysym::Sinh_ae2;
		const Sinh_aee2 = Keysym::Sinh_aee2;
		const Sinh_i2 = Keysym::Sinh_i2;
		const Sinh_ii2 = Keysym::Sinh_ii2;
		const Sinh_u2 = Keysym::Sinh_u2;
		const Sinh_uu2 = Keysym::Sinh_uu2;
		const Sinh_ru2 = Keysym::Sinh_ru2;
		const Sinh_e2 = Keysym::Sinh_e2;
		const Sinh_ee2 = Keysym::Sinh_ee2;
		const Sinh_ai2 = Keysym::Sinh_ai2;
		const Sinh_o2 = Keysym::Sinh_o2;
		const Sinh_oo2 = Keysym::Sinh_oo2;
		const Sinh_au2 = Keysym::Sinh_au2;
		const Sinh_lu2 = Keysym::Sinh_lu2;
		const Sinh_ruu2 = Keysym::Sinh_ruu2;
		const Sinh_luu2 = Keysym::Sinh_luu2;
		const Sinh_kunddaliya = Keysym::Sinh_kunddaliya;
		const XF86_ModeLock = Keysym::XF86_ModeLock;
		const XF86_MonBrightnessUp = Keysym::XF86_MonBrightnessUp;
		const XF86_MonBrightnessDown = Keysym::XF86_MonBrightnessDown;
		const XF86_KbdLightOnOff = Keysym::XF86_KbdLightOnOff;
		const XF86_KbdBrightnessUp = Keysym::XF86_KbdBrightnessUp;
		const XF86_KbdBrightnessDown = Keysym::XF86_KbdBrightnessDown;
		const XF86_MonBrightnessCycle = Keysym::XF86_MonBrightnessCycle;
		const XF86_Standby = Keysym::XF86_Standby;
		const XF86_AudioLowerVolume = Keysym::XF86_AudioLowerVolume;
		const XF86_AudioMute = Keysym::XF86_AudioMute;
		const XF86_AudioRaiseVolume = Keysym::XF86_AudioRaiseVolume;
		const XF86_AudioPlay = Keysym::XF86_AudioPlay;
		const XF86_AudioStop = Keysym::XF86_AudioStop;
		const XF86_AudioPrev = Keysym::XF86_AudioPrev;
		const XF86_AudioNext = Keysym::XF86_AudioNext;
		const XF86_HomePage = Keysym::XF86_HomePage;
		const XF86_Mail = Keysym::XF86_Mail;
		const XF86_Start = Keysym::XF86_Start;
		const XF86_Search = Keysym::XF86_Search;
		const XF86_AudioRecord = Keysym::XF86_AudioRecord;
		const XF86_Calculator = Keysym::XF86_Calculator;
		const XF86_Memo = Keysym::XF86_Memo;
		const XF86_ToDoList = Keysym::XF86_ToDoList;
		const XF86_Calendar = Keysym::XF86_Calendar;
		const XF86_PowerDown = Keysym::XF86_PowerDown;
		const XF86_ContrastAdjust = Keysym::XF86_ContrastAdjust;
		const XF86_RockerUp = Keysym::XF86_RockerUp;
		const XF86_RockerDown = Keysym::XF86_RockerDown;
		const XF86_RockerEnter = Keysym::XF86_RockerEnter;
		const XF86_Back = Keysym::XF86_Back;
		const XF86_Forward = Keysym::XF86_Forward;
		const XF86_Stop = Keysym::XF86_Stop;
		const XF86_Refresh = Keysym::XF86_Refresh;
		const XF86_PowerOff = Keysym::XF86_PowerOff;
		const XF86_WakeUp = Keysym::XF86_WakeUp;
		const XF86_Eject = Keysym::XF86_Eject;
		const XF86_ScreenSaver = Keysym::XF86_ScreenSaver;
		const XF86_WWW = Keysym::XF86_WWW;
		const XF86_Sleep = Keysym::XF86_Sleep;
		const XF86_Favorites = Keysym::XF86_Favorites;
		const XF86_AudioPause = Keysym::XF86_AudioPause;
		const XF86_AudioMedia = Keysym::XF86_AudioMedia;
		const XF86_MyComputer = Keysym::XF86_MyComputer;
		const XF86_VendorHome = Keysym::XF86_VendorHome;
		const XF86_LightBulb = Keysym::XF86_LightBulb;
		const XF86_Shop = Keysym::XF86_Shop;
		const XF86_History = Keysym::XF86_History;
		const XF86_OpenURL = Keysym::XF86_OpenURL;
		const XF86_AddFavorite = Keysym::XF86_AddFavorite;
		const XF86_HotLinks = Keysym::XF86_HotLinks;
		const XF86_BrightnessAdjust = Keysym::XF86_BrightnessAdjust;
		const XF86_Finance = Keysym::XF86_Finance;
		const XF86_Community = Keysym::XF86_Community;
		const XF86_AudioRewind = Keysym::XF86_AudioRewind;
		const XF86_BackForward = Keysym::XF86_BackForward;
		const XF86_Launch0 = Keysym::XF86_Launch0;
		const XF86_Launch1 = Keysym::XF86_Launch1;
		const XF86_Launch2 = Keysym::XF86_Launch2;
		const XF86_Launch3 = Keysym::XF86_Launch3;
		const XF86_Launch4 = Keysym::XF86_Launch4;
		const XF86_Launch5 = Keysym::XF86_Launch5;
		const XF86_Launch6 = Keysym::XF86_Launch6;
		const XF86_Launch7 = Keysym::XF86_Launch7;
		const XF86_Launch8 = Keysym::XF86_Launch8;
		const XF86_Launch9 = Keysym::XF86_Launch9;
		const XF86_LaunchA = Keysym::XF86_LaunchA;
		const XF86_LaunchB = Keysym::XF86_LaunchB;
		const XF86_LaunchC = Keysym::XF86_LaunchC;
		const XF86_LaunchD = Keysym::XF86_LaunchD;
		const XF86_LaunchE = Keysym::XF86_LaunchE;
		const XF86_LaunchF = Keysym::XF86_LaunchF;
		const XF86_ApplicationLeft = Keysym::XF86_ApplicationLeft;
		const XF86_ApplicationRight = Keysym::XF86_ApplicationRight;
		const XF86_Book = Keysym::XF86_Book;
		const XF86_CD = Keysym::XF86_CD;
		const XF86_Calculater = Keysym::XF86_Calculater;
		const XF86_Clear = Keysym::XF86_Clear;
		const XF86_Close = Keysym::XF86_Close;
		const XF86_Copy = Keysym::XF86_Copy;
		const XF86_Cut = Keysym::XF86_Cut;
		const XF86_Display = Keysym::XF86_Display;
		const XF86_DOS = Keysym::XF86_DOS;
		const XF86_Documents = Keysym::XF86_Documents;
		const XF86_Excel = Keysym::XF86_Excel;
		const XF86_Explorer = Keysym::XF86_Explorer;
		const XF86_Game = Keysym::XF86_Game;
		const XF86_Go = Keysym::XF86_Go;
		const XF86_iTouch = Keysym::XF86_iTouch;
		const XF86_LogOff = Keysym::XF86_LogOff;
		const XF86_Market = Keysym::XF86_Market;
		const XF86_Meeting = Keysym::XF86_Meeting;
		const XF86_MenuKB = Keysym::XF86_MenuKB;
		const XF86_MenuPB = Keysym::XF86_MenuPB;
		const XF86_MySites = Keysym::XF86_MySites;
		const XF86_New = Keysym::XF86_New;
		const XF86_News = Keysym::XF86_News;
		const XF86_OfficeHome = Keysym::XF86_OfficeHome;
		const XF86_Open = Keysym::XF86_Open;
		const XF86_Option = Keysym::XF86_Option;
		const XF86_Paste = Keysym::XF86_Paste;
		const XF86_Phone = Keysym::XF86_Phone;
		const XF86_Q = Keysym::XF86_Q;
		const XF86_Reply = Keysym::XF86_Reply;
		const XF86_Reload = Keysym::XF86_Reload;
		const XF86_RotateWindows = Keysym::XF86_RotateWindows;
		const XF86_RotationPB = Keysym::XF86_RotationPB;
		const XF86_RotationKB = Keysym::XF86_RotationKB;
		const XF86_Save = Keysym::XF86_Save;
		const XF86_ScrollUp = Keysym::XF86_ScrollUp;
		const XF86_ScrollDown = Keysym::XF86_ScrollDown;
		const XF86_ScrollClick = Keysym::XF86_ScrollClick;
		const XF86_Send = Keysym::XF86_Send;
		const XF86_Spell = Keysym::XF86_Spell;
		const XF86_SplitScreen = Keysym::XF86_SplitScreen;
		const XF86_Support = Keysym::XF86_Support;
		const XF86_TaskPane = Keysym::XF86_TaskPane;
		const XF86_Terminal = Keysym::XF86_Terminal;
		const XF86_Tools = Keysym::XF86_Tools;
		const XF86_Travel = Keysym::XF86_Travel;
		const XF86_UserPB = Keysym::XF86_UserPB;
		const XF86_User1KB = Keysym::XF86_User1KB;
		const XF86_User2KB = Keysym::XF86_User2KB;
		const XF86_Video = Keysym::XF86_Video;
		const XF86_WheelButton = Keysym::XF86_WheelButton;
		const XF86_Word = Keysym::XF86_Word;
		const XF86_Xfer = Keysym::XF86_Xfer;
		const XF86_ZoomIn = Keysym::XF86_ZoomIn;
		const XF86_ZoomOut = Keysym::XF86_ZoomOut;
		const XF86_Away = Keysym::XF86_Away;
		const XF86_Messenger = Keysym::XF86_Messenger;
		const XF86_WebCam = Keysym::XF86_WebCam;
		const XF86_MailForward = Keysym::XF86_MailForward;
		const XF86_Pictures = Keysym::XF86_Pictures;
		const XF86_Music = Keysym::XF86_Music;
		const XF86_Battery = Keysym::XF86_Battery;
		const XF86_Bluetooth = Keysym::XF86_Bluetooth;
		const XF86_WLAN = Keysym::XF86_WLAN;
		const XF86_UWB = Keysym::XF86_UWB;
		const XF86_AudioForward = Keysym::XF86_AudioForward;
		const XF86_AudioRepeat = Keysym::XF86_AudioRepeat;
		const XF86_AudioRandomPlay = Keysym::XF86_AudioRandomPlay;
		const XF86_Subtitle = Keysym::XF86_Subtitle;
		const XF86_AudioCycleTrack = Keysym::XF86_AudioCycleTrack;
		const XF86_CycleAngle = Keysym::XF86_CycleAngle;
		const XF86_FrameBack = Keysym::XF86_FrameBack;
		const XF86_FrameForward = Keysym::XF86_FrameForward;
		const XF86_Time = Keysym::XF86_Time;
		const XF86_Select = Keysym::XF86_Select;
		const XF86_View = Keysym::XF86_View;
		const XF86_TopMenu = Keysym::XF86_TopMenu;
		const XF86_Red = Keysym::XF86_Red;
		const XF86_Green = Keysym::XF86_Green;
		const XF86_Yellow = Keysym::XF86_Yellow;
		const XF86_Blue = Keysym::XF86_Blue;
		const XF86_Suspend = Keysym::XF86_Suspend;
		const XF86_Hibernate = Keysym::XF86_Hibernate;
		const XF86_TouchpadToggle = Keysym::XF86_TouchpadToggle;
		const XF86_TouchpadOn = Keysym::XF86_TouchpadOn;
		const XF86_TouchpadOff = Keysym::XF86_TouchpadOff;
		const XF86_AudioMicMute = Keysym::XF86_AudioMicMute;
		const XF86_Keyboard = Keysym::XF86_Keyboard;
		const XF86_WWAN = Keysym::XF86_WWAN;
		const XF86_RFKill = Keysym::XF86_RFKill;
		const XF86_AudioPreset = Keysym::XF86_AudioPreset;
		const XF86_RotationLockToggle = Keysym::XF86_RotationLockToggle;
		const XF86_FullScreen = Keysym::XF86_FullScreen;
		const XF86_Switch_VT_1 = Keysym::XF86_Switch_VT_1;
		const XF86_Switch_VT_2 = Keysym::XF86_Switch_VT_2;
		const XF86_Switch_VT_3 = Keysym::XF86_Switch_VT_3;
		const XF86_Switch_VT_4 = Keysym::XF86_Switch_VT_4;
		const XF86_Switch_VT_5 = Keysym::XF86_Switch_VT_5;
		const XF86_Switch_VT_6 = Keysym::XF86_Switch_VT_6;
		const XF86_Switch_VT_7 = Keysym::XF86_Switch_VT_7;
		const XF86_Switch_VT_8 = Keysym::XF86_Switch_VT_8;
		const XF86_Switch_VT_9 = Keysym::XF86_Switch_VT_9;
		const XF86_Switch_VT_10 = Keysym::XF86_Switch_VT_10;
		const XF86_Switch_VT_11 = Keysym::XF86_Switch_VT_11;
		const XF86_Switch_VT_12 = Keysym::XF86_Switch_VT_12;
		const XF86_Ungrab = Keysym::XF86_Ungrab;
		const XF86_ClearGrab = Keysym::XF86_ClearGrab;
		const XF86_Next_VMode = Keysym::XF86_Next_VMode;
		const XF86_Prev_VMode = Keysym::XF86_Prev_VMode;
		const XF86_LogWindowTree = Keysym::XF86_LogWindowTree;
		const XF86_LogGrabInfo = Keysym::XF86_LogGrabInfo;
		const XF86_BrightnessAuto = Keysym::XF86_BrightnessAuto;
		const XF86_DisplayOff = Keysym::XF86_DisplayOff;
		const XF86_Info = Keysym::XF86_Info;
		const XF86_AspectRatio = Keysym::XF86_AspectRatio;
		const XF86_DVD = Keysym::XF86_DVD;
		const XF86_Audio = Keysym::XF86_Audio;
		const XF86_ChannelUp = Keysym::XF86_ChannelUp;
		const XF86_ChannelDown = Keysym::XF86_ChannelDown;
		const XF86_Break = Keysym::XF86_Break;
		const XF86_VideoPhone = Keysym::XF86_VideoPhone;
		const XF86_ZoomReset = Keysym::XF86_ZoomReset;
		const XF86_Editor = Keysym::XF86_Editor;
		const XF86_GraphicsEditor = Keysym::XF86_GraphicsEditor;
		const XF86_Presentation = Keysym::XF86_Presentation;
		const XF86_Database = Keysym::XF86_Database;
		const XF86_Voicemail = Keysym::XF86_Voicemail;
		const XF86_Addressbook = Keysym::XF86_Addressbook;
		const XF86_DisplayToggle = Keysym::XF86_DisplayToggle;
		const XF86_SpellCheck = Keysym::XF86_SpellCheck;
		const XF86_ContextMenu = Keysym::XF86_ContextMenu;
		const XF86_MediaRepeat = Keysym::XF86_MediaRepeat;
		const XF86_10ChannelsUp = Keysym::XF86_10ChannelsUp;
		const XF86_10ChannelsDown = Keysym::XF86_10ChannelsDown;
		const XF86_Images = Keysym::XF86_Images;
		const XF86_NotificationCenter = Keysym::XF86_NotificationCenter;
		const XF86_PickupPhone = Keysym::XF86_PickupPhone;
		const XF86_HangupPhone = Keysym::XF86_HangupPhone;
		const XF86_Fn = Keysym::XF86_Fn;
		const XF86_Fn_Esc = Keysym::XF86_Fn_Esc;
		const XF86_FnRightShift = Keysym::XF86_FnRightShift;
		const XF86_Numeric0 = Keysym::XF86_Numeric0;
		const XF86_Numeric1 = Keysym::XF86_Numeric1;
		const XF86_Numeric2 = Keysym::XF86_Numeric2;
		const XF86_Numeric3 = Keysym::XF86_Numeric3;
		const XF86_Numeric4 = Keysym::XF86_Numeric4;
		const XF86_Numeric5 = Keysym::XF86_Numeric5;
		const XF86_Numeric6 = Keysym::XF86_Numeric6;
		const XF86_Numeric7 = Keysym::XF86_Numeric7;
		const XF86_Numeric8 = Keysym::XF86_Numeric8;
		const XF86_Numeric9 = Keysym::XF86_Numeric9;
		const XF86_NumericStar = Keysym::XF86_NumericStar;
		const XF86_NumericPound = Keysym::XF86_NumericPound;
		const XF86_NumericA = Keysym::XF86_NumericA;
		const XF86_NumericB = Keysym::XF86_NumericB;
		const XF86_NumericC = Keysym::XF86_NumericC;
		const XF86_NumericD = Keysym::XF86_NumericD;
		const XF86_CameraFocus = Keysym::XF86_CameraFocus;
		const XF86_WPSButton = Keysym::XF86_WPSButton;
		const XF86_CameraZoomIn = Keysym::XF86_CameraZoomIn;
		const XF86_CameraZoomOut = Keysym::XF86_CameraZoomOut;
		const XF86_CameraUp = Keysym::XF86_CameraUp;
		const XF86_CameraDown = Keysym::XF86_CameraDown;
		const XF86_CameraLeft = Keysym::XF86_CameraLeft;
		const XF86_CameraRight = Keysym::XF86_CameraRight;
		const XF86_AttendantOn = Keysym::XF86_AttendantOn;
		const XF86_AttendantOff = Keysym::XF86_AttendantOff;
		const XF86_AttendantToggle = Keysym::XF86_AttendantToggle;
		const XF86_LightsToggle = Keysym::XF86_LightsToggle;
		const XF86_ALSToggle = Keysym::XF86_ALSToggle;
		const XF86_Buttonconfig = Keysym::XF86_Buttonconfig;
		const XF86_Taskmanager = Keysym::XF86_Taskmanager;
		const XF86_Journal = Keysym::XF86_Journal;
		const XF86_ControlPanel = Keysym::XF86_ControlPanel;
		const XF86_AppSelect = Keysym::XF86_AppSelect;
		const XF86_Screensaver = Keysym::XF86_Screensaver;
		const XF86_VoiceCommand = Keysym::XF86_VoiceCommand;
		const XF86_Assistant = Keysym::XF86_Assistant;
		const XF86_BrightnessMin = Keysym::XF86_BrightnessMin;
		const XF86_BrightnessMax = Keysym::XF86_BrightnessMax;
		const XF86_KbdInputAssistPrev = Keysym::XF86_KbdInputAssistPrev;
		const XF86_KbdInputAssistNext = Keysym::XF86_KbdInputAssistNext;
		const XF86_KbdInputAssistPrevgroup = Keysym::XF86_KbdInputAssistPrevgroup;
		const XF86_KbdInputAssistNextgroup = Keysym::XF86_KbdInputAssistNextgroup;
		const XF86_KbdInputAssistAccept = Keysym::XF86_KbdInputAssistAccept;
		const XF86_KbdInputAssistCancel = Keysym::XF86_KbdInputAssistCancel;
		const XF86_RightUp = Keysym::XF86_RightUp;
		const XF86_RightDown = Keysym::XF86_RightDown;
		const XF86_LeftUp = Keysym::XF86_LeftUp;
		const XF86_LeftDown = Keysym::XF86_LeftDown;
		const XF86_RootMenu = Keysym::XF86_RootMenu;
		const XF86_MediaTopMenu = Keysym::XF86_MediaTopMenu;
		const XF86_Numeric11 = Keysym::XF86_Numeric11;
		const XF86_Numeric12 = Keysym::XF86_Numeric12;
		const XF86_AudioDesc = Keysym::XF86_AudioDesc;
		const XF86_3DMode = Keysym::XF86_3DMode;
		const XF86_NextFavorite = Keysym::XF86_NextFavorite;
		const XF86_StopRecord = Keysym::XF86_StopRecord;
		const XF86_PauseRecord = Keysym::XF86_PauseRecord;
		const XF86_VOD = Keysym::XF86_VOD;
		const XF86_Unmute = Keysym::XF86_Unmute;
		const XF86_FastReverse = Keysym::XF86_FastReverse;
		const XF86_SlowReverse = Keysym::XF86_SlowReverse;
		const XF86_Data = Keysym::XF86_Data;
		const XF86_OnScreenKeyboard = Keysym::XF86_OnScreenKeyboard;
		const XF86_PrivacyScreenToggle = Keysym::XF86_PrivacyScreenToggle;
		const XF86_SelectiveScreenshot = Keysym::XF86_SelectiveScreenshot;
		const XF86_Macro1 = Keysym::XF86_Macro1;
		const XF86_Macro2 = Keysym::XF86_Macro2;
		const XF86_Macro3 = Keysym::XF86_Macro3;
		const XF86_Macro4 = Keysym::XF86_Macro4;
		const XF86_Macro5 = Keysym::XF86_Macro5;
		const XF86_Macro6 = Keysym::XF86_Macro6;
		const XF86_Macro7 = Keysym::XF86_Macro7;
		const XF86_Macro8 = Keysym::XF86_Macro8;
		const XF86_Macro9 = Keysym::XF86_Macro9;
		const XF86_Macro10 = Keysym::XF86_Macro10;
		const XF86_Macro11 = Keysym::XF86_Macro11;
		const XF86_Macro12 = Keysym::XF86_Macro12;
		const XF86_Macro13 = Keysym::XF86_Macro13;
		const XF86_Macro14 = Keysym::XF86_Macro14;
		const XF86_Macro15 = Keysym::XF86_Macro15;
		const XF86_Macro16 = Keysym::XF86_Macro16;
		const XF86_Macro17 = Keysym::XF86_Macro17;
		const XF86_Macro18 = Keysym::XF86_Macro18;
		const XF86_Macro19 = Keysym::XF86_Macro19;
		const XF86_Macro20 = Keysym::XF86_Macro20;
		const XF86_Macro21 = Keysym::XF86_Macro21;
		const XF86_Macro22 = Keysym::XF86_Macro22;
		const XF86_Macro23 = Keysym::XF86_Macro23;
		const XF86_Macro24 = Keysym::XF86_Macro24;
		const XF86_Macro25 = Keysym::XF86_Macro25;
		const XF86_Macro26 = Keysym::XF86_Macro26;
		const XF86_Macro27 = Keysym::XF86_Macro27;
		const XF86_Macro28 = Keysym::XF86_Macro28;
		const XF86_Macro29 = Keysym::XF86_Macro29;
		const XF86_Macro30 = Keysym::XF86_Macro30;
		const XF86_MacroRecordStart = Keysym::XF86_MacroRecordStart;
		const XF86_MacroRecordStop = Keysym::XF86_MacroRecordStop;
		const XF86_MacroPresetCycle = Keysym::XF86_MacroPresetCycle;
		const XF86_MacroPreset1 = Keysym::XF86_MacroPreset1;
		const XF86_MacroPreset2 = Keysym::XF86_MacroPreset2;
		const XF86_MacroPreset3 = Keysym::XF86_MacroPreset3;
		const XF86_KbdLcdMenu1 = Keysym::XF86_KbdLcdMenu1;
		const XF86_KbdLcdMenu2 = Keysym::XF86_KbdLcdMenu2;
		const XF86_KbdLcdMenu3 = Keysym::XF86_KbdLcdMenu3;
		const XF86_KbdLcdMenu4 = Keysym::XF86_KbdLcdMenu4;
		const XF86_KbdLcdMenu5 = Keysym::XF86_KbdLcdMenu5;
		const SUN_FA_Grave = Keysym::SUN_FA_Grave;
		const SUN_FA_Circum = Keysym::SUN_FA_Circum;
		const SUN_FA_Tilde = Keysym::SUN_FA_Tilde;
		const SUN_FA_Acute = Keysym::SUN_FA_Acute;
		const SUN_FA_Diaeresis = Keysym::SUN_FA_Diaeresis;
		const SUN_FA_Cedilla = Keysym::SUN_FA_Cedilla;
		const SUN_F36 = Keysym::SUN_F36;
		const SUN_F37 = Keysym::SUN_F37;
		const SUN_Sys_Req = Keysym::SUN_Sys_Req;
		const SUN_Print_Screen = Keysym::SUN_Print_Screen;
		const SUN_Compose = Keysym::SUN_Compose;
		const SUN_AltGraph = Keysym::SUN_AltGraph;
		const SUN_PageUp = Keysym::SUN_PageUp;
		const SUN_PageDown = Keysym::SUN_PageDown;
		const SUN_Undo = Keysym::SUN_Undo;
		const SUN_Again = Keysym::SUN_Again;
		const SUN_Find = Keysym::SUN_Find;
		const SUN_Stop = Keysym::SUN_Stop;
		const SUN_Props = Keysym::SUN_Props;
		const SUN_Front = Keysym::SUN_Front;
		const SUN_Copy = Keysym::SUN_Copy;
		const SUN_Open = Keysym::SUN_Open;
		const SUN_Paste = Keysym::SUN_Paste;
		const SUN_Cut = Keysym::SUN_Cut;
		const SUN_PowerSwitch = Keysym::SUN_PowerSwitch;
		const SUN_AudioLowerVolume = Keysym::SUN_AudioLowerVolume;
		const SUN_AudioMute = Keysym::SUN_AudioMute;
		const SUN_AudioRaiseVolume = Keysym::SUN_AudioRaiseVolume;
		const SUN_VideoDegauss = Keysym::SUN_VideoDegauss;
		const SUN_VideoLowerBrightness = Keysym::SUN_VideoLowerBrightness;
		const SUN_VideoRaiseBrightness = Keysym::SUN_VideoRaiseBrightness;
		const SUN_PowerSwitchShift = Keysym::SUN_PowerSwitchShift;
		const D_ring_accent = Keysym::D_ring_accent;
		const D_circumflex_accent = Keysym::D_circumflex_accent;
		const D_cedilla_accent = Keysym::D_cedilla_accent;
		const D_acute_accent = Keysym::D_acute_accent;
		const D_grave_accent = Keysym::D_grave_accent;
		const D_tilde = Keysym::D_tilde;
		const D_diaeresis = Keysym::D_diaeresis;
		const D_Remove = Keysym::D_Remove;
		const HP_ClearLine = Keysym::HP_ClearLine;
		const HP_InsertLine = Keysym::HP_InsertLine;
		const HP_DeleteLine = Keysym::HP_DeleteLine;
		const HP_InsertChar = Keysym::HP_InsertChar;
		const HP_DeleteChar = Keysym::HP_DeleteChar;
		const HP_BackTab = Keysym::HP_BackTab;
		const HP_KP_BackTab = Keysym::HP_KP_BackTab;
		const HP_Modelock1 = Keysym::HP_Modelock1;
		const HP_Modelock2 = Keysym::HP_Modelock2;
		const HP_Reset = Keysym::HP_Reset;
		const HP_System = Keysym::HP_System;
		const HP_User = Keysym::HP_User;
		const HP_mute_acute = Keysym::HP_mute_acute;
		const HP_mute_grave = Keysym::HP_mute_grave;
		const HP_mute_asciicircum = Keysym::HP_mute_asciicircum;
		const HP_mute_diaeresis = Keysym::HP_mute_diaeresis;
		const HP_mute_asciitilde = Keysym::HP_mute_asciitilde;
		const HP_lira = Keysym::HP_lira;
		const HP_guilder = Keysym::HP_guilder;
		const HP_IO = Keysym::HP_IO;
		const HP_longminus = Keysym::HP_longminus;
		const HP_block = Keysym::HP_block;
		const OSF_Copy = Keysym::OSF_Copy;
		const OSF_Cut = Keysym::OSF_Cut;
		const OSF_Paste = Keysym::OSF_Paste;
		const OSF_BackTab = Keysym::OSF_BackTab;
		const OSF_BackSpace = Keysym::OSF_BackSpace;
		const OSF_Clear = Keysym::OSF_Clear;
		const OSF_Escape = Keysym::OSF_Escape;
		const OSF_AddMode = Keysym::OSF_AddMode;
		const OSF_PrimaryPaste = Keysym::OSF_PrimaryPaste;
		const OSF_QuickPaste = Keysym::OSF_QuickPaste;
		const OSF_PageLeft = Keysym::OSF_PageLeft;
		const OSF_PageUp = Keysym::OSF_PageUp;
		const OSF_PageDown = Keysym::OSF_PageDown;
		const OSF_PageRight = Keysym::OSF_PageRight;
		const OSF_Activate = Keysym::OSF_Activate;
		const OSF_MenuBar = Keysym::OSF_MenuBar;
		const OSF_Left = Keysym::OSF_Left;
		const OSF_Up = Keysym::OSF_Up;
		const OSF_Right = Keysym::OSF_Right;
		const OSF_Down = Keysym::OSF_Down;
		const OSF_EndLine = Keysym::OSF_EndLine;
		const OSF_BeginLine = Keysym::OSF_BeginLine;
		const OSF_EndData = Keysym::OSF_EndData;
		const OSF_BeginData = Keysym::OSF_BeginData;
		const OSF_PrevMenu = Keysym::OSF_PrevMenu;
		const OSF_NextMenu = Keysym::OSF_NextMenu;
		const OSF_PrevField = Keysym::OSF_PrevField;
		const OSF_NextField = Keysym::OSF_NextField;
		const OSF_Select = Keysym::OSF_Select;
		const OSF_Insert = Keysym::OSF_Insert;
		const OSF_Undo = Keysym::OSF_Undo;
		const OSF_Menu = Keysym::OSF_Menu;
		const OSF_Cancel = Keysym::OSF_Cancel;
		const OSF_Help = Keysym::OSF_Help;
		const OSF_SelectAll = Keysym::OSF_SelectAll;
		const OSF_DeselectAll = Keysym::OSF_DeselectAll;
		const OSF_Reselect = Keysym::OSF_Reselect;
		const OSF_Extend = Keysym::OSF_Extend;
		const OSF_Restore = Keysym::OSF_Restore;
		const OSF_Delete = Keysym::OSF_Delete;
		const Reset = Keysym::Reset;
		const System = Keysym::System;
		const User = Keysym::User;
		const ClearLine = Keysym::ClearLine;
		const InsertLine = Keysym::InsertLine;
		const DeleteLine = Keysym::DeleteLine;
		const InsertChar = Keysym::InsertChar;
		const DeleteChar = Keysym::DeleteChar;
		const BackTab = Keysym::BackTab;
		const KP_BackTab = Keysym::KP_BackTab;
		const Ext16bit_L = Keysym::Ext16bit_L;
		const Ext16bit_R = Keysym::Ext16bit_R;
		const mute_acute = Keysym::mute_acute;
		const mute_grave = Keysym::mute_grave;
		const mute_asciicircum = Keysym::mute_asciicircum;
		const mute_diaeresis = Keysym::mute_diaeresis;
		const mute_asciitilde = Keysym::mute_asciitilde;
		const lira = Keysym::lira;
		const guilder = Keysym::guilder;
		const IO = Keysym::IO;
		const longminus = Keysym::longminus;
		const block = Keysym::block;
	}
}

#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct KeyPattern {
	pub mods: ModFlags,
	pub key: Key,
}

impl StrataComp {
	pub fn set_input_focus(&mut self, target: FocusTarget) {
		let keyboard = self.seat.get_keyboard().unwrap();
		let serial = SERIAL_COUNTER.next_serial();
		keyboard.set_focus(self, Some(target), serial);
	}

	pub fn set_input_focus_auto(&mut self) {
		let under = self.surface_under();
		if let Some(d) = under {
			self.set_input_focus(d.0);
		}
	}

	pub fn pointer_motion<I: InputBackend>(
		&mut self,
		event: I::PointerMotionEvent,
	) -> anyhow::Result<()> {
		let serial = SERIAL_COUNTER.next_serial();
		let delta = (event.delta_x(), event.delta_y()).into();

		self.set_input_focus_auto();

		if let Some(ptr) = self.seat.get_pointer() {
			let location = self.workspaces.current().clamp_coords(ptr.current_location() + delta);

			let under = self.surface_under();

			ptr.motion(
				self,
				under.clone(),
				&MotionEvent { location, serial, time: event.time_msec() },
			);

			ptr.relative_motion(
				self,
				under,
				&RelativeMotionEvent {
					delta,
					delta_unaccel: event.delta_unaccel(),
					utime: event.time(),
				},
			)
		}

		Ok(())
	}

	pub fn pointer_motion_absolute<I: InputBackend>(
		&mut self,
		event: I::PointerMotionAbsoluteEvent,
	) -> anyhow::Result<()> {
		let serial = SERIAL_COUNTER.next_serial();

		let curr_workspace = self.workspaces.current();
		let output = curr_workspace.outputs().next().unwrap();
		let output_geo = curr_workspace.output_geometry(output).unwrap();
		let pos = event.position_transformed(output_geo.size) + output_geo.loc.to_f64();

		let location = self.workspaces.current().clamp_coords(pos);

		self.set_input_focus_auto();

		let under = self.surface_under();
		if let Some(ptr) = self.seat.get_pointer() {
			ptr.motion(self, under, &MotionEvent { location, serial, time: event.time_msec() });
		}

		Ok(())
	}
	pub fn pointer_button<I: InputBackend>(
		&mut self,
		event: I::PointerButtonEvent,
	) -> anyhow::Result<()> {
		let serial = SERIAL_COUNTER.next_serial();

		let button = event.button_code();
		let button_state = event.state();
		self.set_input_focus_auto();
		if let Some(ptr) = self.seat.get_pointer() {
			ptr.button(
				self,
				&ButtonEvent { button, state: button_state, serial, time: event.time_msec() },
			);
		}

		Ok(())
	}

	pub fn pointer_axis<I: InputBackend>(
		&mut self,
		event: I::PointerAxisEvent,
	) -> anyhow::Result<()> {
		let horizontal_amount = event
			.amount(Axis::Horizontal)
			.unwrap_or_else(|| event.amount(Axis::Horizontal).unwrap_or(0.0) * 3.0);
		let vertical_amount = event
			.amount(Axis::Vertical)
			.unwrap_or_else(|| event.amount(Axis::Vertical).unwrap_or(0.0) * 3.0);

		let mut frame = AxisFrame::new(event.time_msec()).source(event.source());
		if horizontal_amount != 0.0 {
			frame = frame.value(Axis::Horizontal, horizontal_amount);
		} else if event.source() == AxisSource::Finger {
			frame = frame.stop(Axis::Horizontal);
		}
		if vertical_amount != 0.0 {
			frame = frame.value(Axis::Vertical, vertical_amount);
		} else if event.source() == AxisSource::Finger {
			frame = frame.stop(Axis::Vertical);
		}

		if let Some(ptr) = self.seat.get_pointer() {
			ptr.axis(self, frame);
		}

		Ok(())
	}
}
