/**
 *
 * Standards: Unicode 5.0.0 (SpecialCasing-5.0.0d8, UnicodeData-5.0.0d10)
 *
 * License: zlib
 * Authors: Walter Bright, Thomas Kühne
 *
 * Macros:
 *      WIKI = StdUni
 */

/*
 *  Copyright (C)
 *  	2005 written by Walter Bright
 *	2006 modified by Thomas Kuehne
 *
 *  This software is provided 'as-is', without any express or implied
 *  warranty. In no event will the authors be held liable for any damages
 *  arising from the use of this software.
 *
 *  Permission is granted to anyone to use this software for any purpose,
 *  including commercial applications, and to alter it and redistribute it
 *  freely, subject to the following restrictions:
 *
 *  o  The origin of this software must not be misrepresented; you must not
 *     claim that you wrote the original software. If you use this software
 *     in a product, an acknowledgment in the product documentation would be
 *     appreciated but is not required.
 *  o  Altered source versions must be plainly marked as such, and must not
 *     be misrepresented as being the original software.
 *  o  This notice may not be removed or altered from any source
 *     distribution.
 */

module std.uni;

/// unconditional upper case mappings
private dchar[][dchar] upper;

/// unconditional lower case mappings
private dchar[][dchar] lower;

/**
 * Convert string input[] to lower case.
 *
 * Bugs: neither conditinal nor locale-sensitive mapping
 */
dchar[] toUniLower(dchar[] input){
	dchar[] output = new dchar[input.length];
	output.length = 0;

	foreach(dchar d; input){
		dchar[]* found = d in lower;
		if(found){
			output ~= *found;
		}else{
			output ~= d;
		}
	}

	return output;
}

unittest{
	assert(toUniLower("p\U00010427I\U0001041Fo") == "p\U0001044Fi\U00010447o");
}
	
/**
 * Convert string input[] to upper case.
 *
 * Bugs: neither conditinal nor locale-sensitive mapping
 */
dchar[] toUniUpper(dchar[] input){
	dchar[] output = new dchar[input.length];
	output.length = 0;

	foreach(dchar d; input){
		dchar[]* found = d in upper;
		if(found){
			output ~= *found;
		}else{
			output ~= d;
		}
	}

	return output;
}

unittest{
	assert(toUniUpper("Flu\u00DF") == "FLUSS"d);
}

/**
 * Deprecated: use toUniLower(dchar[]) for correct handling of special casings
 */
dchar toUniLower(dchar d){
	dchar[]* output = d in lower;
	if(output && (*output).length == 1){
		return (*output)[0];
	}
	return d;
}

/**
 * Deprecated: use toUniUpper(dchar[]) for correct handling of special casings
 */
dchar toUniUpper(dchar d){
	dchar[]* output = d in upper;
	if(output && (*output).length == 1){
		return (*output)[0];
	}
	return d;
}


/**
 * Bugs: neither conditinal nor locale-sensitive mapping
 */
int isUniLower(dchar c){
	if(c <= 0x7F){
		return (c >= 'a' && c <= 'z');
	}

	return (c in lower) ? 0 : 1;
}

/**
 * Bugs: neither conditinal nor locale-sensitive mapping
 */
int isUniUpper(dchar c){
	if(c <= 0x7F){
		return (c >= 'A' && c <= 'Z');
	}

	return (c in upper) ? 0 : 1;
}

/// Author: Thomas Kühne
static this(){
	upper[0x61] = "\u0041"d;
	upper[0x62] = "\u0042"d;
	upper[0x63] = "\u0043"d;
	upper[0x64] = "\u0044"d;
	upper[0x65] = "\u0045"d;
	upper[0x66] = "\u0046"d;
	upper[0x67] = "\u0047"d;
	upper[0x68] = "\u0048"d;
	upper[0x69] = "\u0049"d;
	upper[0x6A] = "\u004A"d;
	upper[0x6B] = "\u004B"d;
	upper[0x6C] = "\u004C"d;
	upper[0x6D] = "\u004D"d;
	upper[0x6E] = "\u004E"d;
	upper[0x6F] = "\u004F"d;
	upper[0x70] = "\u0050"d;
	upper[0x71] = "\u0051"d;
	upper[0x72] = "\u0052"d;
	upper[0x73] = "\u0053"d;
	upper[0x74] = "\u0054"d;
	upper[0x75] = "\u0055"d;
	upper[0x76] = "\u0056"d;
	upper[0x77] = "\u0057"d;
	upper[0x78] = "\u0058"d;
	upper[0x79] = "\u0059"d;
	upper[0x7A] = "\u005A"d;
	upper[0xB5] = "\u039C"d;
	upper[0xDF] = "\u0053\u0053"d;
	upper[0xE0] = "\u00C0"d;
	upper[0xE1] = "\u00C1"d;
	upper[0xE2] = "\u00C2"d;
	upper[0xE3] = "\u00C3"d;
	upper[0xE4] = "\u00C4"d;
	upper[0xE5] = "\u00C5"d;
	upper[0xE6] = "\u00C6"d;
	upper[0xE7] = "\u00C7"d;
	upper[0xE8] = "\u00C8"d;
	upper[0xE9] = "\u00C9"d;
	upper[0xEA] = "\u00CA"d;
	upper[0xEB] = "\u00CB"d;
	upper[0xEC] = "\u00CC"d;
	upper[0xED] = "\u00CD"d;
	upper[0xEE] = "\u00CE"d;
	upper[0xEF] = "\u00CF"d;
	upper[0xF0] = "\u00D0"d;
	upper[0xF1] = "\u00D1"d;
	upper[0xF2] = "\u00D2"d;
	upper[0xF3] = "\u00D3"d;
	upper[0xF4] = "\u00D4"d;
	upper[0xF5] = "\u00D5"d;
	upper[0xF6] = "\u00D6"d;
	upper[0xF8] = "\u00D8"d;
	upper[0xF9] = "\u00D9"d;
	upper[0xFA] = "\u00DA"d;
	upper[0xFB] = "\u00DB"d;
	upper[0xFC] = "\u00DC"d;
	upper[0xFD] = "\u00DD"d;
	upper[0xFE] = "\u00DE"d;
	upper[0xFF] = "\u0178"d;
	upper[0x101] = "\u0100"d;
	upper[0x103] = "\u0102"d;
	upper[0x105] = "\u0104"d;
	upper[0x107] = "\u0106"d;
	upper[0x109] = "\u0108"d;
	upper[0x10B] = "\u010A"d;
	upper[0x10D] = "\u010C"d;
	upper[0x10F] = "\u010E"d;
	upper[0x111] = "\u0110"d;
	upper[0x113] = "\u0112"d;
	upper[0x115] = "\u0114"d;
	upper[0x117] = "\u0116"d;
	upper[0x119] = "\u0118"d;
	upper[0x11B] = "\u011A"d;
	upper[0x11D] = "\u011C"d;
	upper[0x11F] = "\u011E"d;
	upper[0x121] = "\u0120"d;
	upper[0x123] = "\u0122"d;
	upper[0x125] = "\u0124"d;
	upper[0x127] = "\u0126"d;
	upper[0x129] = "\u0128"d;
	upper[0x12B] = "\u012A"d;
	upper[0x12D] = "\u012C"d;
	upper[0x12F] = "\u012E"d;
	upper[0x131] = "\u0049"d;
	upper[0x133] = "\u0132"d;
	upper[0x135] = "\u0134"d;
	upper[0x137] = "\u0136"d;
	upper[0x13A] = "\u0139"d;
	upper[0x13C] = "\u013B"d;
	upper[0x13E] = "\u013D"d;
	upper[0x140] = "\u013F"d;
	upper[0x142] = "\u0141"d;
	upper[0x144] = "\u0143"d;
	upper[0x146] = "\u0145"d;
	upper[0x148] = "\u0147"d;
	upper[0x149] = "\u02BC\u004E"d;
	upper[0x14B] = "\u014A"d;
	upper[0x14D] = "\u014C"d;
	upper[0x14F] = "\u014E"d;
	upper[0x151] = "\u0150"d;
	upper[0x153] = "\u0152"d;
	upper[0x155] = "\u0154"d;
	upper[0x157] = "\u0156"d;
	upper[0x159] = "\u0158"d;
	upper[0x15B] = "\u015A"d;
	upper[0x15D] = "\u015C"d;
	upper[0x15F] = "\u015E"d;
	upper[0x161] = "\u0160"d;
	upper[0x163] = "\u0162"d;
	upper[0x165] = "\u0164"d;
	upper[0x167] = "\u0166"d;
	upper[0x169] = "\u0168"d;
	upper[0x16B] = "\u016A"d;
	upper[0x16D] = "\u016C"d;
	upper[0x16F] = "\u016E"d;
	upper[0x171] = "\u0170"d;
	upper[0x173] = "\u0172"d;
	upper[0x175] = "\u0174"d;
	upper[0x177] = "\u0176"d;
	upper[0x17A] = "\u0179"d;
	upper[0x17C] = "\u017B"d;
	upper[0x17E] = "\u017D"d;
	upper[0x17F] = "\u0053"d;
	upper[0x180] = "\u0243"d;
	upper[0x183] = "\u0182"d;
	upper[0x185] = "\u0184"d;
	upper[0x188] = "\u0187"d;
	upper[0x18C] = "\u018B"d;
	upper[0x192] = "\u0191"d;
	upper[0x195] = "\u01F6"d;
	upper[0x199] = "\u0198"d;
	upper[0x19A] = "\u023D"d;
	upper[0x19E] = "\u0220"d;
	upper[0x1A1] = "\u01A0"d;
	upper[0x1A3] = "\u01A2"d;
	upper[0x1A5] = "\u01A4"d;
	upper[0x1A8] = "\u01A7"d;
	upper[0x1AD] = "\u01AC"d;
	upper[0x1B0] = "\u01AF"d;
	upper[0x1B4] = "\u01B3"d;
	upper[0x1B6] = "\u01B5"d;
	upper[0x1B9] = "\u01B8"d;
	upper[0x1BD] = "\u01BC"d;
	upper[0x1BF] = "\u01F7"d;
	upper[0x1C4] = "\u01C5"d;
	upper[0x1C5] = "\u01C5"d;
	upper[0x1C6] = "\u01C5"d;
	upper[0x1C7] = "\u01C8"d;
	upper[0x1C8] = "\u01C8"d;
	upper[0x1C9] = "\u01C8"d;
	upper[0x1CA] = "\u01CB"d;
	upper[0x1CB] = "\u01CB"d;
	upper[0x1CC] = "\u01CB"d;
	upper[0x1CE] = "\u01CD"d;
	upper[0x1D0] = "\u01CF"d;
	upper[0x1D2] = "\u01D1"d;
	upper[0x1D4] = "\u01D3"d;
	upper[0x1D6] = "\u01D5"d;
	upper[0x1D8] = "\u01D7"d;
	upper[0x1DA] = "\u01D9"d;
	upper[0x1DC] = "\u01DB"d;
	upper[0x1DD] = "\u018E"d;
	upper[0x1DF] = "\u01DE"d;
	upper[0x1E1] = "\u01E0"d;
	upper[0x1E3] = "\u01E2"d;
	upper[0x1E5] = "\u01E4"d;
	upper[0x1E7] = "\u01E6"d;
	upper[0x1E9] = "\u01E8"d;
	upper[0x1EB] = "\u01EA"d;
	upper[0x1ED] = "\u01EC"d;
	upper[0x1EF] = "\u01EE"d;
	upper[0x1F0] = "\u004A\u030C"d;
	upper[0x1F1] = "\u01F2"d;
	upper[0x1F2] = "\u01F2"d;
	upper[0x1F3] = "\u01F2"d;
	upper[0x1F5] = "\u01F4"d;
	upper[0x1F9] = "\u01F8"d;
	upper[0x1FB] = "\u01FA"d;
	upper[0x1FD] = "\u01FC"d;
	upper[0x1FF] = "\u01FE"d;
	upper[0x201] = "\u0200"d;
	upper[0x203] = "\u0202"d;
	upper[0x205] = "\u0204"d;
	upper[0x207] = "\u0206"d;
	upper[0x209] = "\u0208"d;
	upper[0x20B] = "\u020A"d;
	upper[0x20D] = "\u020C"d;
	upper[0x20F] = "\u020E"d;
	upper[0x211] = "\u0210"d;
	upper[0x213] = "\u0212"d;
	upper[0x215] = "\u0214"d;
	upper[0x217] = "\u0216"d;
	upper[0x219] = "\u0218"d;
	upper[0x21B] = "\u021A"d;
	upper[0x21D] = "\u021C"d;
	upper[0x21F] = "\u021E"d;
	upper[0x223] = "\u0222"d;
	upper[0x225] = "\u0224"d;
	upper[0x227] = "\u0226"d;
	upper[0x229] = "\u0228"d;
	upper[0x22B] = "\u022A"d;
	upper[0x22D] = "\u022C"d;
	upper[0x22F] = "\u022E"d;
	upper[0x231] = "\u0230"d;
	upper[0x233] = "\u0232"d;
	upper[0x23C] = "\u023B"d;
	upper[0x242] = "\u0241"d;
	upper[0x247] = "\u0246"d;
	upper[0x249] = "\u0248"d;
	upper[0x24B] = "\u024A"d;
	upper[0x24D] = "\u024C"d;
	upper[0x24F] = "\u024E"d;
	upper[0x253] = "\u0181"d;
	upper[0x254] = "\u0186"d;
	upper[0x256] = "\u0189"d;
	upper[0x257] = "\u018A"d;
	upper[0x259] = "\u018F"d;
	upper[0x25B] = "\u0190"d;
	upper[0x260] = "\u0193"d;
	upper[0x263] = "\u0194"d;
	upper[0x268] = "\u0197"d;
	upper[0x269] = "\u0196"d;
	upper[0x26B] = "\u2C62"d;
	upper[0x26F] = "\u019C"d;
	upper[0x272] = "\u019D"d;
	upper[0x275] = "\u019F"d;
	upper[0x27D] = "\u2C64"d;
	upper[0x280] = "\u01A6"d;
	upper[0x283] = "\u01A9"d;
	upper[0x288] = "\u01AE"d;
	upper[0x289] = "\u0244"d;
	upper[0x28A] = "\u01B1"d;
	upper[0x28B] = "\u01B2"d;
	upper[0x28C] = "\u0245"d;
	upper[0x292] = "\u01B7"d;
	upper[0x345] = "\u0399"d;
	upper[0x37B] = "\u03FD"d;
	upper[0x37C] = "\u03FE"d;
	upper[0x37D] = "\u03FF"d;
	upper[0x390] = "\u0399\u0308\u0301"d;
	upper[0x3AC] = "\u0386"d;
	upper[0x3AD] = "\u0388"d;
	upper[0x3AE] = "\u0389"d;
	upper[0x3AF] = "\u038A"d;
	upper[0x3B0] = "\u03A5\u0308\u0301"d;
	upper[0x3B1] = "\u0391"d;
	upper[0x3B2] = "\u0392"d;
	upper[0x3B3] = "\u0393"d;
	upper[0x3B4] = "\u0394"d;
	upper[0x3B5] = "\u0395"d;
	upper[0x3B6] = "\u0396"d;
	upper[0x3B7] = "\u0397"d;
	upper[0x3B8] = "\u0398"d;
	upper[0x3B9] = "\u0399"d;
	upper[0x3BA] = "\u039A"d;
	upper[0x3BB] = "\u039B"d;
	upper[0x3BC] = "\u039C"d;
	upper[0x3BD] = "\u039D"d;
	upper[0x3BE] = "\u039E"d;
	upper[0x3BF] = "\u039F"d;
	upper[0x3C0] = "\u03A0"d;
	upper[0x3C1] = "\u03A1"d;
	upper[0x3C2] = "\u03A3"d;
	upper[0x3C3] = "\u03A3"d;
	upper[0x3C4] = "\u03A4"d;
	upper[0x3C5] = "\u03A5"d;
	upper[0x3C6] = "\u03A6"d;
	upper[0x3C7] = "\u03A7"d;
	upper[0x3C8] = "\u03A8"d;
	upper[0x3C9] = "\u03A9"d;
	upper[0x3CA] = "\u03AA"d;
	upper[0x3CB] = "\u03AB"d;
	upper[0x3CC] = "\u038C"d;
	upper[0x3CD] = "\u038E"d;
	upper[0x3CE] = "\u038F"d;
	upper[0x3D0] = "\u0392"d;
	upper[0x3D1] = "\u0398"d;
	upper[0x3D5] = "\u03A6"d;
	upper[0x3D6] = "\u03A0"d;
	upper[0x3D9] = "\u03D8"d;
	upper[0x3DB] = "\u03DA"d;
	upper[0x3DD] = "\u03DC"d;
	upper[0x3DF] = "\u03DE"d;
	upper[0x3E1] = "\u03E0"d;
	upper[0x3E3] = "\u03E2"d;
	upper[0x3E5] = "\u03E4"d;
	upper[0x3E7] = "\u03E6"d;
	upper[0x3E9] = "\u03E8"d;
	upper[0x3EB] = "\u03EA"d;
	upper[0x3ED] = "\u03EC"d;
	upper[0x3EF] = "\u03EE"d;
	upper[0x3F0] = "\u039A"d;
	upper[0x3F1] = "\u03A1"d;
	upper[0x3F2] = "\u03F9"d;
	upper[0x3F5] = "\u0395"d;
	upper[0x3F8] = "\u03F7"d;
	upper[0x3FB] = "\u03FA"d;
	upper[0x430] = "\u0410"d;
	upper[0x431] = "\u0411"d;
	upper[0x432] = "\u0412"d;
	upper[0x433] = "\u0413"d;
	upper[0x434] = "\u0414"d;
	upper[0x435] = "\u0415"d;
	upper[0x436] = "\u0416"d;
	upper[0x437] = "\u0417"d;
	upper[0x438] = "\u0418"d;
	upper[0x439] = "\u0419"d;
	upper[0x43A] = "\u041A"d;
	upper[0x43B] = "\u041B"d;
	upper[0x43C] = "\u041C"d;
	upper[0x43D] = "\u041D"d;
	upper[0x43E] = "\u041E"d;
	upper[0x43F] = "\u041F"d;
	upper[0x440] = "\u0420"d;
	upper[0x441] = "\u0421"d;
	upper[0x442] = "\u0422"d;
	upper[0x443] = "\u0423"d;
	upper[0x444] = "\u0424"d;
	upper[0x445] = "\u0425"d;
	upper[0x446] = "\u0426"d;
	upper[0x447] = "\u0427"d;
	upper[0x448] = "\u0428"d;
	upper[0x449] = "\u0429"d;
	upper[0x44A] = "\u042A"d;
	upper[0x44B] = "\u042B"d;
	upper[0x44C] = "\u042C"d;
	upper[0x44D] = "\u042D"d;
	upper[0x44E] = "\u042E"d;
	upper[0x44F] = "\u042F"d;
	upper[0x450] = "\u0400"d;
	upper[0x451] = "\u0401"d;
	upper[0x452] = "\u0402"d;
	upper[0x453] = "\u0403"d;
	upper[0x454] = "\u0404"d;
	upper[0x455] = "\u0405"d;
	upper[0x456] = "\u0406"d;
	upper[0x457] = "\u0407"d;
	upper[0x458] = "\u0408"d;
	upper[0x459] = "\u0409"d;
	upper[0x45A] = "\u040A"d;
	upper[0x45B] = "\u040B"d;
	upper[0x45C] = "\u040C"d;
	upper[0x45D] = "\u040D"d;
	upper[0x45E] = "\u040E"d;
	upper[0x45F] = "\u040F"d;
	upper[0x461] = "\u0460"d;
	upper[0x463] = "\u0462"d;
	upper[0x465] = "\u0464"d;
	upper[0x467] = "\u0466"d;
	upper[0x469] = "\u0468"d;
	upper[0x46B] = "\u046A"d;
	upper[0x46D] = "\u046C"d;
	upper[0x46F] = "\u046E"d;
	upper[0x471] = "\u0470"d;
	upper[0x473] = "\u0472"d;
	upper[0x475] = "\u0474"d;
	upper[0x477] = "\u0476"d;
	upper[0x479] = "\u0478"d;
	upper[0x47B] = "\u047A"d;
	upper[0x47D] = "\u047C"d;
	upper[0x47F] = "\u047E"d;
	upper[0x481] = "\u0480"d;
	upper[0x48B] = "\u048A"d;
	upper[0x48D] = "\u048C"d;
	upper[0x48F] = "\u048E"d;
	upper[0x491] = "\u0490"d;
	upper[0x493] = "\u0492"d;
	upper[0x495] = "\u0494"d;
	upper[0x497] = "\u0496"d;
	upper[0x499] = "\u0498"d;
	upper[0x49B] = "\u049A"d;
	upper[0x49D] = "\u049C"d;
	upper[0x49F] = "\u049E"d;
	upper[0x4A1] = "\u04A0"d;
	upper[0x4A3] = "\u04A2"d;
	upper[0x4A5] = "\u04A4"d;
	upper[0x4A7] = "\u04A6"d;
	upper[0x4A9] = "\u04A8"d;
	upper[0x4AB] = "\u04AA"d;
	upper[0x4AD] = "\u04AC"d;
	upper[0x4AF] = "\u04AE"d;
	upper[0x4B1] = "\u04B0"d;
	upper[0x4B3] = "\u04B2"d;
	upper[0x4B5] = "\u04B4"d;
	upper[0x4B7] = "\u04B6"d;
	upper[0x4B9] = "\u04B8"d;
	upper[0x4BB] = "\u04BA"d;
	upper[0x4BD] = "\u04BC"d;
	upper[0x4BF] = "\u04BE"d;
	upper[0x4C2] = "\u04C1"d;
	upper[0x4C4] = "\u04C3"d;
	upper[0x4C6] = "\u04C5"d;
	upper[0x4C8] = "\u04C7"d;
	upper[0x4CA] = "\u04C9"d;
	upper[0x4CC] = "\u04CB"d;
	upper[0x4CE] = "\u04CD"d;
	upper[0x4CF] = "\u04C0"d;
	upper[0x4D1] = "\u04D0"d;
	upper[0x4D3] = "\u04D2"d;
	upper[0x4D5] = "\u04D4"d;
	upper[0x4D7] = "\u04D6"d;
	upper[0x4D9] = "\u04D8"d;
	upper[0x4DB] = "\u04DA"d;
	upper[0x4DD] = "\u04DC"d;
	upper[0x4DF] = "\u04DE"d;
	upper[0x4E1] = "\u04E0"d;
	upper[0x4E3] = "\u04E2"d;
	upper[0x4E5] = "\u04E4"d;
	upper[0x4E7] = "\u04E6"d;
	upper[0x4E9] = "\u04E8"d;
	upper[0x4EB] = "\u04EA"d;
	upper[0x4ED] = "\u04EC"d;
	upper[0x4EF] = "\u04EE"d;
	upper[0x4F1] = "\u04F0"d;
	upper[0x4F3] = "\u04F2"d;
	upper[0x4F5] = "\u04F4"d;
	upper[0x4F7] = "\u04F6"d;
	upper[0x4F9] = "\u04F8"d;
	upper[0x4FB] = "\u04FA"d;
	upper[0x4FD] = "\u04FC"d;
	upper[0x4FF] = "\u04FE"d;
	upper[0x501] = "\u0500"d;
	upper[0x503] = "\u0502"d;
	upper[0x505] = "\u0504"d;
	upper[0x507] = "\u0506"d;
	upper[0x509] = "\u0508"d;
	upper[0x50B] = "\u050A"d;
	upper[0x50D] = "\u050C"d;
	upper[0x50F] = "\u050E"d;
	upper[0x511] = "\u0510"d;
	upper[0x513] = "\u0512"d;
	upper[0x561] = "\u0531"d;
	upper[0x562] = "\u0532"d;
	upper[0x563] = "\u0533"d;
	upper[0x564] = "\u0534"d;
	upper[0x565] = "\u0535"d;
	upper[0x566] = "\u0536"d;
	upper[0x567] = "\u0537"d;
	upper[0x568] = "\u0538"d;
	upper[0x569] = "\u0539"d;
	upper[0x56A] = "\u053A"d;
	upper[0x56B] = "\u053B"d;
	upper[0x56C] = "\u053C"d;
	upper[0x56D] = "\u053D"d;
	upper[0x56E] = "\u053E"d;
	upper[0x56F] = "\u053F"d;
	upper[0x570] = "\u0540"d;
	upper[0x571] = "\u0541"d;
	upper[0x572] = "\u0542"d;
	upper[0x573] = "\u0543"d;
	upper[0x574] = "\u0544"d;
	upper[0x575] = "\u0545"d;
	upper[0x576] = "\u0546"d;
	upper[0x577] = "\u0547"d;
	upper[0x578] = "\u0548"d;
	upper[0x579] = "\u0549"d;
	upper[0x57A] = "\u054A"d;
	upper[0x57B] = "\u054B"d;
	upper[0x57C] = "\u054C"d;
	upper[0x57D] = "\u054D"d;
	upper[0x57E] = "\u054E"d;
	upper[0x57F] = "\u054F"d;
	upper[0x580] = "\u0550"d;
	upper[0x581] = "\u0551"d;
	upper[0x582] = "\u0552"d;
	upper[0x583] = "\u0553"d;
	upper[0x584] = "\u0554"d;
	upper[0x585] = "\u0555"d;
	upper[0x586] = "\u0556"d;
	upper[0x587] = "\u0535\u0552"d;
	upper[0x1D7D] = "\u2C63"d;
	upper[0x1E01] = "\u1E00"d;
	upper[0x1E03] = "\u1E02"d;
	upper[0x1E05] = "\u1E04"d;
	upper[0x1E07] = "\u1E06"d;
	upper[0x1E09] = "\u1E08"d;
	upper[0x1E0B] = "\u1E0A"d;
	upper[0x1E0D] = "\u1E0C"d;
	upper[0x1E0F] = "\u1E0E"d;
	upper[0x1E11] = "\u1E10"d;
	upper[0x1E13] = "\u1E12"d;
	upper[0x1E15] = "\u1E14"d;
	upper[0x1E17] = "\u1E16"d;
	upper[0x1E19] = "\u1E18"d;
	upper[0x1E1B] = "\u1E1A"d;
	upper[0x1E1D] = "\u1E1C"d;
	upper[0x1E1F] = "\u1E1E"d;
	upper[0x1E21] = "\u1E20"d;
	upper[0x1E23] = "\u1E22"d;
	upper[0x1E25] = "\u1E24"d;
	upper[0x1E27] = "\u1E26"d;
	upper[0x1E29] = "\u1E28"d;
	upper[0x1E2B] = "\u1E2A"d;
	upper[0x1E2D] = "\u1E2C"d;
	upper[0x1E2F] = "\u1E2E"d;
	upper[0x1E31] = "\u1E30"d;
	upper[0x1E33] = "\u1E32"d;
	upper[0x1E35] = "\u1E34"d;
	upper[0x1E37] = "\u1E36"d;
	upper[0x1E39] = "\u1E38"d;
	upper[0x1E3B] = "\u1E3A"d;
	upper[0x1E3D] = "\u1E3C"d;
	upper[0x1E3F] = "\u1E3E"d;
	upper[0x1E41] = "\u1E40"d;
	upper[0x1E43] = "\u1E42"d;
	upper[0x1E45] = "\u1E44"d;
	upper[0x1E47] = "\u1E46"d;
	upper[0x1E49] = "\u1E48"d;
	upper[0x1E4B] = "\u1E4A"d;
	upper[0x1E4D] = "\u1E4C"d;
	upper[0x1E4F] = "\u1E4E"d;
	upper[0x1E51] = "\u1E50"d;
	upper[0x1E53] = "\u1E52"d;
	upper[0x1E55] = "\u1E54"d;
	upper[0x1E57] = "\u1E56"d;
	upper[0x1E59] = "\u1E58"d;
	upper[0x1E5B] = "\u1E5A"d;
	upper[0x1E5D] = "\u1E5C"d;
	upper[0x1E5F] = "\u1E5E"d;
	upper[0x1E61] = "\u1E60"d;
	upper[0x1E63] = "\u1E62"d;
	upper[0x1E65] = "\u1E64"d;
	upper[0x1E67] = "\u1E66"d;
	upper[0x1E69] = "\u1E68"d;
	upper[0x1E6B] = "\u1E6A"d;
	upper[0x1E6D] = "\u1E6C"d;
	upper[0x1E6F] = "\u1E6E"d;
	upper[0x1E71] = "\u1E70"d;
	upper[0x1E73] = "\u1E72"d;
	upper[0x1E75] = "\u1E74"d;
	upper[0x1E77] = "\u1E76"d;
	upper[0x1E79] = "\u1E78"d;
	upper[0x1E7B] = "\u1E7A"d;
	upper[0x1E7D] = "\u1E7C"d;
	upper[0x1E7F] = "\u1E7E"d;
	upper[0x1E81] = "\u1E80"d;
	upper[0x1E83] = "\u1E82"d;
	upper[0x1E85] = "\u1E84"d;
	upper[0x1E87] = "\u1E86"d;
	upper[0x1E89] = "\u1E88"d;
	upper[0x1E8B] = "\u1E8A"d;
	upper[0x1E8D] = "\u1E8C"d;
	upper[0x1E8F] = "\u1E8E"d;
	upper[0x1E91] = "\u1E90"d;
	upper[0x1E93] = "\u1E92"d;
	upper[0x1E95] = "\u1E94"d;
	upper[0x1E96] = "\u0048\u0331"d;
	upper[0x1E97] = "\u0054\u0308"d;
	upper[0x1E98] = "\u0057\u030A"d;
	upper[0x1E99] = "\u0059\u030A"d;
	upper[0x1E9A] = "\u0041\u02BE"d;
	upper[0x1E9B] = "\u1E60"d;
	upper[0x1EA1] = "\u1EA0"d;
	upper[0x1EA3] = "\u1EA2"d;
	upper[0x1EA5] = "\u1EA4"d;
	upper[0x1EA7] = "\u1EA6"d;
	upper[0x1EA9] = "\u1EA8"d;
	upper[0x1EAB] = "\u1EAA"d;
	upper[0x1EAD] = "\u1EAC"d;
	upper[0x1EAF] = "\u1EAE"d;
	upper[0x1EB1] = "\u1EB0"d;
	upper[0x1EB3] = "\u1EB2"d;
	upper[0x1EB5] = "\u1EB4"d;
	upper[0x1EB7] = "\u1EB6"d;
	upper[0x1EB9] = "\u1EB8"d;
	upper[0x1EBB] = "\u1EBA"d;
	upper[0x1EBD] = "\u1EBC"d;
	upper[0x1EBF] = "\u1EBE"d;
	upper[0x1EC1] = "\u1EC0"d;
	upper[0x1EC3] = "\u1EC2"d;
	upper[0x1EC5] = "\u1EC4"d;
	upper[0x1EC7] = "\u1EC6"d;
	upper[0x1EC9] = "\u1EC8"d;
	upper[0x1ECB] = "\u1ECA"d;
	upper[0x1ECD] = "\u1ECC"d;
	upper[0x1ECF] = "\u1ECE"d;
	upper[0x1ED1] = "\u1ED0"d;
	upper[0x1ED3] = "\u1ED2"d;
	upper[0x1ED5] = "\u1ED4"d;
	upper[0x1ED7] = "\u1ED6"d;
	upper[0x1ED9] = "\u1ED8"d;
	upper[0x1EDB] = "\u1EDA"d;
	upper[0x1EDD] = "\u1EDC"d;
	upper[0x1EDF] = "\u1EDE"d;
	upper[0x1EE1] = "\u1EE0"d;
	upper[0x1EE3] = "\u1EE2"d;
	upper[0x1EE5] = "\u1EE4"d;
	upper[0x1EE7] = "\u1EE6"d;
	upper[0x1EE9] = "\u1EE8"d;
	upper[0x1EEB] = "\u1EEA"d;
	upper[0x1EED] = "\u1EEC"d;
	upper[0x1EEF] = "\u1EEE"d;
	upper[0x1EF1] = "\u1EF0"d;
	upper[0x1EF3] = "\u1EF2"d;
	upper[0x1EF5] = "\u1EF4"d;
	upper[0x1EF7] = "\u1EF6"d;
	upper[0x1EF9] = "\u1EF8"d;
	upper[0x1F00] = "\u1F08"d;
	upper[0x1F01] = "\u1F09"d;
	upper[0x1F02] = "\u1F0A"d;
	upper[0x1F03] = "\u1F0B"d;
	upper[0x1F04] = "\u1F0C"d;
	upper[0x1F05] = "\u1F0D"d;
	upper[0x1F06] = "\u1F0E"d;
	upper[0x1F07] = "\u1F0F"d;
	upper[0x1F10] = "\u1F18"d;
	upper[0x1F11] = "\u1F19"d;
	upper[0x1F12] = "\u1F1A"d;
	upper[0x1F13] = "\u1F1B"d;
	upper[0x1F14] = "\u1F1C"d;
	upper[0x1F15] = "\u1F1D"d;
	upper[0x1F20] = "\u1F28"d;
	upper[0x1F21] = "\u1F29"d;
	upper[0x1F22] = "\u1F2A"d;
	upper[0x1F23] = "\u1F2B"d;
	upper[0x1F24] = "\u1F2C"d;
	upper[0x1F25] = "\u1F2D"d;
	upper[0x1F26] = "\u1F2E"d;
	upper[0x1F27] = "\u1F2F"d;
	upper[0x1F30] = "\u1F38"d;
	upper[0x1F31] = "\u1F39"d;
	upper[0x1F32] = "\u1F3A"d;
	upper[0x1F33] = "\u1F3B"d;
	upper[0x1F34] = "\u1F3C"d;
	upper[0x1F35] = "\u1F3D"d;
	upper[0x1F36] = "\u1F3E"d;
	upper[0x1F37] = "\u1F3F"d;
	upper[0x1F40] = "\u1F48"d;
	upper[0x1F41] = "\u1F49"d;
	upper[0x1F42] = "\u1F4A"d;
	upper[0x1F43] = "\u1F4B"d;
	upper[0x1F44] = "\u1F4C"d;
	upper[0x1F45] = "\u1F4D"d;
	upper[0x1F50] = "\u03A5\u0313"d;
	upper[0x1F51] = "\u1F59"d;
	upper[0x1F52] = "\u03A5\u0313\u0300"d;
	upper[0x1F53] = "\u1F5B"d;
	upper[0x1F54] = "\u03A5\u0313\u0301"d;
	upper[0x1F55] = "\u1F5D"d;
	upper[0x1F56] = "\u03A5\u0313\u0342"d;
	upper[0x1F57] = "\u1F5F"d;
	upper[0x1F60] = "\u1F68"d;
	upper[0x1F61] = "\u1F69"d;
	upper[0x1F62] = "\u1F6A"d;
	upper[0x1F63] = "\u1F6B"d;
	upper[0x1F64] = "\u1F6C"d;
	upper[0x1F65] = "\u1F6D"d;
	upper[0x1F66] = "\u1F6E"d;
	upper[0x1F67] = "\u1F6F"d;
	upper[0x1F70] = "\u1FBA"d;
	upper[0x1F71] = "\u1FBB"d;
	upper[0x1F72] = "\u1FC8"d;
	upper[0x1F73] = "\u1FC9"d;
	upper[0x1F74] = "\u1FCA"d;
	upper[0x1F75] = "\u1FCB"d;
	upper[0x1F76] = "\u1FDA"d;
	upper[0x1F77] = "\u1FDB"d;
	upper[0x1F78] = "\u1FF8"d;
	upper[0x1F79] = "\u1FF9"d;
	upper[0x1F7A] = "\u1FEA"d;
	upper[0x1F7B] = "\u1FEB"d;
	upper[0x1F7C] = "\u1FFA"d;
	upper[0x1F7D] = "\u1FFB"d;
	upper[0x1F80] = "\u1F08\u0399"d;
	upper[0x1F81] = "\u1F09\u0399"d;
	upper[0x1F82] = "\u1F0A\u0399"d;
	upper[0x1F83] = "\u1F0B\u0399"d;
	upper[0x1F84] = "\u1F0C\u0399"d;
	upper[0x1F85] = "\u1F0D\u0399"d;
	upper[0x1F86] = "\u1F0E\u0399"d;
	upper[0x1F87] = "\u1F0F\u0399"d;
	upper[0x1F88] = "\u1F08\u0399"d;
	upper[0x1F89] = "\u1F09\u0399"d;
	upper[0x1F8A] = "\u1F0A\u0399"d;
	upper[0x1F8B] = "\u1F0B\u0399"d;
	upper[0x1F8C] = "\u1F0C\u0399"d;
	upper[0x1F8D] = "\u1F0D\u0399"d;
	upper[0x1F8E] = "\u1F0E\u0399"d;
	upper[0x1F8F] = "\u1F0F\u0399"d;
	upper[0x1F90] = "\u1F28\u0399"d;
	upper[0x1F91] = "\u1F29\u0399"d;
	upper[0x1F92] = "\u1F2A\u0399"d;
	upper[0x1F93] = "\u1F2B\u0399"d;
	upper[0x1F94] = "\u1F2C\u0399"d;
	upper[0x1F95] = "\u1F2D\u0399"d;
	upper[0x1F96] = "\u1F2E\u0399"d;
	upper[0x1F97] = "\u1F2F\u0399"d;
	upper[0x1F98] = "\u1F28\u0399"d;
	upper[0x1F99] = "\u1F29\u0399"d;
	upper[0x1F9A] = "\u1F2A\u0399"d;
	upper[0x1F9B] = "\u1F2B\u0399"d;
	upper[0x1F9C] = "\u1F2C\u0399"d;
	upper[0x1F9D] = "\u1F2D\u0399"d;
	upper[0x1F9E] = "\u1F2E\u0399"d;
	upper[0x1F9F] = "\u1F2F\u0399"d;
	upper[0x1FA0] = "\u1F68\u0399"d;
	upper[0x1FA1] = "\u1F69\u0399"d;
	upper[0x1FA2] = "\u1F6A\u0399"d;
	upper[0x1FA3] = "\u1F6B\u0399"d;
	upper[0x1FA4] = "\u1F6C\u0399"d;
	upper[0x1FA5] = "\u1F6D\u0399"d;
	upper[0x1FA6] = "\u1F6E\u0399"d;
	upper[0x1FA7] = "\u1F6F\u0399"d;
	upper[0x1FA8] = "\u1F68\u0399"d;
	upper[0x1FA9] = "\u1F69\u0399"d;
	upper[0x1FAA] = "\u1F6A\u0399"d;
	upper[0x1FAB] = "\u1F6B\u0399"d;
	upper[0x1FAC] = "\u1F6C\u0399"d;
	upper[0x1FAD] = "\u1F6D\u0399"d;
	upper[0x1FAE] = "\u1F6E\u0399"d;
	upper[0x1FAF] = "\u1F6F\u0399"d;
	upper[0x1FB0] = "\u1FB8"d;
	upper[0x1FB1] = "\u1FB9"d;
	upper[0x1FB2] = "\u1FBA\u0399"d;
	upper[0x1FB3] = "\u0391\u0399"d;
	upper[0x1FB4] = "\u0386\u0399"d;
	upper[0x1FB6] = "\u0391\u0342"d;
	upper[0x1FB7] = "\u0391\u0342\u0399"d;
	upper[0x1FBC] = "\u0391\u0399"d;
	upper[0x1FBE] = "\u0399"d;
	upper[0x1FC2] = "\u1FCA\u0399"d;
	upper[0x1FC3] = "\u0397\u0399"d;
	upper[0x1FC4] = "\u0389\u0399"d;
	upper[0x1FC6] = "\u0397\u0342"d;
	upper[0x1FC7] = "\u0397\u0342\u0399"d;
	upper[0x1FCC] = "\u0397\u0399"d;
	upper[0x1FD0] = "\u1FD8"d;
	upper[0x1FD1] = "\u1FD9"d;
	upper[0x1FD2] = "\u0399\u0308\u0300"d;
	upper[0x1FD3] = "\u0399\u0308\u0301"d;
	upper[0x1FD6] = "\u0399\u0342"d;
	upper[0x1FD7] = "\u0399\u0308\u0342"d;
	upper[0x1FE0] = "\u1FE8"d;
	upper[0x1FE1] = "\u1FE9"d;
	upper[0x1FE2] = "\u03A5\u0308\u0300"d;
	upper[0x1FE3] = "\u03A5\u0308\u0301"d;
	upper[0x1FE4] = "\u03A1\u0313"d;
	upper[0x1FE5] = "\u1FEC"d;
	upper[0x1FE6] = "\u03A5\u0342"d;
	upper[0x1FE7] = "\u03A5\u0308\u0342"d;
	upper[0x1FF2] = "\u1FFA\u0399"d;
	upper[0x1FF3] = "\u03A9\u0399"d;
	upper[0x1FF4] = "\u038F\u0399"d;
	upper[0x1FF6] = "\u03A9\u0342"d;
	upper[0x1FF7] = "\u03A9\u0342\u0399"d;
	upper[0x1FFC] = "\u03A9\u0399"d;
	upper[0x214E] = "\u2132"d;
	upper[0x2170] = "\u2160"d;
	upper[0x2171] = "\u2161"d;
	upper[0x2172] = "\u2162"d;
	upper[0x2173] = "\u2163"d;
	upper[0x2174] = "\u2164"d;
	upper[0x2175] = "\u2165"d;
	upper[0x2176] = "\u2166"d;
	upper[0x2177] = "\u2167"d;
	upper[0x2178] = "\u2168"d;
	upper[0x2179] = "\u2169"d;
	upper[0x217A] = "\u216A"d;
	upper[0x217B] = "\u216B"d;
	upper[0x217C] = "\u216C"d;
	upper[0x217D] = "\u216D"d;
	upper[0x217E] = "\u216E"d;
	upper[0x217F] = "\u216F"d;
	upper[0x2184] = "\u2183"d;
	upper[0x24D0] = "\u24B6"d;
	upper[0x24D1] = "\u24B7"d;
	upper[0x24D2] = "\u24B8"d;
	upper[0x24D3] = "\u24B9"d;
	upper[0x24D4] = "\u24BA"d;
	upper[0x24D5] = "\u24BB"d;
	upper[0x24D6] = "\u24BC"d;
	upper[0x24D7] = "\u24BD"d;
	upper[0x24D8] = "\u24BE"d;
	upper[0x24D9] = "\u24BF"d;
	upper[0x24DA] = "\u24C0"d;
	upper[0x24DB] = "\u24C1"d;
	upper[0x24DC] = "\u24C2"d;
	upper[0x24DD] = "\u24C3"d;
	upper[0x24DE] = "\u24C4"d;
	upper[0x24DF] = "\u24C5"d;
	upper[0x24E0] = "\u24C6"d;
	upper[0x24E1] = "\u24C7"d;
	upper[0x24E2] = "\u24C8"d;
	upper[0x24E3] = "\u24C9"d;
	upper[0x24E4] = "\u24CA"d;
	upper[0x24E5] = "\u24CB"d;
	upper[0x24E6] = "\u24CC"d;
	upper[0x24E7] = "\u24CD"d;
	upper[0x24E8] = "\u24CE"d;
	upper[0x24E9] = "\u24CF"d;
	upper[0x2C30] = "\u2C00"d;
	upper[0x2C31] = "\u2C01"d;
	upper[0x2C32] = "\u2C02"d;
	upper[0x2C33] = "\u2C03"d;
	upper[0x2C34] = "\u2C04"d;
	upper[0x2C35] = "\u2C05"d;
	upper[0x2C36] = "\u2C06"d;
	upper[0x2C37] = "\u2C07"d;
	upper[0x2C38] = "\u2C08"d;
	upper[0x2C39] = "\u2C09"d;
	upper[0x2C3A] = "\u2C0A"d;
	upper[0x2C3B] = "\u2C0B"d;
	upper[0x2C3C] = "\u2C0C"d;
	upper[0x2C3D] = "\u2C0D"d;
	upper[0x2C3E] = "\u2C0E"d;
	upper[0x2C3F] = "\u2C0F"d;
	upper[0x2C40] = "\u2C10"d;
	upper[0x2C41] = "\u2C11"d;
	upper[0x2C42] = "\u2C12"d;
	upper[0x2C43] = "\u2C13"d;
	upper[0x2C44] = "\u2C14"d;
	upper[0x2C45] = "\u2C15"d;
	upper[0x2C46] = "\u2C16"d;
	upper[0x2C47] = "\u2C17"d;
	upper[0x2C48] = "\u2C18"d;
	upper[0x2C49] = "\u2C19"d;
	upper[0x2C4A] = "\u2C1A"d;
	upper[0x2C4B] = "\u2C1B"d;
	upper[0x2C4C] = "\u2C1C"d;
	upper[0x2C4D] = "\u2C1D"d;
	upper[0x2C4E] = "\u2C1E"d;
	upper[0x2C4F] = "\u2C1F"d;
	upper[0x2C50] = "\u2C20"d;
	upper[0x2C51] = "\u2C21"d;
	upper[0x2C52] = "\u2C22"d;
	upper[0x2C53] = "\u2C23"d;
	upper[0x2C54] = "\u2C24"d;
	upper[0x2C55] = "\u2C25"d;
	upper[0x2C56] = "\u2C26"d;
	upper[0x2C57] = "\u2C27"d;
	upper[0x2C58] = "\u2C28"d;
	upper[0x2C59] = "\u2C29"d;
	upper[0x2C5A] = "\u2C2A"d;
	upper[0x2C5B] = "\u2C2B"d;
	upper[0x2C5C] = "\u2C2C"d;
	upper[0x2C5D] = "\u2C2D"d;
	upper[0x2C5E] = "\u2C2E"d;
	upper[0x2C61] = "\u2C60"d;
	upper[0x2C65] = "\u023A"d;
	upper[0x2C66] = "\u023E"d;
	upper[0x2C68] = "\u2C67"d;
	upper[0x2C6A] = "\u2C69"d;
	upper[0x2C6C] = "\u2C6B"d;
	upper[0x2C76] = "\u2C75"d;
	upper[0x2C81] = "\u2C80"d;
	upper[0x2C83] = "\u2C82"d;
	upper[0x2C85] = "\u2C84"d;
	upper[0x2C87] = "\u2C86"d;
	upper[0x2C89] = "\u2C88"d;
	upper[0x2C8B] = "\u2C8A"d;
	upper[0x2C8D] = "\u2C8C"d;
	upper[0x2C8F] = "\u2C8E"d;
	upper[0x2C91] = "\u2C90"d;
	upper[0x2C93] = "\u2C92"d;
	upper[0x2C95] = "\u2C94"d;
	upper[0x2C97] = "\u2C96"d;
	upper[0x2C99] = "\u2C98"d;
	upper[0x2C9B] = "\u2C9A"d;
	upper[0x2C9D] = "\u2C9C"d;
	upper[0x2C9F] = "\u2C9E"d;
	upper[0x2CA1] = "\u2CA0"d;
	upper[0x2CA3] = "\u2CA2"d;
	upper[0x2CA5] = "\u2CA4"d;
	upper[0x2CA7] = "\u2CA6"d;
	upper[0x2CA9] = "\u2CA8"d;
	upper[0x2CAB] = "\u2CAA"d;
	upper[0x2CAD] = "\u2CAC"d;
	upper[0x2CAF] = "\u2CAE"d;
	upper[0x2CB1] = "\u2CB0"d;
	upper[0x2CB3] = "\u2CB2"d;
	upper[0x2CB5] = "\u2CB4"d;
	upper[0x2CB7] = "\u2CB6"d;
	upper[0x2CB9] = "\u2CB8"d;
	upper[0x2CBB] = "\u2CBA"d;
	upper[0x2CBD] = "\u2CBC"d;
	upper[0x2CBF] = "\u2CBE"d;
	upper[0x2CC1] = "\u2CC0"d;
	upper[0x2CC3] = "\u2CC2"d;
	upper[0x2CC5] = "\u2CC4"d;
	upper[0x2CC7] = "\u2CC6"d;
	upper[0x2CC9] = "\u2CC8"d;
	upper[0x2CCB] = "\u2CCA"d;
	upper[0x2CCD] = "\u2CCC"d;
	upper[0x2CCF] = "\u2CCE"d;
	upper[0x2CD1] = "\u2CD0"d;
	upper[0x2CD3] = "\u2CD2"d;
	upper[0x2CD5] = "\u2CD4"d;
	upper[0x2CD7] = "\u2CD6"d;
	upper[0x2CD9] = "\u2CD8"d;
	upper[0x2CDB] = "\u2CDA"d;
	upper[0x2CDD] = "\u2CDC"d;
	upper[0x2CDF] = "\u2CDE"d;
	upper[0x2CE1] = "\u2CE0"d;
	upper[0x2CE3] = "\u2CE2"d;
	upper[0x2D00] = "\u10A0"d;
	upper[0x2D01] = "\u10A1"d;
	upper[0x2D02] = "\u10A2"d;
	upper[0x2D03] = "\u10A3"d;
	upper[0x2D04] = "\u10A4"d;
	upper[0x2D05] = "\u10A5"d;
	upper[0x2D06] = "\u10A6"d;
	upper[0x2D07] = "\u10A7"d;
	upper[0x2D08] = "\u10A8"d;
	upper[0x2D09] = "\u10A9"d;
	upper[0x2D0A] = "\u10AA"d;
	upper[0x2D0B] = "\u10AB"d;
	upper[0x2D0C] = "\u10AC"d;
	upper[0x2D0D] = "\u10AD"d;
	upper[0x2D0E] = "\u10AE"d;
	upper[0x2D0F] = "\u10AF"d;
	upper[0x2D10] = "\u10B0"d;
	upper[0x2D11] = "\u10B1"d;
	upper[0x2D12] = "\u10B2"d;
	upper[0x2D13] = "\u10B3"d;
	upper[0x2D14] = "\u10B4"d;
	upper[0x2D15] = "\u10B5"d;
	upper[0x2D16] = "\u10B6"d;
	upper[0x2D17] = "\u10B7"d;
	upper[0x2D18] = "\u10B8"d;
	upper[0x2D19] = "\u10B9"d;
	upper[0x2D1A] = "\u10BA"d;
	upper[0x2D1B] = "\u10BB"d;
	upper[0x2D1C] = "\u10BC"d;
	upper[0x2D1D] = "\u10BD"d;
	upper[0x2D1E] = "\u10BE"d;
	upper[0x2D1F] = "\u10BF"d;
	upper[0x2D20] = "\u10C0"d;
	upper[0x2D21] = "\u10C1"d;
	upper[0x2D22] = "\u10C2"d;
	upper[0x2D23] = "\u10C3"d;
	upper[0x2D24] = "\u10C4"d;
	upper[0x2D25] = "\u10C5"d;
	upper[0xFB00] = "\u0046\u0046"d;
	upper[0xFB01] = "\u0046\u0049"d;
	upper[0xFB02] = "\u0046\u004C"d;
	upper[0xFB03] = "\u0046\u0046\u0049"d;
	upper[0xFB04] = "\u0046\u0046\u004C"d;
	upper[0xFB05] = "\u0053\u0054"d;
	upper[0xFB06] = "\u0053\u0054"d;
	upper[0xFB13] = "\u0544\u0546"d;
	upper[0xFB14] = "\u0544\u0535"d;
	upper[0xFB15] = "\u0544\u053B"d;
	upper[0xFB16] = "\u054E\u0546"d;
	upper[0xFB17] = "\u0544\u053D"d;
	upper[0xFF41] = "\uFF21"d;
	upper[0xFF42] = "\uFF22"d;
	upper[0xFF43] = "\uFF23"d;
	upper[0xFF44] = "\uFF24"d;
	upper[0xFF45] = "\uFF25"d;
	upper[0xFF46] = "\uFF26"d;
	upper[0xFF47] = "\uFF27"d;
	upper[0xFF48] = "\uFF28"d;
	upper[0xFF49] = "\uFF29"d;
	upper[0xFF4A] = "\uFF2A"d;
	upper[0xFF4B] = "\uFF2B"d;
	upper[0xFF4C] = "\uFF2C"d;
	upper[0xFF4D] = "\uFF2D"d;
	upper[0xFF4E] = "\uFF2E"d;
	upper[0xFF4F] = "\uFF2F"d;
	upper[0xFF50] = "\uFF30"d;
	upper[0xFF51] = "\uFF31"d;
	upper[0xFF52] = "\uFF32"d;
	upper[0xFF53] = "\uFF33"d;
	upper[0xFF54] = "\uFF34"d;
	upper[0xFF55] = "\uFF35"d;
	upper[0xFF56] = "\uFF36"d;
	upper[0xFF57] = "\uFF37"d;
	upper[0xFF58] = "\uFF38"d;
	upper[0xFF59] = "\uFF39"d;
	upper[0xFF5A] = "\uFF3A"d;
	upper[0x10428] = "\U00010400"d;
	upper[0x10429] = "\U00010401"d;
	upper[0x1042A] = "\U00010402"d;
	upper[0x1042B] = "\U00010403"d;
	upper[0x1042C] = "\U00010404"d;
	upper[0x1042D] = "\U00010405"d;
	upper[0x1042E] = "\U00010406"d;
	upper[0x1042F] = "\U00010407"d;
	upper[0x10430] = "\U00010408"d;
	upper[0x10431] = "\U00010409"d;
	upper[0x10432] = "\U0001040A"d;
	upper[0x10433] = "\U0001040B"d;
	upper[0x10434] = "\U0001040C"d;
	upper[0x10435] = "\U0001040D"d;
	upper[0x10436] = "\U0001040E"d;
	upper[0x10437] = "\U0001040F"d;
	upper[0x10438] = "\U00010410"d;
	upper[0x10439] = "\U00010411"d;
	upper[0x1043A] = "\U00010412"d;
	upper[0x1043B] = "\U00010413"d;
	upper[0x1043C] = "\U00010414"d;
	upper[0x1043D] = "\U00010415"d;
	upper[0x1043E] = "\U00010416"d;
	upper[0x1043F] = "\U00010417"d;
	upper[0x10440] = "\U00010418"d;
	upper[0x10441] = "\U00010419"d;
	upper[0x10442] = "\U0001041A"d;
	upper[0x10443] = "\U0001041B"d;
	upper[0x10444] = "\U0001041C"d;
	upper[0x10445] = "\U0001041D"d;
	upper[0x10446] = "\U0001041E"d;
	upper[0x10447] = "\U0001041F"d;
	upper[0x10448] = "\U00010420"d;
	upper[0x10449] = "\U00010421"d;
	upper[0x1044A] = "\U00010422"d;
	upper[0x1044B] = "\U00010423"d;
	upper[0x1044C] = "\U00010424"d;
	upper[0x1044D] = "\U00010425"d;
	upper[0x1044E] = "\U00010426"d;
	upper[0x1044F] = "\U00010427"d;
	lower[0x41] = "\u0061"d;
	lower[0x42] = "\u0062"d;
	lower[0x43] = "\u0063"d;
	lower[0x44] = "\u0064"d;
	lower[0x45] = "\u0065"d;
	lower[0x46] = "\u0066"d;
	lower[0x47] = "\u0067"d;
	lower[0x48] = "\u0068"d;
	lower[0x49] = "\u0069"d;
	lower[0x4A] = "\u006A"d;
	lower[0x4B] = "\u006B"d;
	lower[0x4C] = "\u006C"d;
	lower[0x4D] = "\u006D"d;
	lower[0x4E] = "\u006E"d;
	lower[0x4F] = "\u006F"d;
	lower[0x50] = "\u0070"d;
	lower[0x51] = "\u0071"d;
	lower[0x52] = "\u0072"d;
	lower[0x53] = "\u0073"d;
	lower[0x54] = "\u0074"d;
	lower[0x55] = "\u0075"d;
	lower[0x56] = "\u0076"d;
	lower[0x57] = "\u0077"d;
	lower[0x58] = "\u0078"d;
	lower[0x59] = "\u0079"d;
	lower[0x5A] = "\u007A"d;
	lower[0xC0] = "\u00E0"d;
	lower[0xC1] = "\u00E1"d;
	lower[0xC2] = "\u00E2"d;
	lower[0xC3] = "\u00E3"d;
	lower[0xC4] = "\u00E4"d;
	lower[0xC5] = "\u00E5"d;
	lower[0xC6] = "\u00E6"d;
	lower[0xC7] = "\u00E7"d;
	lower[0xC8] = "\u00E8"d;
	lower[0xC9] = "\u00E9"d;
	lower[0xCA] = "\u00EA"d;
	lower[0xCB] = "\u00EB"d;
	lower[0xCC] = "\u00EC"d;
	lower[0xCD] = "\u00ED"d;
	lower[0xCE] = "\u00EE"d;
	lower[0xCF] = "\u00EF"d;
	lower[0xD0] = "\u00F0"d;
	lower[0xD1] = "\u00F1"d;
	lower[0xD2] = "\u00F2"d;
	lower[0xD3] = "\u00F3"d;
	lower[0xD4] = "\u00F4"d;
	lower[0xD5] = "\u00F5"d;
	lower[0xD6] = "\u00F6"d;
	lower[0xD8] = "\u00F8"d;
	lower[0xD9] = "\u00F9"d;
	lower[0xDA] = "\u00FA"d;
	lower[0xDB] = "\u00FB"d;
	lower[0xDC] = "\u00FC"d;
	lower[0xDD] = "\u00FD"d;
	lower[0xDE] = "\u00FE"d;
	lower[0x100] = "\u0101"d;
	lower[0x102] = "\u0103"d;
	lower[0x104] = "\u0105"d;
	lower[0x106] = "\u0107"d;
	lower[0x108] = "\u0109"d;
	lower[0x10A] = "\u010B"d;
	lower[0x10C] = "\u010D"d;
	lower[0x10E] = "\u010F"d;
	lower[0x110] = "\u0111"d;
	lower[0x112] = "\u0113"d;
	lower[0x114] = "\u0115"d;
	lower[0x116] = "\u0117"d;
	lower[0x118] = "\u0119"d;
	lower[0x11A] = "\u011B"d;
	lower[0x11C] = "\u011D"d;
	lower[0x11E] = "\u011F"d;
	lower[0x120] = "\u0121"d;
	lower[0x122] = "\u0123"d;
	lower[0x124] = "\u0125"d;
	lower[0x126] = "\u0127"d;
	lower[0x128] = "\u0129"d;
	lower[0x12A] = "\u012B"d;
	lower[0x12C] = "\u012D"d;
	lower[0x12E] = "\u012F"d;
	lower[0x130] = "\u0069\u0307"d;
	lower[0x132] = "\u0133"d;
	lower[0x134] = "\u0135"d;
	lower[0x136] = "\u0137"d;
	lower[0x139] = "\u013A"d;
	lower[0x13B] = "\u013C"d;
	lower[0x13D] = "\u013E"d;
	lower[0x13F] = "\u0140"d;
	lower[0x141] = "\u0142"d;
	lower[0x143] = "\u0144"d;
	lower[0x145] = "\u0146"d;
	lower[0x147] = "\u0148"d;
	lower[0x14A] = "\u014B"d;
	lower[0x14C] = "\u014D"d;
	lower[0x14E] = "\u014F"d;
	lower[0x150] = "\u0151"d;
	lower[0x152] = "\u0153"d;
	lower[0x154] = "\u0155"d;
	lower[0x156] = "\u0157"d;
	lower[0x158] = "\u0159"d;
	lower[0x15A] = "\u015B"d;
	lower[0x15C] = "\u015D"d;
	lower[0x15E] = "\u015F"d;
	lower[0x160] = "\u0161"d;
	lower[0x162] = "\u0163"d;
	lower[0x164] = "\u0165"d;
	lower[0x166] = "\u0167"d;
	lower[0x168] = "\u0169"d;
	lower[0x16A] = "\u016B"d;
	lower[0x16C] = "\u016D"d;
	lower[0x16E] = "\u016F"d;
	lower[0x170] = "\u0171"d;
	lower[0x172] = "\u0173"d;
	lower[0x174] = "\u0175"d;
	lower[0x176] = "\u0177"d;
	lower[0x178] = "\u00FF"d;
	lower[0x179] = "\u017A"d;
	lower[0x17B] = "\u017C"d;
	lower[0x17D] = "\u017E"d;
	lower[0x181] = "\u0253"d;
	lower[0x182] = "\u0183"d;
	lower[0x184] = "\u0185"d;
	lower[0x186] = "\u0254"d;
	lower[0x187] = "\u0188"d;
	lower[0x189] = "\u0256"d;
	lower[0x18A] = "\u0257"d;
	lower[0x18B] = "\u018C"d;
	lower[0x18E] = "\u01DD"d;
	lower[0x18F] = "\u0259"d;
	lower[0x190] = "\u025B"d;
	lower[0x191] = "\u0192"d;
	lower[0x193] = "\u0260"d;
	lower[0x194] = "\u0263"d;
	lower[0x196] = "\u0269"d;
	lower[0x197] = "\u0268"d;
	lower[0x198] = "\u0199"d;
	lower[0x19C] = "\u026F"d;
	lower[0x19D] = "\u0272"d;
	lower[0x19F] = "\u0275"d;
	lower[0x1A0] = "\u01A1"d;
	lower[0x1A2] = "\u01A3"d;
	lower[0x1A4] = "\u01A5"d;
	lower[0x1A6] = "\u0280"d;
	lower[0x1A7] = "\u01A8"d;
	lower[0x1A9] = "\u0283"d;
	lower[0x1AC] = "\u01AD"d;
	lower[0x1AE] = "\u0288"d;
	lower[0x1AF] = "\u01B0"d;
	lower[0x1B1] = "\u028A"d;
	lower[0x1B2] = "\u028B"d;
	lower[0x1B3] = "\u01B4"d;
	lower[0x1B5] = "\u01B6"d;
	lower[0x1B7] = "\u0292"d;
	lower[0x1B8] = "\u01B9"d;
	lower[0x1BC] = "\u01BD"d;
	lower[0x1C4] = "\u01C6"d;
	lower[0x1C5] = "\u01C6"d;
	lower[0x1C7] = "\u01C9"d;
	lower[0x1C8] = "\u01C9"d;
	lower[0x1CA] = "\u01CC"d;
	lower[0x1CB] = "\u01CC"d;
	lower[0x1CD] = "\u01CE"d;
	lower[0x1CF] = "\u01D0"d;
	lower[0x1D1] = "\u01D2"d;
	lower[0x1D3] = "\u01D4"d;
	lower[0x1D5] = "\u01D6"d;
	lower[0x1D7] = "\u01D8"d;
	lower[0x1D9] = "\u01DA"d;
	lower[0x1DB] = "\u01DC"d;
	lower[0x1DE] = "\u01DF"d;
	lower[0x1E0] = "\u01E1"d;
	lower[0x1E2] = "\u01E3"d;
	lower[0x1E4] = "\u01E5"d;
	lower[0x1E6] = "\u01E7"d;
	lower[0x1E8] = "\u01E9"d;
	lower[0x1EA] = "\u01EB"d;
	lower[0x1EC] = "\u01ED"d;
	lower[0x1EE] = "\u01EF"d;
	lower[0x1F1] = "\u01F3"d;
	lower[0x1F2] = "\u01F3"d;
	lower[0x1F4] = "\u01F5"d;
	lower[0x1F6] = "\u0195"d;
	lower[0x1F7] = "\u01BF"d;
	lower[0x1F8] = "\u01F9"d;
	lower[0x1FA] = "\u01FB"d;
	lower[0x1FC] = "\u01FD"d;
	lower[0x1FE] = "\u01FF"d;
	lower[0x200] = "\u0201"d;
	lower[0x202] = "\u0203"d;
	lower[0x204] = "\u0205"d;
	lower[0x206] = "\u0207"d;
	lower[0x208] = "\u0209"d;
	lower[0x20A] = "\u020B"d;
	lower[0x20C] = "\u020D"d;
	lower[0x20E] = "\u020F"d;
	lower[0x210] = "\u0211"d;
	lower[0x212] = "\u0213"d;
	lower[0x214] = "\u0215"d;
	lower[0x216] = "\u0217"d;
	lower[0x218] = "\u0219"d;
	lower[0x21A] = "\u021B"d;
	lower[0x21C] = "\u021D"d;
	lower[0x21E] = "\u021F"d;
	lower[0x220] = "\u019E"d;
	lower[0x222] = "\u0223"d;
	lower[0x224] = "\u0225"d;
	lower[0x226] = "\u0227"d;
	lower[0x228] = "\u0229"d;
	lower[0x22A] = "\u022B"d;
	lower[0x22C] = "\u022D"d;
	lower[0x22E] = "\u022F"d;
	lower[0x230] = "\u0231"d;
	lower[0x232] = "\u0233"d;
	lower[0x23A] = "\u2C65"d;
	lower[0x23B] = "\u023C"d;
	lower[0x23D] = "\u019A"d;
	lower[0x23E] = "\u2C66"d;
	lower[0x241] = "\u0242"d;
	lower[0x243] = "\u0180"d;
	lower[0x244] = "\u0289"d;
	lower[0x245] = "\u028C"d;
	lower[0x246] = "\u0247"d;
	lower[0x248] = "\u0249"d;
	lower[0x24A] = "\u024B"d;
	lower[0x24C] = "\u024D"d;
	lower[0x24E] = "\u024F"d;
	lower[0x386] = "\u03AC"d;
	lower[0x388] = "\u03AD"d;
	lower[0x389] = "\u03AE"d;
	lower[0x38A] = "\u03AF"d;
	lower[0x38C] = "\u03CC"d;
	lower[0x38E] = "\u03CD"d;
	lower[0x38F] = "\u03CE"d;
	lower[0x391] = "\u03B1"d;
	lower[0x392] = "\u03B2"d;
	lower[0x393] = "\u03B3"d;
	lower[0x394] = "\u03B4"d;
	lower[0x395] = "\u03B5"d;
	lower[0x396] = "\u03B6"d;
	lower[0x397] = "\u03B7"d;
	lower[0x398] = "\u03B8"d;
	lower[0x399] = "\u03B9"d;
	lower[0x39A] = "\u03BA"d;
	lower[0x39B] = "\u03BB"d;
	lower[0x39C] = "\u03BC"d;
	lower[0x39D] = "\u03BD"d;
	lower[0x39E] = "\u03BE"d;
	lower[0x39F] = "\u03BF"d;
	lower[0x3A0] = "\u03C0"d;
	lower[0x3A1] = "\u03C1"d;
	lower[0x3A3] = "\u03C3"d;
	lower[0x3A4] = "\u03C4"d;
	lower[0x3A5] = "\u03C5"d;
	lower[0x3A6] = "\u03C6"d;
	lower[0x3A7] = "\u03C7"d;
	lower[0x3A8] = "\u03C8"d;
	lower[0x3A9] = "\u03C9"d;
	lower[0x3AA] = "\u03CA"d;
	lower[0x3AB] = "\u03CB"d;
	lower[0x3D8] = "\u03D9"d;
	lower[0x3DA] = "\u03DB"d;
	lower[0x3DC] = "\u03DD"d;
	lower[0x3DE] = "\u03DF"d;
	lower[0x3E0] = "\u03E1"d;
	lower[0x3E2] = "\u03E3"d;
	lower[0x3E4] = "\u03E5"d;
	lower[0x3E6] = "\u03E7"d;
	lower[0x3E8] = "\u03E9"d;
	lower[0x3EA] = "\u03EB"d;
	lower[0x3EC] = "\u03ED"d;
	lower[0x3EE] = "\u03EF"d;
	lower[0x3F4] = "\u03B8"d;
	lower[0x3F7] = "\u03F8"d;
	lower[0x3F9] = "\u03F2"d;
	lower[0x3FA] = "\u03FB"d;
	lower[0x3FD] = "\u037B"d;
	lower[0x3FE] = "\u037C"d;
	lower[0x3FF] = "\u037D"d;
	lower[0x400] = "\u0450"d;
	lower[0x401] = "\u0451"d;
	lower[0x402] = "\u0452"d;
	lower[0x403] = "\u0453"d;
	lower[0x404] = "\u0454"d;
	lower[0x405] = "\u0455"d;
	lower[0x406] = "\u0456"d;
	lower[0x407] = "\u0457"d;
	lower[0x408] = "\u0458"d;
	lower[0x409] = "\u0459"d;
	lower[0x40A] = "\u045A"d;
	lower[0x40B] = "\u045B"d;
	lower[0x40C] = "\u045C"d;
	lower[0x40D] = "\u045D"d;
	lower[0x40E] = "\u045E"d;
	lower[0x40F] = "\u045F"d;
	lower[0x410] = "\u0430"d;
	lower[0x411] = "\u0431"d;
	lower[0x412] = "\u0432"d;
	lower[0x413] = "\u0433"d;
	lower[0x414] = "\u0434"d;
	lower[0x415] = "\u0435"d;
	lower[0x416] = "\u0436"d;
	lower[0x417] = "\u0437"d;
	lower[0x418] = "\u0438"d;
	lower[0x419] = "\u0439"d;
	lower[0x41A] = "\u043A"d;
	lower[0x41B] = "\u043B"d;
	lower[0x41C] = "\u043C"d;
	lower[0x41D] = "\u043D"d;
	lower[0x41E] = "\u043E"d;
	lower[0x41F] = "\u043F"d;
	lower[0x420] = "\u0440"d;
	lower[0x421] = "\u0441"d;
	lower[0x422] = "\u0442"d;
	lower[0x423] = "\u0443"d;
	lower[0x424] = "\u0444"d;
	lower[0x425] = "\u0445"d;
	lower[0x426] = "\u0446"d;
	lower[0x427] = "\u0447"d;
	lower[0x428] = "\u0448"d;
	lower[0x429] = "\u0449"d;
	lower[0x42A] = "\u044A"d;
	lower[0x42B] = "\u044B"d;
	lower[0x42C] = "\u044C"d;
	lower[0x42D] = "\u044D"d;
	lower[0x42E] = "\u044E"d;
	lower[0x42F] = "\u044F"d;
	lower[0x460] = "\u0461"d;
	lower[0x462] = "\u0463"d;
	lower[0x464] = "\u0465"d;
	lower[0x466] = "\u0467"d;
	lower[0x468] = "\u0469"d;
	lower[0x46A] = "\u046B"d;
	lower[0x46C] = "\u046D"d;
	lower[0x46E] = "\u046F"d;
	lower[0x470] = "\u0471"d;
	lower[0x472] = "\u0473"d;
	lower[0x474] = "\u0475"d;
	lower[0x476] = "\u0477"d;
	lower[0x478] = "\u0479"d;
	lower[0x47A] = "\u047B"d;
	lower[0x47C] = "\u047D"d;
	lower[0x47E] = "\u047F"d;
	lower[0x480] = "\u0481"d;
	lower[0x48A] = "\u048B"d;
	lower[0x48C] = "\u048D"d;
	lower[0x48E] = "\u048F"d;
	lower[0x490] = "\u0491"d;
	lower[0x492] = "\u0493"d;
	lower[0x494] = "\u0495"d;
	lower[0x496] = "\u0497"d;
	lower[0x498] = "\u0499"d;
	lower[0x49A] = "\u049B"d;
	lower[0x49C] = "\u049D"d;
	lower[0x49E] = "\u049F"d;
	lower[0x4A0] = "\u04A1"d;
	lower[0x4A2] = "\u04A3"d;
	lower[0x4A4] = "\u04A5"d;
	lower[0x4A6] = "\u04A7"d;
	lower[0x4A8] = "\u04A9"d;
	lower[0x4AA] = "\u04AB"d;
	lower[0x4AC] = "\u04AD"d;
	lower[0x4AE] = "\u04AF"d;
	lower[0x4B0] = "\u04B1"d;
	lower[0x4B2] = "\u04B3"d;
	lower[0x4B4] = "\u04B5"d;
	lower[0x4B6] = "\u04B7"d;
	lower[0x4B8] = "\u04B9"d;
	lower[0x4BA] = "\u04BB"d;
	lower[0x4BC] = "\u04BD"d;
	lower[0x4BE] = "\u04BF"d;
	lower[0x4C0] = "\u04CF"d;
	lower[0x4C1] = "\u04C2"d;
	lower[0x4C3] = "\u04C4"d;
	lower[0x4C5] = "\u04C6"d;
	lower[0x4C7] = "\u04C8"d;
	lower[0x4C9] = "\u04CA"d;
	lower[0x4CB] = "\u04CC"d;
	lower[0x4CD] = "\u04CE"d;
	lower[0x4D0] = "\u04D1"d;
	lower[0x4D2] = "\u04D3"d;
	lower[0x4D4] = "\u04D5"d;
	lower[0x4D6] = "\u04D7"d;
	lower[0x4D8] = "\u04D9"d;
	lower[0x4DA] = "\u04DB"d;
	lower[0x4DC] = "\u04DD"d;
	lower[0x4DE] = "\u04DF"d;
	lower[0x4E0] = "\u04E1"d;
	lower[0x4E2] = "\u04E3"d;
	lower[0x4E4] = "\u04E5"d;
	lower[0x4E6] = "\u04E7"d;
	lower[0x4E8] = "\u04E9"d;
	lower[0x4EA] = "\u04EB"d;
	lower[0x4EC] = "\u04ED"d;
	lower[0x4EE] = "\u04EF"d;
	lower[0x4F0] = "\u04F1"d;
	lower[0x4F2] = "\u04F3"d;
	lower[0x4F4] = "\u04F5"d;
	lower[0x4F6] = "\u04F7"d;
	lower[0x4F8] = "\u04F9"d;
	lower[0x4FA] = "\u04FB"d;
	lower[0x4FC] = "\u04FD"d;
	lower[0x4FE] = "\u04FF"d;
	lower[0x500] = "\u0501"d;
	lower[0x502] = "\u0503"d;
	lower[0x504] = "\u0505"d;
	lower[0x506] = "\u0507"d;
	lower[0x508] = "\u0509"d;
	lower[0x50A] = "\u050B"d;
	lower[0x50C] = "\u050D"d;
	lower[0x50E] = "\u050F"d;
	lower[0x510] = "\u0511"d;
	lower[0x512] = "\u0513"d;
	lower[0x531] = "\u0561"d;
	lower[0x532] = "\u0562"d;
	lower[0x533] = "\u0563"d;
	lower[0x534] = "\u0564"d;
	lower[0x535] = "\u0565"d;
	lower[0x536] = "\u0566"d;
	lower[0x537] = "\u0567"d;
	lower[0x538] = "\u0568"d;
	lower[0x539] = "\u0569"d;
	lower[0x53A] = "\u056A"d;
	lower[0x53B] = "\u056B"d;
	lower[0x53C] = "\u056C"d;
	lower[0x53D] = "\u056D"d;
	lower[0x53E] = "\u056E"d;
	lower[0x53F] = "\u056F"d;
	lower[0x540] = "\u0570"d;
	lower[0x541] = "\u0571"d;
	lower[0x542] = "\u0572"d;
	lower[0x543] = "\u0573"d;
	lower[0x544] = "\u0574"d;
	lower[0x545] = "\u0575"d;
	lower[0x546] = "\u0576"d;
	lower[0x547] = "\u0577"d;
	lower[0x548] = "\u0578"d;
	lower[0x549] = "\u0579"d;
	lower[0x54A] = "\u057A"d;
	lower[0x54B] = "\u057B"d;
	lower[0x54C] = "\u057C"d;
	lower[0x54D] = "\u057D"d;
	lower[0x54E] = "\u057E"d;
	lower[0x54F] = "\u057F"d;
	lower[0x550] = "\u0580"d;
	lower[0x551] = "\u0581"d;
	lower[0x552] = "\u0582"d;
	lower[0x553] = "\u0583"d;
	lower[0x554] = "\u0584"d;
	lower[0x555] = "\u0585"d;
	lower[0x556] = "\u0586"d;
	lower[0x10A0] = "\u2D00"d;
	lower[0x10A1] = "\u2D01"d;
	lower[0x10A2] = "\u2D02"d;
	lower[0x10A3] = "\u2D03"d;
	lower[0x10A4] = "\u2D04"d;
	lower[0x10A5] = "\u2D05"d;
	lower[0x10A6] = "\u2D06"d;
	lower[0x10A7] = "\u2D07"d;
	lower[0x10A8] = "\u2D08"d;
	lower[0x10A9] = "\u2D09"d;
	lower[0x10AA] = "\u2D0A"d;
	lower[0x10AB] = "\u2D0B"d;
	lower[0x10AC] = "\u2D0C"d;
	lower[0x10AD] = "\u2D0D"d;
	lower[0x10AE] = "\u2D0E"d;
	lower[0x10AF] = "\u2D0F"d;
	lower[0x10B0] = "\u2D10"d;
	lower[0x10B1] = "\u2D11"d;
	lower[0x10B2] = "\u2D12"d;
	lower[0x10B3] = "\u2D13"d;
	lower[0x10B4] = "\u2D14"d;
	lower[0x10B5] = "\u2D15"d;
	lower[0x10B6] = "\u2D16"d;
	lower[0x10B7] = "\u2D17"d;
	lower[0x10B8] = "\u2D18"d;
	lower[0x10B9] = "\u2D19"d;
	lower[0x10BA] = "\u2D1A"d;
	lower[0x10BB] = "\u2D1B"d;
	lower[0x10BC] = "\u2D1C"d;
	lower[0x10BD] = "\u2D1D"d;
	lower[0x10BE] = "\u2D1E"d;
	lower[0x10BF] = "\u2D1F"d;
	lower[0x10C0] = "\u2D20"d;
	lower[0x10C1] = "\u2D21"d;
	lower[0x10C2] = "\u2D22"d;
	lower[0x10C3] = "\u2D23"d;
	lower[0x10C4] = "\u2D24"d;
	lower[0x10C5] = "\u2D25"d;
	lower[0x1E00] = "\u1E01"d;
	lower[0x1E02] = "\u1E03"d;
	lower[0x1E04] = "\u1E05"d;
	lower[0x1E06] = "\u1E07"d;
	lower[0x1E08] = "\u1E09"d;
	lower[0x1E0A] = "\u1E0B"d;
	lower[0x1E0C] = "\u1E0D"d;
	lower[0x1E0E] = "\u1E0F"d;
	lower[0x1E10] = "\u1E11"d;
	lower[0x1E12] = "\u1E13"d;
	lower[0x1E14] = "\u1E15"d;
	lower[0x1E16] = "\u1E17"d;
	lower[0x1E18] = "\u1E19"d;
	lower[0x1E1A] = "\u1E1B"d;
	lower[0x1E1C] = "\u1E1D"d;
	lower[0x1E1E] = "\u1E1F"d;
	lower[0x1E20] = "\u1E21"d;
	lower[0x1E22] = "\u1E23"d;
	lower[0x1E24] = "\u1E25"d;
	lower[0x1E26] = "\u1E27"d;
	lower[0x1E28] = "\u1E29"d;
	lower[0x1E2A] = "\u1E2B"d;
	lower[0x1E2C] = "\u1E2D"d;
	lower[0x1E2E] = "\u1E2F"d;
	lower[0x1E30] = "\u1E31"d;
	lower[0x1E32] = "\u1E33"d;
	lower[0x1E34] = "\u1E35"d;
	lower[0x1E36] = "\u1E37"d;
	lower[0x1E38] = "\u1E39"d;
	lower[0x1E3A] = "\u1E3B"d;
	lower[0x1E3C] = "\u1E3D"d;
	lower[0x1E3E] = "\u1E3F"d;
	lower[0x1E40] = "\u1E41"d;
	lower[0x1E42] = "\u1E43"d;
	lower[0x1E44] = "\u1E45"d;
	lower[0x1E46] = "\u1E47"d;
	lower[0x1E48] = "\u1E49"d;
	lower[0x1E4A] = "\u1E4B"d;
	lower[0x1E4C] = "\u1E4D"d;
	lower[0x1E4E] = "\u1E4F"d;
	lower[0x1E50] = "\u1E51"d;
	lower[0x1E52] = "\u1E53"d;
	lower[0x1E54] = "\u1E55"d;
	lower[0x1E56] = "\u1E57"d;
	lower[0x1E58] = "\u1E59"d;
	lower[0x1E5A] = "\u1E5B"d;
	lower[0x1E5C] = "\u1E5D"d;
	lower[0x1E5E] = "\u1E5F"d;
	lower[0x1E60] = "\u1E61"d;
	lower[0x1E62] = "\u1E63"d;
	lower[0x1E64] = "\u1E65"d;
	lower[0x1E66] = "\u1E67"d;
	lower[0x1E68] = "\u1E69"d;
	lower[0x1E6A] = "\u1E6B"d;
	lower[0x1E6C] = "\u1E6D"d;
	lower[0x1E6E] = "\u1E6F"d;
	lower[0x1E70] = "\u1E71"d;
	lower[0x1E72] = "\u1E73"d;
	lower[0x1E74] = "\u1E75"d;
	lower[0x1E76] = "\u1E77"d;
	lower[0x1E78] = "\u1E79"d;
	lower[0x1E7A] = "\u1E7B"d;
	lower[0x1E7C] = "\u1E7D"d;
	lower[0x1E7E] = "\u1E7F"d;
	lower[0x1E80] = "\u1E81"d;
	lower[0x1E82] = "\u1E83"d;
	lower[0x1E84] = "\u1E85"d;
	lower[0x1E86] = "\u1E87"d;
	lower[0x1E88] = "\u1E89"d;
	lower[0x1E8A] = "\u1E8B"d;
	lower[0x1E8C] = "\u1E8D"d;
	lower[0x1E8E] = "\u1E8F"d;
	lower[0x1E90] = "\u1E91"d;
	lower[0x1E92] = "\u1E93"d;
	lower[0x1E94] = "\u1E95"d;
	lower[0x1EA0] = "\u1EA1"d;
	lower[0x1EA2] = "\u1EA3"d;
	lower[0x1EA4] = "\u1EA5"d;
	lower[0x1EA6] = "\u1EA7"d;
	lower[0x1EA8] = "\u1EA9"d;
	lower[0x1EAA] = "\u1EAB"d;
	lower[0x1EAC] = "\u1EAD"d;
	lower[0x1EAE] = "\u1EAF"d;
	lower[0x1EB0] = "\u1EB1"d;
	lower[0x1EB2] = "\u1EB3"d;
	lower[0x1EB4] = "\u1EB5"d;
	lower[0x1EB6] = "\u1EB7"d;
	lower[0x1EB8] = "\u1EB9"d;
	lower[0x1EBA] = "\u1EBB"d;
	lower[0x1EBC] = "\u1EBD"d;
	lower[0x1EBE] = "\u1EBF"d;
	lower[0x1EC0] = "\u1EC1"d;
	lower[0x1EC2] = "\u1EC3"d;
	lower[0x1EC4] = "\u1EC5"d;
	lower[0x1EC6] = "\u1EC7"d;
	lower[0x1EC8] = "\u1EC9"d;
	lower[0x1ECA] = "\u1ECB"d;
	lower[0x1ECC] = "\u1ECD"d;
	lower[0x1ECE] = "\u1ECF"d;
	lower[0x1ED0] = "\u1ED1"d;
	lower[0x1ED2] = "\u1ED3"d;
	lower[0x1ED4] = "\u1ED5"d;
	lower[0x1ED6] = "\u1ED7"d;
	lower[0x1ED8] = "\u1ED9"d;
	lower[0x1EDA] = "\u1EDB"d;
	lower[0x1EDC] = "\u1EDD"d;
	lower[0x1EDE] = "\u1EDF"d;
	lower[0x1EE0] = "\u1EE1"d;
	lower[0x1EE2] = "\u1EE3"d;
	lower[0x1EE4] = "\u1EE5"d;
	lower[0x1EE6] = "\u1EE7"d;
	lower[0x1EE8] = "\u1EE9"d;
	lower[0x1EEA] = "\u1EEB"d;
	lower[0x1EEC] = "\u1EED"d;
	lower[0x1EEE] = "\u1EEF"d;
	lower[0x1EF0] = "\u1EF1"d;
	lower[0x1EF2] = "\u1EF3"d;
	lower[0x1EF4] = "\u1EF5"d;
	lower[0x1EF6] = "\u1EF7"d;
	lower[0x1EF8] = "\u1EF9"d;
	lower[0x1F08] = "\u1F00"d;
	lower[0x1F09] = "\u1F01"d;
	lower[0x1F0A] = "\u1F02"d;
	lower[0x1F0B] = "\u1F03"d;
	lower[0x1F0C] = "\u1F04"d;
	lower[0x1F0D] = "\u1F05"d;
	lower[0x1F0E] = "\u1F06"d;
	lower[0x1F0F] = "\u1F07"d;
	lower[0x1F18] = "\u1F10"d;
	lower[0x1F19] = "\u1F11"d;
	lower[0x1F1A] = "\u1F12"d;
	lower[0x1F1B] = "\u1F13"d;
	lower[0x1F1C] = "\u1F14"d;
	lower[0x1F1D] = "\u1F15"d;
	lower[0x1F28] = "\u1F20"d;
	lower[0x1F29] = "\u1F21"d;
	lower[0x1F2A] = "\u1F22"d;
	lower[0x1F2B] = "\u1F23"d;
	lower[0x1F2C] = "\u1F24"d;
	lower[0x1F2D] = "\u1F25"d;
	lower[0x1F2E] = "\u1F26"d;
	lower[0x1F2F] = "\u1F27"d;
	lower[0x1F38] = "\u1F30"d;
	lower[0x1F39] = "\u1F31"d;
	lower[0x1F3A] = "\u1F32"d;
	lower[0x1F3B] = "\u1F33"d;
	lower[0x1F3C] = "\u1F34"d;
	lower[0x1F3D] = "\u1F35"d;
	lower[0x1F3E] = "\u1F36"d;
	lower[0x1F3F] = "\u1F37"d;
	lower[0x1F48] = "\u1F40"d;
	lower[0x1F49] = "\u1F41"d;
	lower[0x1F4A] = "\u1F42"d;
	lower[0x1F4B] = "\u1F43"d;
	lower[0x1F4C] = "\u1F44"d;
	lower[0x1F4D] = "\u1F45"d;
	lower[0x1F59] = "\u1F51"d;
	lower[0x1F5B] = "\u1F53"d;
	lower[0x1F5D] = "\u1F55"d;
	lower[0x1F5F] = "\u1F57"d;
	lower[0x1F68] = "\u1F60"d;
	lower[0x1F69] = "\u1F61"d;
	lower[0x1F6A] = "\u1F62"d;
	lower[0x1F6B] = "\u1F63"d;
	lower[0x1F6C] = "\u1F64"d;
	lower[0x1F6D] = "\u1F65"d;
	lower[0x1F6E] = "\u1F66"d;
	lower[0x1F6F] = "\u1F67"d;
	lower[0x1F88] = "\u1F80"d;
	lower[0x1F89] = "\u1F81"d;
	lower[0x1F8A] = "\u1F82"d;
	lower[0x1F8B] = "\u1F83"d;
	lower[0x1F8C] = "\u1F84"d;
	lower[0x1F8D] = "\u1F85"d;
	lower[0x1F8E] = "\u1F86"d;
	lower[0x1F8F] = "\u1F87"d;
	lower[0x1F98] = "\u1F90"d;
	lower[0x1F99] = "\u1F91"d;
	lower[0x1F9A] = "\u1F92"d;
	lower[0x1F9B] = "\u1F93"d;
	lower[0x1F9C] = "\u1F94"d;
	lower[0x1F9D] = "\u1F95"d;
	lower[0x1F9E] = "\u1F96"d;
	lower[0x1F9F] = "\u1F97"d;
	lower[0x1FA8] = "\u1FA0"d;
	lower[0x1FA9] = "\u1FA1"d;
	lower[0x1FAA] = "\u1FA2"d;
	lower[0x1FAB] = "\u1FA3"d;
	lower[0x1FAC] = "\u1FA4"d;
	lower[0x1FAD] = "\u1FA5"d;
	lower[0x1FAE] = "\u1FA6"d;
	lower[0x1FAF] = "\u1FA7"d;
	lower[0x1FB8] = "\u1FB0"d;
	lower[0x1FB9] = "\u1FB1"d;
	lower[0x1FBA] = "\u1F70"d;
	lower[0x1FBB] = "\u1F71"d;
	lower[0x1FBC] = "\u1FB3"d;
	lower[0x1FC8] = "\u1F72"d;
	lower[0x1FC9] = "\u1F73"d;
	lower[0x1FCA] = "\u1F74"d;
	lower[0x1FCB] = "\u1F75"d;
	lower[0x1FCC] = "\u1FC3"d;
	lower[0x1FD8] = "\u1FD0"d;
	lower[0x1FD9] = "\u1FD1"d;
	lower[0x1FDA] = "\u1F76"d;
	lower[0x1FDB] = "\u1F77"d;
	lower[0x1FE8] = "\u1FE0"d;
	lower[0x1FE9] = "\u1FE1"d;
	lower[0x1FEA] = "\u1F7A"d;
	lower[0x1FEB] = "\u1F7B"d;
	lower[0x1FEC] = "\u1FE5"d;
	lower[0x1FF8] = "\u1F78"d;
	lower[0x1FF9] = "\u1F79"d;
	lower[0x1FFA] = "\u1F7C"d;
	lower[0x1FFB] = "\u1F7D"d;
	lower[0x1FFC] = "\u1FF3"d;
	lower[0x2126] = "\u03C9"d;
	lower[0x212A] = "\u006B"d;
	lower[0x212B] = "\u00E5"d;
	lower[0x2132] = "\u214E"d;
	lower[0x2160] = "\u2170"d;
	lower[0x2161] = "\u2171"d;
	lower[0x2162] = "\u2172"d;
	lower[0x2163] = "\u2173"d;
	lower[0x2164] = "\u2174"d;
	lower[0x2165] = "\u2175"d;
	lower[0x2166] = "\u2176"d;
	lower[0x2167] = "\u2177"d;
	lower[0x2168] = "\u2178"d;
	lower[0x2169] = "\u2179"d;
	lower[0x216A] = "\u217A"d;
	lower[0x216B] = "\u217B"d;
	lower[0x216C] = "\u217C"d;
	lower[0x216D] = "\u217D"d;
	lower[0x216E] = "\u217E"d;
	lower[0x216F] = "\u217F"d;
	lower[0x2183] = "\u2184"d;
	lower[0x24B6] = "\u24D0"d;
	lower[0x24B7] = "\u24D1"d;
	lower[0x24B8] = "\u24D2"d;
	lower[0x24B9] = "\u24D3"d;
	lower[0x24BA] = "\u24D4"d;
	lower[0x24BB] = "\u24D5"d;
	lower[0x24BC] = "\u24D6"d;
	lower[0x24BD] = "\u24D7"d;
	lower[0x24BE] = "\u24D8"d;
	lower[0x24BF] = "\u24D9"d;
	lower[0x24C0] = "\u24DA"d;
	lower[0x24C1] = "\u24DB"d;
	lower[0x24C2] = "\u24DC"d;
	lower[0x24C3] = "\u24DD"d;
	lower[0x24C4] = "\u24DE"d;
	lower[0x24C5] = "\u24DF"d;
	lower[0x24C6] = "\u24E0"d;
	lower[0x24C7] = "\u24E1"d;
	lower[0x24C8] = "\u24E2"d;
	lower[0x24C9] = "\u24E3"d;
	lower[0x24CA] = "\u24E4"d;
	lower[0x24CB] = "\u24E5"d;
	lower[0x24CC] = "\u24E6"d;
	lower[0x24CD] = "\u24E7"d;
	lower[0x24CE] = "\u24E8"d;
	lower[0x24CF] = "\u24E9"d;
	lower[0x2C00] = "\u2C30"d;
	lower[0x2C01] = "\u2C31"d;
	lower[0x2C02] = "\u2C32"d;
	lower[0x2C03] = "\u2C33"d;
	lower[0x2C04] = "\u2C34"d;
	lower[0x2C05] = "\u2C35"d;
	lower[0x2C06] = "\u2C36"d;
	lower[0x2C07] = "\u2C37"d;
	lower[0x2C08] = "\u2C38"d;
	lower[0x2C09] = "\u2C39"d;
	lower[0x2C0A] = "\u2C3A"d;
	lower[0x2C0B] = "\u2C3B"d;
	lower[0x2C0C] = "\u2C3C"d;
	lower[0x2C0D] = "\u2C3D"d;
	lower[0x2C0E] = "\u2C3E"d;
	lower[0x2C0F] = "\u2C3F"d;
	lower[0x2C10] = "\u2C40"d;
	lower[0x2C11] = "\u2C41"d;
	lower[0x2C12] = "\u2C42"d;
	lower[0x2C13] = "\u2C43"d;
	lower[0x2C14] = "\u2C44"d;
	lower[0x2C15] = "\u2C45"d;
	lower[0x2C16] = "\u2C46"d;
	lower[0x2C17] = "\u2C47"d;
	lower[0x2C18] = "\u2C48"d;
	lower[0x2C19] = "\u2C49"d;
	lower[0x2C1A] = "\u2C4A"d;
	lower[0x2C1B] = "\u2C4B"d;
	lower[0x2C1C] = "\u2C4C"d;
	lower[0x2C1D] = "\u2C4D"d;
	lower[0x2C1E] = "\u2C4E"d;
	lower[0x2C1F] = "\u2C4F"d;
	lower[0x2C20] = "\u2C50"d;
	lower[0x2C21] = "\u2C51"d;
	lower[0x2C22] = "\u2C52"d;
	lower[0x2C23] = "\u2C53"d;
	lower[0x2C24] = "\u2C54"d;
	lower[0x2C25] = "\u2C55"d;
	lower[0x2C26] = "\u2C56"d;
	lower[0x2C27] = "\u2C57"d;
	lower[0x2C28] = "\u2C58"d;
	lower[0x2C29] = "\u2C59"d;
	lower[0x2C2A] = "\u2C5A"d;
	lower[0x2C2B] = "\u2C5B"d;
	lower[0x2C2C] = "\u2C5C"d;
	lower[0x2C2D] = "\u2C5D"d;
	lower[0x2C2E] = "\u2C5E"d;
	lower[0x2C60] = "\u2C61"d;
	lower[0x2C62] = "\u026B"d;
	lower[0x2C63] = "\u1D7D"d;
	lower[0x2C64] = "\u027D"d;
	lower[0x2C67] = "\u2C68"d;
	lower[0x2C69] = "\u2C6A"d;
	lower[0x2C6B] = "\u2C6C"d;
	lower[0x2C75] = "\u2C76"d;
	lower[0x2C80] = "\u2C81"d;
	lower[0x2C82] = "\u2C83"d;
	lower[0x2C84] = "\u2C85"d;
	lower[0x2C86] = "\u2C87"d;
	lower[0x2C88] = "\u2C89"d;
	lower[0x2C8A] = "\u2C8B"d;
	lower[0x2C8C] = "\u2C8D"d;
	lower[0x2C8E] = "\u2C8F"d;
	lower[0x2C90] = "\u2C91"d;
	lower[0x2C92] = "\u2C93"d;
	lower[0x2C94] = "\u2C95"d;
	lower[0x2C96] = "\u2C97"d;
	lower[0x2C98] = "\u2C99"d;
	lower[0x2C9A] = "\u2C9B"d;
	lower[0x2C9C] = "\u2C9D"d;
	lower[0x2C9E] = "\u2C9F"d;
	lower[0x2CA0] = "\u2CA1"d;
	lower[0x2CA2] = "\u2CA3"d;
	lower[0x2CA4] = "\u2CA5"d;
	lower[0x2CA6] = "\u2CA7"d;
	lower[0x2CA8] = "\u2CA9"d;
	lower[0x2CAA] = "\u2CAB"d;
	lower[0x2CAC] = "\u2CAD"d;
	lower[0x2CAE] = "\u2CAF"d;
	lower[0x2CB0] = "\u2CB1"d;
	lower[0x2CB2] = "\u2CB3"d;
	lower[0x2CB4] = "\u2CB5"d;
	lower[0x2CB6] = "\u2CB7"d;
	lower[0x2CB8] = "\u2CB9"d;
	lower[0x2CBA] = "\u2CBB"d;
	lower[0x2CBC] = "\u2CBD"d;
	lower[0x2CBE] = "\u2CBF"d;
	lower[0x2CC0] = "\u2CC1"d;
	lower[0x2CC2] = "\u2CC3"d;
	lower[0x2CC4] = "\u2CC5"d;
	lower[0x2CC6] = "\u2CC7"d;
	lower[0x2CC8] = "\u2CC9"d;
	lower[0x2CCA] = "\u2CCB"d;
	lower[0x2CCC] = "\u2CCD"d;
	lower[0x2CCE] = "\u2CCF"d;
	lower[0x2CD0] = "\u2CD1"d;
	lower[0x2CD2] = "\u2CD3"d;
	lower[0x2CD4] = "\u2CD5"d;
	lower[0x2CD6] = "\u2CD7"d;
	lower[0x2CD8] = "\u2CD9"d;
	lower[0x2CDA] = "\u2CDB"d;
	lower[0x2CDC] = "\u2CDD"d;
	lower[0x2CDE] = "\u2CDF"d;
	lower[0x2CE0] = "\u2CE1"d;
	lower[0x2CE2] = "\u2CE3"d;
	lower[0xFF21] = "\uFF41"d;
	lower[0xFF22] = "\uFF42"d;
	lower[0xFF23] = "\uFF43"d;
	lower[0xFF24] = "\uFF44"d;
	lower[0xFF25] = "\uFF45"d;
	lower[0xFF26] = "\uFF46"d;
	lower[0xFF27] = "\uFF47"d;
	lower[0xFF28] = "\uFF48"d;
	lower[0xFF29] = "\uFF49"d;
	lower[0xFF2A] = "\uFF4A"d;
	lower[0xFF2B] = "\uFF4B"d;
	lower[0xFF2C] = "\uFF4C"d;
	lower[0xFF2D] = "\uFF4D"d;
	lower[0xFF2E] = "\uFF4E"d;
	lower[0xFF2F] = "\uFF4F"d;
	lower[0xFF30] = "\uFF50"d;
	lower[0xFF31] = "\uFF51"d;
	lower[0xFF32] = "\uFF52"d;
	lower[0xFF33] = "\uFF53"d;
	lower[0xFF34] = "\uFF54"d;
	lower[0xFF35] = "\uFF55"d;
	lower[0xFF36] = "\uFF56"d;
	lower[0xFF37] = "\uFF57"d;
	lower[0xFF38] = "\uFF58"d;
	lower[0xFF39] = "\uFF59"d;
	lower[0xFF3A] = "\uFF5A"d;
	lower[0x10400] = "\U00010428"d;
	lower[0x10401] = "\U00010429"d;
	lower[0x10402] = "\U0001042A"d;
	lower[0x10403] = "\U0001042B"d;
	lower[0x10404] = "\U0001042C"d;
	lower[0x10405] = "\U0001042D"d;
	lower[0x10406] = "\U0001042E"d;
	lower[0x10407] = "\U0001042F"d;
	lower[0x10408] = "\U00010430"d;
	lower[0x10409] = "\U00010431"d;
	lower[0x1040A] = "\U00010432"d;
	lower[0x1040B] = "\U00010433"d;
	lower[0x1040C] = "\U00010434"d;
	lower[0x1040D] = "\U00010435"d;
	lower[0x1040E] = "\U00010436"d;
	lower[0x1040F] = "\U00010437"d;
	lower[0x10410] = "\U00010438"d;
	lower[0x10411] = "\U00010439"d;
	lower[0x10412] = "\U0001043A"d;
	lower[0x10413] = "\U0001043B"d;
	lower[0x10414] = "\U0001043C"d;
	lower[0x10415] = "\U0001043D"d;
	lower[0x10416] = "\U0001043E"d;
	lower[0x10417] = "\U0001043F"d;
	lower[0x10418] = "\U00010440"d;
	lower[0x10419] = "\U00010441"d;
	lower[0x1041A] = "\U00010442"d;
	lower[0x1041B] = "\U00010443"d;
	lower[0x1041C] = "\U00010444"d;
	lower[0x1041D] = "\U00010445"d;
	lower[0x1041E] = "\U00010446"d;
	lower[0x1041F] = "\U00010447"d;
	lower[0x10420] = "\U00010448"d;
	lower[0x10421] = "\U00010449"d;
	lower[0x10422] = "\U0001044A"d;
	lower[0x10423] = "\U0001044B"d;
	lower[0x10424] = "\U0001044C"d;
	lower[0x10425] = "\U0001044D"d;
	lower[0x10426] = "\U0001044E"d;
	lower[0x10427] = "\U0001044F"d;
	upper.rehash;
	lower.rehash;
}



/*******************************
 * Return !=0 if unicode alpha.
 */
int isUniAlpha(dchar u)
{
    static dchar table[][2] =
    [
	[ 'A', 'Z' ],
	[ 'a', 'z' ],
	[0x00AA, 0x00AA],
	[0x00B5, 0x00B5],
	[0x00BA, 0x00BA],
	[0x00C0, 0x00D6],
	[0x00D8, 0x00F6],
	[0x00F8, 0x02B8],
	[0x02BB, 0x02C1],
	[0x02D0, 0x02D1],
	[0x02E0, 0x02E4],
	[0x02EE, 0x02EE],
	[0x037A, 0x037D],
	[0x0386, 0x0386],
	[0x0388, 0x038A],
	[0x038C, 0x038C],
	[0x038E, 0x03A1],
	[0x03A3, 0x03CE],
	[0x03D0, 0x03F5],
	[0x03F7, 0x0482],
	[0x048A, 0x0513],
	[0x0531, 0x0556],
	[0x0559, 0x055F],
	[0x0561, 0x0587],
	[0x0589, 0x0589],
	[0x0903, 0x0939],
	[0x093D, 0x0940],
	[0x0949, 0x094C],
	[0x0950, 0x0950],
	[0x0958, 0x0961],
	[0x0964, 0x0970],
	[0x097B, 0x097F],
	[0x0982, 0x0983],
	[0x0985, 0x098C],
	[0x098F, 0x0990],
	[0x0993, 0x09A8],
	[0x09AA, 0x09B0],
	[0x09B2, 0x09B2],
	[0x09B6, 0x09B9],
	[0x09BD, 0x09C0],
	[0x09C7, 0x09C8],
	[0x09CB, 0x09CC],
	[0x09CE, 0x09CE],
	[0x09D7, 0x09D7],
	[0x09DC, 0x09DD],
	[0x09DF, 0x09E1],
	[0x09E6, 0x09F1],
	[0x09F4, 0x09FA],
	[0x0A03, 0x0A03],
	[0x0A05, 0x0A0A],
	[0x0A0F, 0x0A10],
	[0x0A13, 0x0A28],
	[0x0A2A, 0x0A30],
	[0x0A32, 0x0A33],
	[0x0A35, 0x0A36],
	[0x0A38, 0x0A39],
	[0x0A3E, 0x0A40],
	[0x0A59, 0x0A5C],
	[0x0A5E, 0x0A5E],
	[0x0A66, 0x0A6F],
	[0x0A72, 0x0A74],
	[0x0A83, 0x0A83],
	[0x0A85, 0x0A8D],
	[0x0A8F, 0x0A91],
	[0x0A93, 0x0AA8],
	[0x0AAA, 0x0AB0],
	[0x0AB2, 0x0AB3],
	[0x0AB5, 0x0AB9],
	[0x0ABD, 0x0AC0],
	[0x0AC9, 0x0AC9],
	[0x0ACB, 0x0ACC],
	[0x0AD0, 0x0AD0],
	[0x0AE0, 0x0AE1],
	[0x0AE6, 0x0AEF],
	[0x0B02, 0x0B03],
	[0x0B05, 0x0B0C],
	[0x0B0F, 0x0B10],
	[0x0B13, 0x0B28],
	[0x0B2A, 0x0B30],
	[0x0B32, 0x0B33],
	[0x0B35, 0x0B39],
	[0x0B3D, 0x0B3E],
	[0x0B40, 0x0B40],
	[0x0B47, 0x0B48],
	[0x0B4B, 0x0B4C],
	[0x0B57, 0x0B57],
	[0x0B5C, 0x0B5D],
	[0x0B5F, 0x0B61],
	[0x0B66, 0x0B71],
	[0x0B83, 0x0B83],
	[0x0B85, 0x0B8A],
	[0x0B8E, 0x0B90],
	[0x0B92, 0x0B95],
	[0x0B99, 0x0B9A],
	[0x0B9C, 0x0B9C],
	[0x0B9E, 0x0B9F],
	[0x0BA3, 0x0BA4],
	[0x0BA8, 0x0BAA],
	[0x0BAE, 0x0BB9],
	[0x0BBE, 0x0BBF],
	[0x0BC1, 0x0BC2],
	[0x0BC6, 0x0BC8],
	[0x0BCA, 0x0BCC],
	[0x0BD7, 0x0BD7],
	[0x0BE6, 0x0BF2],
	[0x0C01, 0x0C03],
	[0x0C05, 0x0C0C],
	[0x0C0E, 0x0C10],
	[0x0C12, 0x0C28],
	[0x0C2A, 0x0C33],
	[0x0C35, 0x0C39],
	[0x0C41, 0x0C44],
	[0x0C60, 0x0C61],
	[0x0C66, 0x0C6F],
	[0x0C82, 0x0C83],
	[0x0C85, 0x0C8C],
	[0x0C8E, 0x0C90],
	[0x0C92, 0x0CA8],
	[0x0CAA, 0x0CB3],
	[0x0CB5, 0x0CB9],
	[0x0CBD, 0x0CC4],
	[0x0CC6, 0x0CC8],
	[0x0CCA, 0x0CCB],
	[0x0CD5, 0x0CD6],
	[0x0CDE, 0x0CDE],
	[0x0CE0, 0x0CE1],
	[0x0CE6, 0x0CEF],
	[0x0D02, 0x0D03],
	[0x0D05, 0x0D0C],
	[0x0D0E, 0x0D10],
	[0x0D12, 0x0D28],
	[0x0D2A, 0x0D39],
	[0x0D3E, 0x0D40],
	[0x0D46, 0x0D48],
	[0x0D4A, 0x0D4C],
	[0x0D57, 0x0D57],
	[0x0D60, 0x0D61],
	[0x0D66, 0x0D6F],
	[0x0D82, 0x0D83],
	[0x0D85, 0x0D96],
	[0x0D9A, 0x0DB1],
	[0x0DB3, 0x0DBB],
	[0x0DBD, 0x0DBD],
	[0x0DC0, 0x0DC6],
	[0x0DCF, 0x0DD1],
	[0x0DD8, 0x0DDF],
	[0x0DF2, 0x0DF4],
	[0x0E01, 0x0E30],
	[0x0E32, 0x0E33],
	[0x0E40, 0x0E46],
	[0x0E4F, 0x0E5B],
	[0x0E81, 0x0E82],
	[0x0E84, 0x0E84],
	[0x0E87, 0x0E88],
	[0x0E8A, 0x0E8A],
	[0x0E8D, 0x0E8D],
	[0x0E94, 0x0E97],
	[0x0E99, 0x0E9F],
	[0x0EA1, 0x0EA3],
	[0x0EA5, 0x0EA5],
	[0x0EA7, 0x0EA7],
	[0x0EAA, 0x0EAB],
	[0x0EAD, 0x0EB0],
	[0x0EB2, 0x0EB3],
	[0x0EBD, 0x0EBD],
	[0x0EC0, 0x0EC4],
	[0x0EC6, 0x0EC6],
	[0x0ED0, 0x0ED9],
	[0x0EDC, 0x0EDD],
	[0x0F00, 0x0F17],
	[0x0F1A, 0x0F34],
	[0x0F36, 0x0F36],
	[0x0F38, 0x0F38],
	[0x0F3E, 0x0F47],
	[0x0F49, 0x0F6A],
	[0x0F7F, 0x0F7F],
	[0x0F85, 0x0F85],
	[0x0F88, 0x0F8B],
	[0x0FBE, 0x0FC5],
	[0x0FC7, 0x0FCC],
	[0x0FCF, 0x0FD1],
	[0x1000, 0x1021],
	[0x1023, 0x1027],
	[0x1029, 0x102A],
	[0x102C, 0x102C],
	[0x1031, 0x1031],
	[0x1038, 0x1038],
	[0x1040, 0x1057],
	[0x10A0, 0x10C5],
	[0x10D0, 0x10FC],
	[0x1100, 0x1159],
	[0x115F, 0x11A2],
	[0x11A8, 0x11F9],
	[0x1200, 0x1248],
	[0x124A, 0x124D],
	[0x1250, 0x1256],
	[0x1258, 0x1258],
	[0x125A, 0x125D],
	[0x1260, 0x1288],
	[0x128A, 0x128D],
	[0x1290, 0x12B0],
	[0x12B2, 0x12B5],
	[0x12B8, 0x12BE],
	[0x12C0, 0x12C0],
	[0x12C2, 0x12C5],
	[0x12C8, 0x12D6],
	[0x12D8, 0x1310],
	[0x1312, 0x1315],
	[0x1318, 0x135A],
	[0x1360, 0x137C],
	[0x1380, 0x138F],
	[0x13A0, 0x13F4],
	[0x1401, 0x1676],
	[0x1681, 0x169A],
	[0x16A0, 0x16F0],
	[0x1700, 0x170C],
	[0x170E, 0x1711],
	[0x1720, 0x1731],
	[0x1735, 0x1736],
	[0x1740, 0x1751],
	[0x1760, 0x176C],
	[0x176E, 0x1770],
	[0x1780, 0x17B6],
	[0x17BE, 0x17C5],
	[0x17C7, 0x17C8],
	[0x17D4, 0x17DA],
	[0x17DC, 0x17DC],
	[0x17E0, 0x17E9],
	[0x1810, 0x1819],
	[0x1820, 0x1877],
	[0x1880, 0x18A8],
	[0x1900, 0x191C],
	[0x1923, 0x1926],
	[0x1930, 0x1931],
	[0x1933, 0x1938],
	[0x1946, 0x196D],
	[0x1970, 0x1974],
	[0x1980, 0x19A9],
	[0x19B0, 0x19C9],
	[0x19D0, 0x19D9],
	[0x1A00, 0x1A16],
	[0x1A19, 0x1A1B],
	[0x1A1E, 0x1A1F],
	[0x1B04, 0x1B33],
	[0x1B35, 0x1B35],
	[0x1B3B, 0x1B3B],
	[0x1B3D, 0x1B41],
	[0x1B43, 0x1B4B],
	[0x1B50, 0x1B6A],
	[0x1B74, 0x1B7C],
	[0x1D00, 0x1DBF],
	[0x1E00, 0x1E9B],
	[0x1EA0, 0x1EF9],
	[0x1F00, 0x1F15],
	[0x1F18, 0x1F1D],
	[0x1F20, 0x1F45],
	[0x1F48, 0x1F4D],
	[0x1F50, 0x1F57],
	[0x1F59, 0x1F59],
	[0x1F5B, 0x1F5B],
	[0x1F5D, 0x1F5D],
	[0x1F5F, 0x1F7D],
	[0x1F80, 0x1FB4],
	[0x1FB6, 0x1FBC],
	[0x1FBE, 0x1FBE],
	[0x1FC2, 0x1FC4],
	[0x1FC6, 0x1FCC],
	[0x1FD0, 0x1FD3],
	[0x1FD6, 0x1FDB],
	[0x1FE0, 0x1FEC],
	[0x1FF2, 0x1FF4],
	[0x1FF6, 0x1FFC],
	[0x200E, 0x200E],
	[0x2071, 0x2071],
	[0x207F, 0x207F],
	[0x2090, 0x2094],
	[0x2102, 0x2102],
	[0x2107, 0x2107],
	[0x210A, 0x2113],
	[0x2115, 0x2115],
	[0x2119, 0x211D],
	[0x2124, 0x2124],
	[0x2126, 0x2126],
	[0x2128, 0x2128],
	[0x212A, 0x212D],
	[0x212F, 0x2139],
	[0x213C, 0x213F],
	[0x2145, 0x2149],
	[0x214E, 0x214E],
	[0x2160, 0x2184],
	[0x2336, 0x237A],
	[0x2395, 0x2395],
	[0x249C, 0x24E9],
	[0x26AC, 0x26AC],
	[0x2800, 0x28FF],
	[0x2C00, 0x2C2E],
	[0x2C30, 0x2C5E],
	[0x2C60, 0x2C6C],
	[0x2C74, 0x2C77],
	[0x2C80, 0x2CE4],
	[0x2D00, 0x2D25],
	[0x2D30, 0x2D65],
	[0x2D6F, 0x2D6F],
	[0x2D80, 0x2D96],
	[0x2DA0, 0x2DA6],
	[0x2DA8, 0x2DAE],
	[0x2DB0, 0x2DB6],
	[0x2DB8, 0x2DBE],
	[0x2DC0, 0x2DC6],
	[0x2DC8, 0x2DCE],
	[0x2DD0, 0x2DD6],
	[0x2DD8, 0x2DDE],
	[0x3005, 0x3007],
	[0x3021, 0x3029],
	[0x3031, 0x3035],
	[0x3038, 0x303C],
	[0x3041, 0x3096],
	[0x309D, 0x309F],
	[0x30A1, 0x30FA],
	[0x30FC, 0x30FF],
	[0x3105, 0x312C],
	[0x3131, 0x318E],
	[0x3190, 0x31B7],
	[0x31F0, 0x321C],
	[0x3220, 0x3243],
	[0x3260, 0x327B],
	[0x327F, 0x32B0],
	[0x32C0, 0x32CB],
	[0x32D0, 0x32FE],
	[0x3300, 0x3376],
	[0x337B, 0x33DD],
	[0x33E0, 0x33FE],
	[0x3400, 0x4DB5],
	[0x4E00, 0x9FBB],
	[0xA000, 0xA48C],
	[0xA800, 0xA801],
	[0xA803, 0xA805],
	[0xA807, 0xA80A],
	[0xA80C, 0xA824],
	[0xA827, 0xA827],
	[0xA840, 0xA873],
	[0xAC00, 0xD7A3],
	[0xE000, 0xFA2D],
	[0xFA30, 0xFA6A],
	[0xFA70, 0xFAD9],
	[0xFB00, 0xFB06],
	[0xFB13, 0xFB17],
	[0xFF21, 0xFF3A],
	[0xFF41, 0xFF5A],
	[0xFF66, 0xFFBE],
	[0xFFC2, 0xFFC7],
	[0xFFCA, 0xFFCF],
	[0xFFD2, 0xFFD7],
	[0xFFDA, 0xFFDC],
	[0x10000, 0x1000B],
	[0x1000D, 0x10026],
	[0x10028, 0x1003A],
	[0x1003C, 0x1003D],
	[0x1003F, 0x1004D],
	[0x10050, 0x1005D],
	[0x10080, 0x100FA],
	[0x10100, 0x10100],
	[0x10102, 0x10102],
	[0x10107, 0x10133],
	[0x10137, 0x1013F],
	[0x10300, 0x1031E],
	[0x10320, 0x10323],
	[0x10330, 0x1034A],
	[0x10380, 0x1039D],
	[0x1039F, 0x103C3],
	[0x103C8, 0x103D5],
	[0x10400, 0x1049D],
	[0x104A0, 0x104A9],
	[0x12000, 0x1236E],
	[0x12400, 0x12462],
	[0x12470, 0x12473],
	[0x1D000, 0x1D0F5],
	[0x1D100, 0x1D126],
	[0x1D12A, 0x1D166],
	[0x1D16A, 0x1D172],
	[0x1D183, 0x1D184],
	[0x1D18C, 0x1D1A9],
	[0x1D1AE, 0x1D1DD],
	[0x1D360, 0x1D371],
	[0x1D400, 0x1D454],
	[0x1D456, 0x1D49C],
	[0x1D49E, 0x1D49F],
	[0x1D4A2, 0x1D4A2],
	[0x1D4A5, 0x1D4A6],
	[0x1D4A9, 0x1D4AC],
	[0x1D4AE, 0x1D4B9],
	[0x1D4BB, 0x1D4BB],
	[0x1D4BD, 0x1D4C3],
	[0x1D4C5, 0x1D505],
	[0x1D507, 0x1D50A],
	[0x1D50D, 0x1D514],
	[0x1D516, 0x1D51C],
	[0x1D51E, 0x1D539],
	[0x1D53B, 0x1D53E],
	[0x1D540, 0x1D544],
	[0x1D546, 0x1D546],
	[0x1D54A, 0x1D550],
	[0x1D552, 0x1D6A5],
	[0x1D6A8, 0x1D7CB],
	[0x20000, 0x20000],
	[0x2A6D6, 0x2A6D6],
	[0x2F800, 0x2FA1D],
	[0xF0000, 0xFFFFD],
	[0x100000, 0x10FFFD]
    ];

    debug
    {
	for (int i = 0; i < table.length; i++)
	{
	    assert(table[i][0] <= table[i][1]);
	    if (i < table.length - 1)
	    {
		if (table[i][1] >= table[i + 1][0])
		    printf("table[%d][1] = x%x, table[%d][0] = x%x\n", i, table[i][1], i + 1, table[i + 1][0]);
		assert(table[i][1] < table[i + 1][0]);
	    }
	}
    }

    if (u > 0xD7A3 && u < 0xFF21)
	goto Lisnot;

    // Binary search
    uint mid;
    uint low;
    uint high;

    low = 0;
    high = table.length - 1;
    while (low <= high)
    {
	mid = (low + high) >> 1;
	if (u < table[mid][0])
	    high = mid - 1;
	else if (u > table[mid][1])
	    low = mid + 1;
	else
	    goto Lis;
    }

Lisnot:
    debug
    {
	for (int i = 0; i < table.length; i++)
	{
	    assert(u < table[i][0] || u > table[i][1]);
	}
    }
    return 0;

Lis:
    debug
    {
	for (int i = 0; i < table.length; i++)
	{
	    if (u >= table[i][0] && u <= table[i][1])
		return 1;
	}
	assert(0);		// should have been in table
    }
    return 1;
}

